ECCV2018 翻译: DeepTAM: Deep Tracking and Mapping

DeepTAM: Deep Tracking and Mapping

作者: Huizhong Zhou,Benjamin Ummenhofer,Thomas Brox
翻译: Frank

转载请注明出处
水平有限,错误请指出

摘要 本文提出了一种利用学习方法实现的基于关键帧的稠密相机追踪和深度图估计方法。在追踪部分,算法对当前帧视角和合成视角之间的相机位姿增量进行估计,这种做法能极大的简化位姿学习的问题,并且也减少了不同数据集间相机运动的差异性。同时,实验表明,利用多个位姿假设来估计最终位姿能得到更精确的相机位姿预测结果。在建图部分,算法以当前帧的深度图估计为中心,构建CostVolume来对信息进行累积。因为建图部分的网络综合了CostVolume和关键帧的信息来更新当前帧的深度估计,所以它们能有效的利用深度测量和图像先验信息。结果表明,该算法利用少量的图像就达到了SOTA的结果,并且对于相机位姿存在的噪声有鲁棒性。我们将本算法的6DOF位姿追踪结果和基于RGBD的追踪算法得到的位姿进行了比较,并且得到了不相上下的结果。最后,我们对传统的深度图估计方法和本文的深度图估计方法进行了对比。

关键词 相机追踪, 多目立体视觉, 卷积网络

1 Introduction

  当前大量的研究都集中在识别任务上,而利用深度学习来进行相机位姿追踪和3D建图的方法却非常有限。 这是因为,不同于识别任务,3D建图利用传统方法就已经有了很好的解决方案。尽管如此,基于学习的方法还是能对相机追踪和3D建图作出很多贡献。在结合深度学习的几个子任务中,学习方法都已经超过了传统的方法:在视差估计问题中,所有最好的方案都是利用学习方法实现的;在稠密运动立体视觉中,CNN方法一经引入[30],就得到了和传统方法不相上下的结果。

  在本文的研究中,我们将仅利用CNN进行建图扩展到了全尺度的SLAM系统。我们利用深度学习方法来进行视觉SLAM领域最重要的两个部分:相机位姿 追踪和稠密建图。

  本文的主要贡献是基于CNN的相机位姿追踪网络和后端建图网络,该网络对新的数据集泛化能力强,并且能得到不错的结果。这主要是通过以下几个关键的部分来实现的:

  • 一种用来估计合成帧和关键帧之间增量的位姿追踪网络,该网络能减少数据集的差异性问题;
  • 对相机位姿的多个假设方法,以得到更加精确的位姿估计;
  • 一种结合了深度测量和图像先验的后端建图网络,该网络高度鲁棒,并且能得到精确的深度图估计;
  • 一种将CNN和窄带概念进行融合的深度图优化策略;

  和本文最相关的传统方法是DTAM[23],即 稠密追踪和建图。从概念上来说,我们设计了一种和DTAM很类似的方法,只不过是利用CNN来实现的,鉴于此,我们将文中的方法命名为:DeepTAM。

  在追踪部分,DeepTAM利用CNN网络将当前帧和关键帧的图像和深度信息进行对齐,以估计相机的位姿。确切的说,DeepTAM使用了一个规模小、速度快的堆叠网络,该网络实现了Coarse-to-Fine的位姿估计。网络的堆叠递进式的优化了相机位姿的预测。在堆叠的每一步中,输入端都会更新一个虚拟的关键帧,因此提高了相机位姿估计网络的收敛能力。这种增量式的估计防范极大的简化了学习任务并且减少了数据集差异性所带来的影响。另外,实验表明,生成大量的相机位姿估计能提高最终相机位姿的精度。

  我们的后端建图网络建立在平面立体扫描的概念智商,首先,算法会将多幅图像的信息累积在一个CostVolume中,然后利用CNN,结合图像先验和累积的深度测量CostVolume来对深度图进行估计。为了进一步提高深度预测的精度,我们提出了一个新的网络,该网络能利用定义在前一个表面预测附近的窄频深度CostVolume来迭代式的优化深度图的预测结果。最终得到的深度图对于很多任务都是大有裨益的,比如目标定位,场景理解和图像去雾等;

  作为学习方法,DeepTAM非常擅长融合不同的输入信号,并学习输入相机的各自先验。这和传统方法有很大的不同,传统方法主要利用人工设计的特征提取匹配(SIFT)以及图像一致性的假设。学习方法的一个众所周知的问题在于过拟合,因此我们在网络结构设计和学习问题的定义中对这部分做了特殊的考虑,因此网络不会只学习那些没有泛化能力的特征。

   基于以上设计,DeepTAM对不同的数据集具有较强的泛化能力,并且这是目前为止第一个基于CNN的完整的6DOF位姿追踪和后端建图算法。在一些标准评测中,与RGBD追踪算法相比,该方法能利用更少的数据得到不相上下的结果。DeepTAM实现了稠密建图,因此它能处理任意的帧数,并且帧率也十分可观。

2 Related Work

与本文工作最相关的是DTAM,文中的主要设计思路也和DTAM大同小异:先利用关键帧和深度信息的更新来估计稠密的深度图,然后利用该深度图估计几乎无累积漂移的相机位姿追踪。然而,我们利用了完全不同的手段实现了这些功能。确切的说,DeepTAM的追踪和建图部分都是利用CNN网络实现的,也就是仅利用数据来进行任务学习。

  和学习策略最相关的方法是DeMoN,利用前后两帧图像,该方法将6DOF的自身位姿估计和深度图预测定义成了一个学习问题。和DeMoN不同的是,DeepTAM 算法的输入不止两帧图像。我们利用关键帧来避免累积漂移,并且利用多帧的输入来逐渐提高深度估计的精度。

   近来,还有一些类似的学习方法与本文相关。 Agrawal et al.训练了一个CNN网络来预测自身运动,该网络主要是作为特征学习网络的监督项。Kendall et al.利用CNN来进行相机定位人途,Valada et al.则通过研究表明,视觉定位和视觉里程计可以通过同一个网络来实现。DeepVO利用CNN来做视觉里程计,也就是通过网络回归连续两帧间的相对运动。前述文章都没有建图部分,并且他们的网络只能针对训练数据中存在的场景有效。Zhou et al.提出了一种无监督的CNN网络来对自身运动和深度图进行估计,该方法仅在训练阶段利用两帧图像对深度图进行预测,在测试阶段,它只用第一帧图像来估计深度,因此忽略了图像间的视差关系。SfM-Net方法同样如此,尽管她并不需要帧间视差来进行深度估计。UNDeepVO提出构造无监督所示来估计自身运动和深度。以上所有方法其实都类似于DeMoN,它们只利用两帧的信息进行处理,对于数据集的泛化能力也不强。

  在上述方法中,训练和实验基本都是在KITTI数据集上完成的。但KITTI主要是车载的视角,因此只有平面上的3DOF位姿,该位姿可以通过一个2DOF的运动空间推导得到。该位姿的问题在于,相机平移和旋转中最难的不确定部分天然不存在,因为车子是无法翻转运动的。与之形成对比的是,本文的方法会输出一个6DOF的位姿,该位姿能处理这些不确定性,并且输出结果也是在6DOF位姿的数据集上进行评测的。

  短短一篇文章,是远远无法覆盖传统的相机位姿追踪和建图方法的,但除了DTAM之外,还有一些相关工作也值得一提。LSD-SLAM一种利用直接法进行与优化的经典SLAM方法。它提供了包括闭环检测在内的完整SLAM流程。与DTAM和DeepTAM不一样的是,LSD-SLAM只能输出稀疏的深度估计。Engel et al.提出了一种稀疏直接法。他们的研究表明,将相机成像过程进行建模能极大的提高最终的精度。对于学习方法而言,图像成像模型是在CNN网络中天然能学到的。与之相似的是,Kerl et al.对噪声的分布进行精确的建模以提高系统的鲁棒性。同样的,CNN方法也无须担心这个问题。CNN-SLAM在LSD-SLAM之外加入了单帧的深度图估计。与DeepTAM 不同的是,追踪和建图并没有进行紧密耦合。简单来说,追踪部分知识用了深度图估计一张半稠密子图而已。

3 Tracking

假设有了当前帧图像 I C I^C IC和关键帧(关键帧由图像 I K I^K IK和逆深度图 D K D^K DK组成),我们想要预测一个 4 × 4 4\times4 4×4的变换矩阵 T ( K C ) T^(KC) T(KC),该矩阵能将关键帧中的点投影到当前帧中。关键帧位姿 T K T^K TK和当前帧位姿 T C T^C TC之间的关系如下:
(1) T C = T K T K C , w i t h T C , T K , T K C ∈ S E ( 3 ) T^C = T^KT^{KC}, with T^C, T^K, T^{KC} \in SE(3) \tag{1} TC=TKTKCwithTC,TK,TKCSE(3)(1)
学习 T K C T^{KC} TKC其实是在学习当前帧 I C I^C IC和关键帧 ( I K , D K ) (I^K,D^K) (IK,DK)之间的2D-3D的映射关系。众所周知,如果图像对之间的视差足够的小的话,映射关系是能进行有效和精确计算的。由于我们想实时的追踪当前帧的相机位姿,我们合成一个靠近 T C T^C TC的虚拟帧 T V T^V TV。和DTAM类似,我们生成了一个虚拟的关键帧 ( I V , D V ) (I^V,D^V) (IV,DV),该虚拟帧以 T V T^V TV的视角对关键帧 ( T K , D K ) (T^K,D^K) (TK,DK)进行观测。和直接对 T K C T^{KC} TKC进行预测不同,DeepTAM预测的是增量 δ T \delta T δT,我们可以把当前帧的位姿表示为:
(2) T C = T V δ T T^C = T^V \delta T \tag{2} TC=TVδT(2)
这种方法有效的减少了学习方程 δ T = f ( I C , I V , D V ) \delta T = f(I^C,I^V,D^V) δT=f(IC,IV,DV)的难度。最后,我们是利用CNN网络来学 f f f函数的。

3.1 Network Architecture

  我们利用Fig.1所示的编解码网络架构来学习关键帧 ( I K , D K ) (I^K,D^K) (IK,DK)和当前帧 I C I^C IC之间的6DOF位姿。关于网络参数的详细描述可以在文章的补充材料中找到。

  由于相机的运动智能通过关键帧和当前帧之间的联系进行估计,因此我们使用光流估计来作为辅助任务。光流信息能确保网络所学到的特征确实能代表相连帧之间的关系。光流估计的重要性在Tab.1中进行了分析。在生成多个相机估计的网络分支中,其权重是和光流估计网络共享的。如同实验表明的那样(Tab.1),和直接预测相机位姿相比,生成多个相机位姿的假设能最终提高预测位姿的精度。

  位姿生成的最后一部分是由 N = 64 N = 64 N=64个堆叠的、共享权值的全连接网络所组成。研究发现,这种设置比单个全连接网络来预测 N N N个位姿更加稳定,也更加精确。每一个生成的位姿假设都是一个6D的位姿矢量 δ ξ i = ( r i , t i ) T \delta \xi_i = {(r_i,t_i)^T} δξi=(ri,ti)T。其中,3D旋转矢量 r i r_i ri是角度轴的表示方法,而平移量 t i t_i ti则是3D Cartesian坐标系表示法。一方面为了简化表示,另一方面是 δ ξ i \delta \xi_i δξi表示的是刚体的运动,我们利用如下公式来计算最终的位姿估计 δ ξ \delta \xi δξ
δ ξ = 1 N ∑ i = 1 N = 64 δ ξ i \delta \xi = \frac{1}{N} \sum_{i=1}^{N=64} \delta \xi_i δξ=N1i=1N=64δξi
前期的小分辨率图像能得到Coarse的相机运动,而更精细的运动估计则需要更高分辨率的输入。因此,文中使用了一个Coarse-to-Fine的策略来有效的追踪相机的实时位姿。我们训练了三个单独的追中网络,如图Fig2所示,这三个网络在不同分辨率上处理相机位姿估计问题,并且后者在前者的基础上对预测的结果进行优化。
在这里插入图片描述
在这里插入图片描述

3.2 Training

  所有训练方法存在的最主要的问题是对于合适的数据集的强烈依赖。数据集通常并不能覆盖所有可能的模式,这使得网络的泛化能力十分有限。用于自动驾驶的KITTI数据集就是个典型的例子,该数据集只存在平面运动,而无法覆盖到真是的6DOF场景。因此,基于学习的方法很容易过拟合到这种模式,导致泛化能力缺失。人造的数据倒是能解决这个问题,但利用人造的深度生成的图像和真实图像之间是有差距的。

  DeepTAM在两个方面来解决这个问题。第一,利用诸如式 ( 2 ) (2) (2)的形式来预测更新量,即:我们预测的是关键帧和当前帧之间的增量 δ T \delta T δT 而不是绝对的相机位姿。这较少了运动估计的幅度,并且简化了任务的复杂度。第二,我们利用渲染的图像和深度图作为真实关键帧的表示。假设有一个关键帧 ( I K , D K ) (I^K,D^K) (IK,DK),我们在真实的相机位姿 T C T^C TC周围呈正态分布进行采样,得到初始的相机位姿估计 T 0 V T_0^V T0V来生成虚拟关键帧 ( I V , D V ) (I^V,D^V) (IV,DV)。这种方式模拟了所有可能的6DOF运动方式,并且因此能够有效的对数据集进行增强以克服数据集本身存在的相机运动限制。

Datasets 训练数据的图像对来源于SUN3D数据集和SUNCG数据。对于SUN3D 数据集,我们以40cm为基线进行图像对采样。对于SUNCG数据集,我们以标准差为15的正态分布作为基线,以标准差为0.15弧度的正态分布作为旋转角度,来生成图像对。在进行图像对采样时,我们会排除那些图像重叠度小于50%的图像。而对于关键帧深度图 D K D^K DK,我们使用数据集中存在的真值作为训练数据。

Training Objective 追踪网络的损失方程表示如下:
(4) L t r a c k i n g = L f l o w ( w ) + L m o t i o n ( δ ξ ) + L u n c e r t a i n t y ( δ ξ i ) . \mathcal{L}_{tracking} = \mathcal{L}_{flow}(w) + \mathcal{L}_{motion}(\delta \xi) + \mathcal{L}_{uncertainty}(\delta \xi_i). \tag{4} Ltracking=Lflow(w)+Lmotion(δξ)+Luncertainty(δξi).(4)
其中,光流预测输出w和位姿预测输出 δ l x i i \delta lxi_i δlxii是网络的输出。

   L f l o w \mathcal{L}_{flow} Lflow定义了辅助光流网络的损失。我们使用单点间的差作为损失,这也是光流学习中常用的误差测量尺度:
(5) L f l o w = ∑ i , j ∥ w ( i , j ) − w g t ( i , j ) ∥ 2 \mathcal{L}_{flow} = \sum_{i,j}\lVert w(i,j) - w_{gt}(i,j)\rVert_2 \tag{5} Lflow=i,jw(i,j)wgt(i,j)2(5)
  剩下的两个用来生成位姿假设的损失项 L m o t i o n \mathcal{L}_{motion} Lmotion L u n c e r t a i n t y \mathcal{L}_{uncertainty} Luncertainty定义如下:
(6) L m o t i o n = α ∥ r − r g t ∥ 2 + ∥ t − t g t ∥ 2 \mathcal{L}_{motion} = \alpha \lVert r - r_{gt} \rVert_2 + \lVert t - t_{gt} \rVert_2 \tag{6} Lmotion=αrrgt2+ttgt2(6)

(7) L u n c e r t a i n t y = 1 2 l o g ( ∣ ∑ ∣ ) − 2 l o g ( x T ∑ − 1 x 2 ) − l o g ( K v ( 2 x T ∑ − 1 x ) ) \mathcal{L}_{uncertainty} = \frac{1}{2} log(|\sum|) - 2log(\frac{x^T\sum^{-1}x}{2}) - log(K_v(\sqrt{2x^T\sum^{-1}x})) \tag{7} Luncertainty=21log()2log(2xT1x)log(Kv(2xT1x ))(7)

其中,矢量 r r r和矢量 t t t δ ξ \delta \xi δξ中的旋转分量和平移分量,参数 α \alpha α用来均衡两个分量之间的权重。我们将平移旋转这两部分loss和 L u n c e r t a i n t y \mathcal{L}_{uncertainty} Luncertainty进行结合,其中 L u n c e r t a i n t y \mathcal{L}_{uncertainty} Luncertainty是多元Laplace分布的负对数似然。 ∑ \sum 是从预测位姿采样中计算出来的: ∑ = 1 N ∑ i N ( δ ξ i − δ ξ ) ( δ ξ i − δ ξ ) T \sum = \frac{1}{N} \sum_i^N (\delta \xi_i - \delta \xi)(\delta \xi_i - \delta \xi)^T =N1iN(δξiδξ)(δξiδξ)T,而矢量x则等于: x = δ ξ − δ l x i g t x = \delta \xi - \delta lxi_{gt} x=δξδlxigt。在优化过程中,x被认为是常量, K v K_v Kv则是第二种形式Bessel曲线的变种。实验中返现,利用多元Laplace分布比利用多元正态分布能得到更精确的结果。不确定度损失会牵引网络学习 δ ξ i \delta \xi_i δξi

   我们利用Adam进行优化,学习率则和[21]保持一致。网络利用Tensorflow实现和训练。在NVIDIA GTX1080Ti上,追踪网络所需训练时间少于一天。在补充材料中提供了所有关于训练参数的细节。

Mapping

    DeepTAM场景的结构信息表示为为每一个关键帧计算的深度图的集合。为了实现高质量的深度图估计,我们将多帧图像的信息在CostVolume中进行累积,然后再利用CNN网络从CostVolume中提取出深度图。

    假设 C C C是CostVolume, C ( x , d ) C(x,d) C(x,d)是像素点x在深度值为 d ∈ B f b d \in B_{fb} dBfb时的像素一致性误差。我们将在固定深度值范围内 [ d m i n , d m a x ] [d_{min}, d_{max}] [dmin,dmax]的N个深度值集合表示为:
(8) B f b = { b i ∣ b i = d m i n + i × d m a x − d m i n N − 1 , i = 0 , 1 , . . . , N − 1 } B_{fb} = \{b_i|b_i = d_{min} + i \times \frac{d_{max} - d_{min}}{N-1}, i = 0,1,...,N-1\} \tag{8} Bfb={bibi=dmin+i×N1dmaxdmin,i=0,1,...,N1}(8)
    假设有m帧图像序列 I 1 , . . , I m I_1,..,I_m I1,..,Im 和他们对应的位姿信息: T 1 , . . , T m T_1,..,T_m T1,..,Tm,像素一致性误差计算如下:
(9) C ( x , d ) = ∑ i ∈ 1 , . . , m ρ i ( x , d ) × w i ( x ) C(x,d) = \sum_{i \in{1,..,m}} \rho_i(x,d) \times w_i(x) \tag{9} C(x,d)=i1,..,mρi(x,d)×wi(x)(9)
像素一致性 ρ i ( x , d ) \rho_i(x,d) ρi(x,d)是在点x处,当深度值为d时,关键帧 I K I^K IK和合成图像 I ˙ i \dot{I}_i I˙i之间 3 × 3 3 \times 3 3×3块的绝对误差和(SAD)。我们利用变换方程 W ( I i , T i ( T K ) − 1 , d ) \mathcal{W}(I_i, T_i(T^K)^{-1},d) W(Ii,Ti(TK)1,d)来计算 I ˙ i \dot{I}_i I˙i,该方程利用相对位姿和深度将图像 I i I_i Ii变换到关键帧中。

    加权系数 w i w_i wi计算公式如下:
(10) w i ( x ) = 1 − 1 N − 1 ∑ d   i n B f b /   { d ∗ } e x p ( − α × ( ρ i ( x , d ) − ρ i ( x , d ∗ ) ) 2 ) . w_i(x) = 1 - \frac{1}{N-1} \sum_{d \ in B_{fb}/\ \{d^*\}}exp(-\alpha \times (\rho_i(x,d) - \rho_i(x,d^*))^2). \tag{10} wi(x)=1N11d inBfb/ {d}exp(α×(ρi(x,d)ρi(x,d))2).(10)
w i w_i wi表示了匹配的置信度,并且当 d ∗ = a r g m i n d ρ i ( x , d ) d^* = arg min _d\rho_i(x,d) d=argmindρi(x,d)时,ruguo ρ i ( x , d ∗ ) \rho_i(x,d^*) ρi(x,d)能取到唯一的最小值,该置信度为1。

    在传统方法中,CostVolume是作为数据集合存在的,深度图可以通过寻找cost的最小值得到。然而,由于CostVolume中存在噪声,为了得到鲁棒的深度图,需要使用大量复杂的正则化和优化技术。而在CNN方法中,我们训练神经网络利用CostVolume中的匹配损失先验,并将其和图像场景先验进行融合,得到更精确和更鲁棒的深度估计值。

    对于基于CostVolume的方法,精度主要受深度标签的数量N所局限。因此,我们引入了一种自适应的窄频技术在保持标签数量恒定的情况下增加深度采样的密度。我们定义以前一帧深度估计 d p r e v d_{prev} dprev为中心的窄频深度采样如下:
(11) B n b = { b i ∣ b i = d p r e v + i ⋅ σ n b ⋅ d p r e v , i = − N 2 , . . , N − 2 2 } . B_{nb} = \{ b_i|b_i=d_{prev} + i \centerdot \sigma_{nb} \centerdot d_{prev}, i=-\frac{N}{2},..,\frac{N-2}{2} \}. \tag{11} Bnb={bibi=dprev+iσnbdprev,i=2N,..,2N2}.(11)
σ n b \sigma_{nb} σnb定义了窄频的采样宽度。我们选取了一部分的窄频帧,并对其CostVolume进行重新计算,然后再搜索得到一个更好的深度估计值。窄频技术允许算法来恢复深度图更多的细节。但同时也需要较好的初始化措施和正则化项来保持频带在正确的范围内。为了处理这个问题,我们使用了多个编解码网络。Fig.3展示了建图网络的主体架构,其中包括固定频带和窄频两部分。
在这里插入图片描述

Network Architecture

    建图网络的目的是利用关键帧 I K I^K IK和从图像和位姿集合中计算得到的CostVolume V来计算关键帧的逆深度值 D K D^K DK D K D^K DK用逆深度来表示,这对近处景物的深度能有更精确的表示。我们同样利用了Coarse-to-Fine的策略来进行深度估计。因此,建图网络可以分为两个部分,一个是固定频率采样模块,一个是窄频采样模块。固定频率采样模块将CostVolume C f b C_{fb} Cfb中的深度值均匀的分布在整个深度域内,而窄频采样模块的 C n b C_{nb} Cnb则是以当前深度估计为中心分布,并且在当前深度估计附近的小频带内进行信息的累积。

    固定频率模块的输出是在最小和最大深度值之间的一个采样值。因此,网络无法学习到场景的实际尺度,这却也使得网络更加的灵活,也不会被场景本身的尺度所限制。不同于固定频率采样模块,存在一系列相互平行的深度值平面,窄频模块中的深度标签每个都是特殊的。这是再做插值预测是不合适的,因为窄频模块的网络并不知道频带本身的形状。我们故意让该模块无法知晓整体频带的形状,否则网络会对这种形状信息过拟合,并且可能因此忽略掉CostVolume中的损失信息。然而,形状信息的确实会导致深度图正则化非常困难,如图Fig.4所示。为此,我们增加了另一个提纯网络,该网络聚焦于深度的正则化。两个网络都可以被理解为解决数据和平滑性的一种解决方案。
在这里插入图片描述

Training

Mapping网络基于Tensorflow框架,利用Adam优化方法,从零开始训练。训练过程有多个步骤。首先,我们将图像序列采样成长度为8的子序列来训练固定频带模块。然后将参数固定并且加入两个窄频编解码模块来训练。最后,将窄频模块迭代循环3次,并对整体网络进行联合训练。Mapping网络的训练在NVIDIA GTX1080Ti上大概需要8天。

Datasets 为了避免过拟合,Mapping网络在多个数据集上进行了训练。SUN3D数据集有大量的室内场景,我们利用经过TSDF填充的Kinect深度作为真值。SUNCG是一个真实尺度大小的合成3D场景,通过随机采样轨迹,我们从SUNCG中生成了一系列训练场景数据。除了SUN3D和SUNCG,我们还利用COLMAP自己生成了一个数据集,后续称为MVS。该数据集同时包含室内和室外场景,利用广角GoPro采集了全尺寸的图像(2704*1520@50Hz)。在训练是,MVS的图像被下采样到了 320 ⋅ 240 320 \centerdot 240 320240。那些重建失败的场景被手动去除了。

    在训练过程中,我们使用相机位姿的真值来构建CostVolume。

Training Objective 我们使用L1损失来监督逆深度图$\mathcal{L}{depth} = |D - D{gt}| $,同时加入了保证尺度不变性的梯度损失:
(12) L s c − i n v − g r a d = ∑ h ∈ { 1 , 2 , 4 } ∑ i , j ∥ g h [ D ] − g h [ D g t ] ( i , j ) ∥ 2 \mathcal{L}_{sc-inv-grad} = \sum_{h \in \{1,2,4\}}\sum_{i,j}\lVert g_h[D]- g_h[D_{gt}](i,j) \rVert_2 \tag{12} Lscinvgrad=h{1,2,4}i,jgh[D]gh[Dgt](i,j)2(12)
其中:
(13) g h [ D ] ( i , j ) = ( D ( i + h , j ) − D ( i , j ) ∣ D ( i + h , j ) ∣ + ∣ D ( i , j ) ∣ , D ( i , j + h ) − D ( i , j ) ∣ D ( i , j + h ) ∣ + ∣ D ( i , j ) ∣ ) T g_h[D](i,j) = (\frac{D(i+h,j)-D(i,j)}{|D(i+h,j)| + |D(i,j)|},\frac{D(i,j+h)-D(i,j)}{|D(i,j+h)| + |D(i,j)|})^T \tag{13} gh[D](i,j)=(D(i+h,j)+D(i,j)D(i+h,j)D(i,j),D(i,j+h)+D(i,j)D(i,j+h)D(i,j))T(13)
g h [ D ] ( i , j ) g_h[D](i,j) gh[D](i,j) g h [ D g t ] ( i , j ) g_h[D_{gt}](i,j) gh[Dgt](i,j)是深度图预测和深度图真值的梯度图像,该图像能突出深度图中不连续的区域。 h h h是不同的操作 g h g_h gh中的步长。

Experiments

Tracking evaluation

Tab.1 展示了本文相机位姿追踪网络在RGBD评测数据集上的表现。该数据集提供了图像和深度图,以及利用额外的多相机追踪系统采集的精确的相机真值。

    我们使用数据集提供的深度图像来进行关键帧的生成,这样才能衡量出位姿追踪方法本身的表现。表中将关键帧的位姿和Kerl er al 的RGBD-SLAM得到的结果进行了比较。后一方法利用了全部的图像和深度信息来计算位姿,而我们的方法进利用了数据集中关键帧的深度信息。在测试过程中,如果旋转角度超过6度或者平移距离超过15cm,算法会重新生成关键帧。生成的关键帧数量和[17]中RGBD-SLAM生成的关键帧数是在一个数量级的。

    Tab.1表明,本文提出的基于学习的方法利用更少的信息就在大部分序列中超过了传统的RGBD方法的精度。此外,该结果也表明,强制网络去进行多个相机位姿假设的预测会进一步的减少平移的累积漂移。此结果也能表明本文算法的泛化能力,因为我们并没有在评测数据集上进行训练或Finetune。

5.2 Mapping evaluation

    为了评估mapping部分的表现,我们使用如下误差尺度:
(14) s c − i n v ( D , D g t ) = 1 n ∑ i , j E ( i , j ) 2 − 1 n 2 ( ∑ i . j E ( i , j ) ) 2 sc-inv(D,D_{gt}) = \sqrt{\frac{1}{n}\sum_{i,j}E(i,j)^2 - \frac{1}{n^2}(\sum_{i.j}E(i,j))^2} \tag{14} scinv(D,Dgt)=n1i,jE(i,j)2n21(i.jE(i,j))2 (14)
其中 E ( i , j ) = l o g D ( i , j ) − l o g D g t ( i , j ) E(i,j) = logD(i,j) - logD_{gt}(i,j) E(i,j)=logD(i,j)logDgt(i,j),n表示像素点的数量,
(15) L 1 − r e l ( D , D g t ) = 1 n ∑ i ∣ D ( i , j ) − D g t ( i , j ) ∣ D g t ( i , j ) L1-rel(D,D_{gt}) = \frac{1}{n}\sum_i\frac{|D(i,j)-D_{gt}(i,j)|}{D_{gt}(i,j)} \tag{15} L1rel(D,Dgt)=n1iDgt(i,j)D(i,j)Dgt(i,j)(15)

(16) L 1 − i n v ( D , D g t ) = 1 n ∑ i ∣ 1 D ( i , j ) − 1 D g t ( i , j ) ∣ L1-inv(D,D_{gt}) = \frac{1}{n}\sum_i|\frac{1}{D(i,j)}-\frac{1}{D_{gt}(i,j)}| \tag{16} L1inv(D,Dgt)=n1iD(i,j)1Dgt(i,j)1(16)

sc-inv 是[5]中引入的尺度不变度量。L1-rel尺度将深度误差相对真值的深度进行了归一化。L1-inv则更侧重于近处的深度,因为它计算了二者倒数的绝对差。该度量同时也反映了随着场景到相机距离的增加,深度计算的不确定度也在增加。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    在Tab.2中,我们定量的评估了算法中提出的固定频带深度估计和窄频深度估计的性能。结果表明。固定频带深度估计能利用CostVolume中的累积信息来得到更好的深度估计结果。虽然这是传统的CostVolume方法的必然表现,基于学习的方法却未必如此。同样的表现在迭代的窄频深度估计中也是如此。迭代的运行窄频深度估计模块能进一步提高深度估计的精度。在Tab.2 中是这种表现的定量结果,Tab.5中则为定性结果。

    我们同时也将本文的深度估计方法和基于深度学习的经典方法(如DeMoN)以及两个传统的稠密建图方法(DTAM和SGM)进行了比较。对于DTAM,我们使用网上的开源版本OpenDTAM,而SGM则是我们自己的实现。对于这三种方法,我们在图像分辨率为 320 × 240 320 \times 240 320×240时,设置采样数量为32,构建了CostVolume。之后,利用SAD作为像素一致性测量并且设置信息累积的连续帧数为10。我们使用相同的相机位姿真值来做CostVolume的计算以示公平。对于DeMoN,由于只能使用两帧图像,我们输入了序列中的第一帧和最后一针图像,以提供足够的视差。

    在Tab.2中我们可以看出,DeepTAM 在所有的尺度和测试集上都取得了最好的效果。所有的传统方法都存在对多为室内和合成数据集的弱纹理场景不鲁棒的情况。与此同时,我们的算法则不受这些因素的干扰,因为算法将CostVolume的累积信息和场景的先验通过CNN进行了融合。在Fig.6的定量比较中也说明了这一点。除此之外,所有基于CostVolume的方法都很容易受到相机位姿噪声的干扰,而我们的方法则会更鲁棒,。更多的定性分析结果可以在补充视频中获取。

    在Tab.1的右边部分,我们将DeepTAM和去掉位姿优化的CNN-SLAM进行了比较。CNN-SLAM使用半稠密的像素一致性优化方法来计算相机位姿并进行深度图的更新。DeepTAM 并没有在RGBD评测数据集上进行训练,但该算法却能很好的扩展到其他数据集,并且在大部分的序列中都能得到更加鲁棒和精确的结果。

    为了进一步验证算法的泛化能力,我们将训练的原始模型应用到了KITTI数据集上。Fig.7展示了一些定性的比较。

在这里插入图片描述

Conclusions

    本文提出了一种新的基于深度学习的实时稠密追踪和建图算法。在追踪部分,我们发现生成合成的视角可以让我们做相对关键帧的增量更新。在建图部分,本算法能有效的利用CostVolume中的累积信息和图像先验来得到更精确和鲁棒的稠密深度估计。结果表明本文的算法超过了传统的和基于CNN的其他方法。在未来的工作中,我们计划将当前的部分扩展成为一个真正的SLAM系统。
在这里插入图片描述
在这里插入图片描述

References

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值