案例赏析:基于深度学习的相机重定位

文摘   科技   2024-10-28 10:00   北京  
引自:《场景建模与机器人感知》(作者:杨鑫,尹宝才,魏小鹏)
该书已出版,详细信息请见文末~

「 1. 任务描述 

深度学习技术为场景坐标回归提供了新的思路和解决方案。位姿网络模型(PoseNet)通过迁移学习回归相机位姿,谷歌网络模型(GoogleNet)对相机的位姿直接进行回归,取得了较为优秀的结果。不过对于实际环境中较高要求的定位来说,这种定位方式效果还非常有限,准确度较低,难以直接使用。


在分布式软演员-评论家(Distributional Soft Actor-Critic,DSAC)算法中,采用一个VGG深度卷积网络对RGB图像进行回归得到场景坐标,并提出了可微分的RANSAC算法,使得整个定位求解过程能够端到端地进行训练,该问题的处理方式与随机森林的总体思路非常类似,都是以预测场景坐标为主。


场景坐标是图像一个小区域的中心2D点对应世界坐标系的3D坐标。P3P、PnP算法能够对这些对应的2D-3D对应点进行位姿估计,但由于场景坐标的计算必须利用深度图,因此整个设计的流程很难避免使用深度信息。DSAC++提出了不需要深度图也可以进行场景坐标回归的算法,不过增加了一步初始化过程。在DSAC++算法中,相机的位姿需要完成3步训练以得到最好的位姿估计:第1步是通过场景坐标之间的欧几里得距离作为目标函数来进行训练,第2步是使用重投影误差做进一步的优化训练,最后则使用一个端到端的方式来对执行场景坐标回归。相机的位姿也同样使用一个可以加入端到端训练的RANSAC循环来获取。为了不使用深度信息,在没有深度信息时,DSAC++算法给出的方案是启发式地生成一张假的深度图,用这张假的深度图来进行训练,由于是启发式的方式得到的深度图,因此在这种情况下的第1步训练后一般无法得到良好结果,但在第2步利用重投影误差的训练步骤中位姿估计的准确度会大幅提升。


必须分两步训练的原因是重投影误差无法修正处于相机中心点后面的或距离相机中心太近的点。因此有学者提出了基于角度的重投影误差,这样就能够在没有深度的情况下不进行初始化网络也能够对场景坐标进行回归。


知识点


DenseNet 网络:2017年CVPR上提出的一种完全残差网络,能够在保证原始信息不被损耗的同时,保证每一次反向传播时能够反馈到最前面的网络的一种网络架构。


金字塔池化结构:能够对不同尺度特征进行提取,并结合这些不同尺度的特征有效利用全局信息的一种网络架构,为深度学习解决全局问题提供帮助。


重投影误差:通过将估计的3D点投影至图像上,计算投影点与实际2D点间的欧式距离,来评估3D点估计准确性的一种度量方法。


可微分的随机采样一致方法:在DSAC中提出的采用SoftMax或概率方法进行候选位姿选取的一种可微分的随机采样一致算法,该算法的提出使得相机位姿估计方法能够进行端到端训练。


「 2. 相关工作 


1)DenseNet网络

卷积神经网络的能力

非常强大,但并不是随便搭建卷积网络就能够获得好的训练效果,在建立卷积神经网络时有一些常用的规则,例如在卷积层后面最好添加非线性整合层,在网络的最后一般采用全卷积层或者全连接层。盲目设计的网络通常不会有非常好的表现,因此鲁棒性更好的通用网络结构是非常好的选择。现在被人所熟知的网络模型结构有VGG、GoogleNet、ResNet和DenseNet。

VGG由牛津大学的Visual Geometry Group 设计。最早在2014年的ILSVRC竞赛中排名第二而被广为人知,而排名第一的是GoogleNet。通常来说,VGG在迁移学习任务上的表现更好一些。VGG的模型结构非常简单,在每层的卷积后面加上线性整合函数,每2~4个卷积层后是一个最大池化层,在VGG中,他的卷积核和池化核都比较小。

ResNet又称为残差网络,在2015年被提出,在ImageNet比赛的分类任务上取得了第一名。ResNet50和ResNet101被广泛应用在很多方法中。ResNet的主要结构是它的残差块,如图1所示,残差网络会每隔几层把之前的特征图传过来继续使用,这样的操作能够避免深度网络过深而导致梯度消失。

图1 ResNet的残差块

DenseNe获得了2017年国际计算机视觉与模式识别会议(CVPR)的最佳文章荣誉,DenseNet的一大贡献是它的稠密连接块,它将ResNet的残差理念发挥到了极致,可以将其理解为一个完全残差网络,如图2所示,可以看到DenseNet的结构中,每一个网络层的输出都传递到后面的每一个网络层中,这样操作可以理解为每一次的传递都有前面的最初信息传递过来,这样就能够保证原始的信息不被损耗,同时保证了每一次反向传播时都能够直接反馈到最前面的网络层,这也就使得网络有效的保留了多数的信息。

图2 Dense块的结构

可以说DenseNet是近年来最稳定有效的网络模型结构。这种用于图像处理任务的网络结构也适合运用在基于RGB数据的重定位方面的相关工作上。如果希望在重定位任务中运用到这样的结构,就需要对DenseNet进行详细的分析,并加以利用。DenseNet最为知名的模型有DenseNet-121、DenseNet-169、DenseNet-161和DenseNet-201,后面的数字分别表示在该模型中有多少卷积层。DenseNet是目前表现最为优越的深度神经网络,考虑到其在图像分类任务上的优秀表现,可以认为通过该网络模型进行特征提取将能有效提升模型训练的效果,而实际的表现中它的确能够提升网络的表现能力。而场景坐标回归实际上就是对图像任务的处理,因此,本文使用DenseNet-201作为场景坐标回归的特征提取部分。由于数据集有限,本文将采取迁移训练的方式,改进后面的迁移训练部分,即采用金字塔池化结构。


考虑到场景坐标回归网络预测的坐标数量期望保持在4800个,因此本文采用截断的DenseNet作为特征提取的网络模块,截断的位置由DenseNet根据输出图像的缩放大小决定,设输出图像大小为Psize=PwPh,输出的特征图大小为Fsize=FwFh,由此可得缩放因子为S=Fsize/Psize,取缩放因子的倒数S1,考虑DenseNet中的每一个Dense块之后都会对原图缩放21,故保留的Dense块个数为log2S1,这样的操作保证了DenseNet特征提取的结果能够满足后阶段场景坐标回归的网络。


2)金字塔池化结构


池化是对一部分内容进行特别采样的操作,常见的有平均池化和最大值池化,这两种池化方式分别能够弱化和强化特征。在传统的神经网络和卷积神经网络中都有非常广泛地应用。金字塔池化能够对不同尺度的特征进行提取,结合这些不同尺度的特征,金字塔池化能够有效地利用全局信息,为深度学习更好地解决全局问题提供帮助。


在二维空间中的金字塔池化结构如图3所示,当特征图送入到金字塔池化结构后,分为多个平行分支(在该图中为4个分支),分别对特征图进行最大池化操作,得到宽度不变但尺度不同的4个特征图,这些特征分别代表了不同尺度的特征,尺度的大小可以自行设定。为了将他们的通道宽度降低,之后这些特征图分别通过一个卷积网络层,变得足够窄,这里一般是把特征图的通道数缩减到原来特征图的1/4。这些特征图在最后使用双线性插值的上采样层放大到与输入特征图相同的尺寸大小。因为特征图与进入金字塔池化前的尺寸是一致的,因此能够将这些特征图与传入的特征图堆叠起来,如此下来就对整个场景进行了全局信息的整合。

图3 金字塔池化结构

这种金字塔池化结构首次发表在计算机视觉顶刊CVPR-2017上,Zhao等利用这种结构设计了金字塔场景解析网络,在当年语义分割的竞赛中取得了第一名的成绩,这也得益于金字塔池化网络在全局信息提取上面的有效性。在Zhao的论文中,金字塔池化中池化出四个尺寸,分别为11、22、33和66的尺寸规模。


考虑到金字塔池化网络的全局信息的整合有效性,在本文的网络设计中即使用该模块作为深度学习网络结构的一部分,通过实验能够证明充分有效的全局信息将能够提升网络的有效性和性能。


3)目标函数


本文采用基于角度的重投影误差作为目标函数,但在描述基于角度的重投影误差前,先介绍重投影误差。重投影误差可以理解为实际的图像坐标与世界坐标系下的3D点投影回图像坐标系下的坐标的距离,如图4所示,其中p点为世界坐标系,它在两个图像平面内的真实成像位置为p1和p2,而按照右边估计的相机位姿,点p在右边的投影却在p2点,于是|| p2 p2||即为重投影误差,其具体的形式为:

其中,C为相机内参,P为估计的相机位姿,表示3D点的编号,pk表示场景坐标即图4中所示的p点,pk则表示实际的2D坐标值。整个重投影误差描述了场景坐标与相机位姿的关系,它们之间需要互相配合才能够使得误差尽可能小。由于重投影误差描述的仅仅是3D点与2D点对之间的差别,因此一个位姿同时要照顾所有的对应关系,就目前看来这种关系的实现非常困难,因此通常只能使一张图像的重投影误差尽可能小,而不是让位姿使得整张图的重投影误差为0。

图4 重投影误差示意图

Brachmann等使用了重投影误差作为卷积网络的目标函数,但要使用这个目标函数必须要通过假设一些深度来对网络进行初始化。Li等指出重投影误差的设计之处考虑的即是将图像均投影回图像坐标系下,但其在设计时并没有考虑一些特殊情况,在这些情况下重投影误差将会失效,如图5(a)所示,图中x表示估计的场景坐标,c表示相机中心,x表示实际的场景坐标点,x与x则分别表示估计场景坐标点的投影和实际坐标的投影,由此可见如果场景坐标在相机中心的后面,重投影误差仍然可以非常小,即使这两个点是距离相差巨大的完全不同的点,在这种情况下,重投影误差将没有任何效用。图5(b)展示了另外一个重投影误差失效的情况,当场景坐标预测的点在与相机中心点非常接近时,这时场景坐标的深度值可能为一个很小的数,这样重投影出的2D坐标将极大地偏离其真实的位置。这两种失效的情况最终导致网络不能稳定收敛,因此网络的初始化是必要的,为了避免不必要的运算,可采用基于角度的重投影误差作为目标函数。

图5 重投影误差的失效情况

基于角度的重投影误差见图6。由于单纯的重投影误差作为损失函数直接训练会因为前述的缺陷而导致无法收敛或在某一个局部最小值点停下。因此如果要使用重投影误差就需要将网络进行初始化,将所有预测的场景坐标控制在成像平面的前方。

图6 基于角度的重投影误差

在图6中描述了基于角度的重投影误差,考虑将图像坐标系下的点x投影回深度为焦距f的相机坐标系下得到点x,接下来以x 到相机中心c的距离为半径做球体,估计的场景坐标x则按照比例投影到这个球体上,它们之间如果不重合则会形成夹角,要最小化夹角 可以最小化||x x ||,写成完整的式子则为

其中,dk=f C1 pk,Dk=P1pk,f为焦距,C为相机的内参矩阵,P为估计的相机位姿,pk表示场景坐标即图中的x点,pk表示真实的2D坐标即图中的x点。


从图中可以看出基于角度的重投影误差实际上是将场景坐标点和图像坐标点均投影到以焦距为深度的球体上,然后度量他们在球体上的空间欧几里得距离,如果这两个点非常相近,那么他们的效果与重投影误差是一样的,如此设计能够避免前述的两个重投影误差会遇到的问题。


4)模型框架


本文采用预训练的DenseNet作为迁移训练中不变的部分,随后参与训练的部分使用一个金字塔池化模块,如图7所示,对于该网络模型的搭建较为容易。不过对于训练一个深度卷积神经网络来说,还需要对其设定目标函数。目标函数对于神经网络来说非常重要,整个神经网络的目的是调整整个网络的参数使得输入的数据经过运算后让目标函数得到的值最小。可见,目标函数在神经网络中扮演非常重要的角色。

图7 场景坐标回归模型

对目标函数进行合理的调整将能够进一步提升网络的性能。本文对先前提出的目标函数添加了一些创新性的权重以使得其能够将神经网络训练得更好,设计了两个主要的权重,通过实验能够证明它们的有效性,将在基础的损失函数的描述后对它们进行描述。


「 3. 技术方法 


基于深度学习方法的重定位流程:基于深度学习方法的相机重定位方法分为两个步骤:第1个步骤是对场景坐标进行回归。P3P和PnP求解位姿的方法中采用的2D-3D对应关系中的3D坐标即可理解为这里描述的场景坐标,其不同点在于深度学习方法中的2D指代的是一个图片块的中心,估计的3D坐标对应的也是这个中心的世界坐标系下的坐标值。第2个步骤是进行位姿求解,由于是估计得到的坐标值,整体的场景坐标并不精确,需要优化算法来求解,考虑坐标位姿估计有大量的外点,会极大地影响场景坐标估计的准确度,因此通常采用随机采样一致(RANSAC)算法的循环计算来进行位姿估计和优化。


图8较为详细地展示了本文采用的定位流程,通过本文设计的网络模型来获取坐标点预测,第2个步骤被详细地分解为几个具体的步骤。首先按照前文RANSAC算法中提及的先生成含有n个位姿估计的位姿估计池,随后对这些位姿的估计进行评分,评分首先计算每一个位姿对于所有点的重投影误差,后通过sigmoid函数处理后进行加和。SoftMax函数用来选择这些位姿中的最好的一个,在SoftMax前,分数的差别很小,但SoftMax函数操作数据之后最高分则更容易选取出来。在选择了评分最高的位姿后,选取它们的内点进行RANSAC算法的循环迭代过程,最后得到预测的位姿。

图8 基于深度学习方法的重定位流程图

「 4. 结果展示 

完成了前面所有的准备步骤后,既可以开始对场景进行训练,在C++中编程完成数据集导入器后,使用Torch7搭建模型并进行训练。在训练过程中,本文采用随机从训练集中选取图像的方式,对卷积网络进行训练,使用Adam优化算法,初始的学习率为,随后在50000次迭代后,学习率每25000次迭代后减半。网络每1000次迭代后保存一次模型,总共训练200000次迭代。训练时使用的损失函数为带权重的基于角度的重投影误差。为了测试权重对实验结果的影响,为每个权重分别进行单独的训练。一个场景在一个GPU上训练并测试完模型所需要消耗的时间约为24~48h。

版权归原作者所有

编辑:刘杨

编审:辛召



——————————————————————


点击图片,即可下单




相关阅读推荐(点击文章标题跳转)↓

新书推荐丨“图像图形智能处理理论与技术前沿”系列丛书《场景建模与机器人感知》正式出版


智造苑
欢迎加入,秉承“先进制造、制造强国”的理念,为大家提供专业的知识服务!
 最新文章