深度估计:BTS
From Big to Small: Multi-Scale Local Planar Guidance for Monocular Depth Estimation
从大到小:用于单目深度估计的多尺度局部平面引导
https://arxiv.org/abs/1907.10326
Jin Han Lee, Myung-Kyu Han, Dong Wook Ko, Il Hong Suh
[Hanyang University]
https://github.com/cleinc/bts
第三方开源:https://github.com/zhyever/Monocular-Depth-Estimation-Toolbox
https://github.com/cleinc/bts/blob/master/pytorch/bts.py
摘要:从单个图像估计准确的深度具有挑战性,因为这是一个不适定问题,因为可以将无限多的3D场景投影到同一个2D场景。然而,最近基于深度卷积神经网络的工作显示出了巨大的进展,结果似乎可信。卷积神经网络通常由两部分组成:用于密集特征提取的编码器和用于预测所需深度的解码器。在编码器-解码器方案中,重复跨步卷积和空间池化层降低了过渡输出的空间分辨率,并采用了跳连或多层反卷积网络等多种技术来恢复原始分辨率,以实现有效的密集预测。在本文中,为了更有效地将密集编码特征引导到期望的深度预测,我们提出了一种网络架构,该架构利用位于解码阶段多个阶段的新颖的局部平面引导层。我们表明,所提出的方法优于最先进的工作,在具有挑战性的基准上进行了显著的边际评估。我们还提供了消融研究的结果,以验证所提出方法的有效性。
![](https://img.haomeiwen.com/i13727053/607b2bd49b06c6a9.png)
1 引言
二维图像的深度估计在计算机视觉中已经研究了很长一段时间,现在被应用于机器人、自动驾驶汽车、场景理解和3D重建。这些应用通常利用同一场景的多个实例来执行深度估计,例如立体图像对[40]、来自移动相机[34]的多个帧或不同照明条件下的静态捕获[1,2]。由于来自多个观测的深度估计取得了令人印象深刻的进展,它自然会导致使用单个图像进行深度估计,因为它需要更少的成本和约束。
然而,即使对人类来说,从单个图像中估计精确的深度也是有挑战性的,因为这是一个不适定的问题,因为无限多的3D场景可以投射到同一个2D场景中。为了从单个图像中理解几何结构,人类不仅考虑使用局部线索,例如各种照明和遮挡条件下的纹理外观、透视或已知对象的相对比例,还考虑使用全局上下文,例如场景的整个形状或布局[19]。
Saxena等人[38]首次提出基于学习的单目深度估计工作后,随着深度学习的快速发展,已经取得了显著的进步[11,10,28,29,45,35,21,25]。尽管大多数最先进的工作以监督方式应用基于深度卷积神经网络(DCNN)的模型,但一些工作提出了半[24]或自监督学习方法,这些方法不完全依赖于真值深度数据。
同时,最近基于DCNN的应用通常由两部分组成:用于密集特征提取的编码器和用于期望预测的解码器。作为密集特征提取器,通常采用非常强大的深度网络,如VGG[43]、ResNet[18]或DenseNet[20]。在这些网络中,重复的跨步卷积和空间池化层降低了过渡输出的空间分辨率,这可能是获得期望的密集预测的瓶颈。因此,应用了许多技术,例如,多尺度网络[29,10]、跳连[16,47]或多层反卷积网络[25,14,24]来合并来自更高分辨率的特征图。最近,孔洞空间金字塔池(ASPP)[5]已被引入图像语义分割,它可以通过应用具有不同膨胀率的稀疏卷积来捕捉观察中的large scale变化。由于扩张卷积允许更大的感受野大小,最近在语义分割[5,50]或深度估计[12]中的工作并没有通过移除最后几个池化层并使用孔洞卷积重新配置网络以重用预训练的权重。因此,他们的方法具有更大的密集特征(输入空间分辨率的1/8,而在原始基础网络中为1/32或1/64),并对该分辨率执行几乎所有的解码过程,然后进行简单的上采样以恢复原始空间分辨率。
为了定义恢复到全分辨率的显式关系,我们提出了一种网络架构,该架构利用位于解码时多个阶段的新颖的局部平面引导层。具体地,基于编码解码方案,在具有1/8、1/4和1/2的空间分辨率的每个解码阶段,我们放置一个层,该层利用局部平面假设将输入特征图有效地引导到期望的深度。然后,我们组合这些输出以全分辨率预测深度。这在两个方面不同于多尺度网络[10,11]或图像金字塔[16]方法。首先,所提出的层的输出在相应的分辨率中不被视为单独的全局深度估计。相反,我们让这些层学习4维平面系数(4-dimensional plane coefficients),并将它们一起用于重建最终估计的全分辨率深度估计。第二,作为非线性组合的结果,在训练过程中,每个分辨率的单个空间单元都得到了独特的训练。我们可以在图1和图3中看到提议层的示例输出。在具有挑战性的NYU深度V2数据集[42]和KITTI数据集[15]上的实验表明,所提出的方法实现了最先进的结果。
(Second, as a consequence of the nonlinear combination, individual spatial cells in each resolution are distinctively trained while the training progresses)
本文的其余部分组织如下。在对第2节中的相关工作进行了简要调查后,我们在第3节中详细介绍了建议的方法。然后,在第4节中,我们提供了两个具有挑战性的基准测试结果,与最先进的工作进行了比较,并使用各种基础网络作为拟议网络的编码器,我们看到了性能如何随每个基础网络而变化。在第4节中,我们还提供了消融研究,以验证所提出方法的有效性。我们在第5节中总结了本文。
2 相关工作
2.1 监督单目深度估计
在单目深度估计中,监督方法获取单个图像,并使用距离传感器(如RGB-D相机或多通道激光扫描仪)测量的深度数据作为训练监督的真值。Saxena等人[38]提出了一种基于学习的方法,通过马尔可夫随机场获得从视觉线索到深度的函数映射,并将其扩展到基于patch的模型,该模型首先对输入图像进行过分割,并学习3D方向以及由每个patch很好解释的局部平面的位置[39]。Eigen等人[10]引入了一种多尺度卷积架构,该架构在一个网络上学习粗略的全局深度预测,并使用另一个网络逐步细化它们。与之前的单图像深度估计工作不同,他们的网络可以从原始像素学习表示,而无需手工制作的特征,如轮廓、超级像素或低级分割。有几项工作通过将强场景先验用于表面法线估计[46],使用条件随机场来提高准确性[27,23,41]或将学习问题从回归改为分类[3],来跟踪该方法的成功。Fu等人[12]最近的一种监督方法也通过将回归问题改为量化有序回归来实现最先进的结果。Xu等人[49]提出了一种架构,该架构通过在CRF框架内融合来自内层的多尺度估计来利用它们。Gan等人[13]提出用亲和层显式地建模不同图像位置之间的关系。最近,Yin等人[51]介绍了一种使用虚拟法线方向的方法,该方向由重建的3D空间中随机选择的三个点确定,作为几何约束。
2.2 半监督单目深度估计
还尝试以半监督或弱监督的方式训练深度估计网络。Chen等人[6]提出了一种新的方法,该方法使用相对深度和深度排序损失函数的信息来学习无约束图像中的深度预测。最近,为了克服获取高质量深度数据的困难,Kuznietsov等人[24]引入了一种半监督方法,以使用稀疏LiDAR深度数据进行直接监督和图像对准损失作为辅助训练目标来训练网络。
2.3 自监督单目深度估计
自监督方法是指仅需要校正的立体图像对来训练深度估计网络的方法。Garg等人[14]和Godard等人[16]提出了自监督学习方法,巧妙地将问题从直接深度估计转移到图像重建。具体地说,对于校正后的立体图像对,他们的网络尝试将一个视图与另一个视图进行合成,并将两者之间的误差定义为主要训练目标的重建损失。以这种方式,因为学习只需要经过良好校正的、同步的立体对,而不是与相应的RGB图像良好关联的真值深度数据,所以它大大减少了获取新类别场景或环境的数据集的工作量。然而,与当前最佳监督方法相比,存在一些精度差距[51]。Garg等人[14]介绍了编码器架构,并使用光度重建误差来训练网络。Xie等人[47]提出了一种网络,该网络还将一个视图与另一个视图进行合成,通过使用重建误差,他们为每个像素产生了可能差异的概率分布。Godard等人[16]最后提出了一种完全可区分的网络架构,从而可以执行端到端训练。他们还提出了一种新的左右一致性损失,改善了网络的训练和预测。最近,Godard等人[17]提出了一种简单但有效的架构,该架构受益于相关的设计选择,如鲁棒重投影损失、多尺度采样和自动掩码损失。
2.4 基于视频的单目深度估计
还存在使用顺序数据来执行单目深度估计的方法。Yin等人[52]提出了一种由两个生成子网络组成的体系结构,这些子网络通过对抗性学习联合训练,用于在一个周期中组织的视差图估计,以提供相互约束。Mahjourian等人[30]提出了一种方法,该方法明确考虑了整个场景的推断3D几何结构,并在连续帧中加强了估计的3D点云和自运动的一致性。Wang等人[44]采用了可微姿态预测器,并以端到端的方式训练单目深度估计网络,同时受益于姿态预测器。
3 方法
在本节中,我们描述了所提出的单目深度估计网络,该网络具有位于解码时的多个阶段上的新的局部平面引导层。
3.1.网络架构
如图2所示,我们遵循一种编码解码方案,该方案将特征图分辨率降低到,然后恢复原始分辨率
进行密集预测。在我们用作生成H/8特征图的密集特征提取器的主干网络之后,我们将更密集版本[50]的孔洞空间金字塔池化层[5]作为我们的上下文信息提取器,具有不同的扩张率
。然后,在解码的每个阶段,中间输出以因子2恢复到全空间分辨率,我们使用提出的局部平面制导(LPG)层来定位几何引导到期望的深度估计。我们还放置了一个1×1缩减层,以获得最后一个upconv层之后的最佳估计
。最后,来自所提出的层的输出(即,
)和
被拼接并馈送到最终卷积层以获得深度估计
。
![](https://img.haomeiwen.com/i13727053/fc0d9917b8f67285.png)
3.2 多尺度局部平面引导
我们在这项工作中的关键思想是以有效的方式定义内部特征和最终输出之间的直接和明确的关系。与使用简单的最近邻上采样层和编码阶段跳连从而恢复到原始分辨率的现有方法不同,我们放置了新的局部平面引导层,该层利用局部平面假设将特征引导到全分辨率,并将它们一起使用以获得最终深度估计。如图2所示,所提出的层,在给定中间特征图的情况下,可以恢复到全分辨率
,因此它可以用作解码器的跳连,允许中间特征和最终预测之间的直接联系。具体地,给定具有空间分辨率
的特征图,所提出的层为每个空间单元估计4D平面系数(4D plane coefficients),该4D平面系数适合全分辨率
上的局部定义的k×k块,并且它们被连接在一起,用于通过最终卷积层的预测。
(Specifically, given a feature map having spatial resolution H/k, the proposed layers estimate for each spatial cell a 4D plane coefficients that fit a locally defined k × k patch on the full resolution H, and they are concatenated together for the prediction through the final convolutional layers.)
请注意,由于训练损失仅根据最终深度估计(见第3.3节)进行定义,因此LPG层未设计为直接估计相应尺度上的全局深度值。与来自其他LPG层和reduce1x1的输出一起,通过作为最终卷积层的非线性组合的一部分,将每个输出解释为全局深度。通过作为通过最终卷积层的非线性组合的一部分,将每个输出解释为全局深度。因此,如图1和图3所示,它们可以具有不同的范围,学习为一个空间位置的base或者对base的精确的相对补偿。
(Together with outputs from the other LPG layers and reduc1x1, each output is interpreted to the global depth by contributing as a part of the nonlinear combination through the final convolutional layers.Therefore, they can have distinct ranges, learned as a base or precise relative compensation from the base at a spatial location, as shown in Figures 1 and 3.)
![](https://img.haomeiwen.com/i13727053/974e0ec7a4d043d2.png)
这里,我们使用局部平面假设,因为,对于k×k区域,它只需要四个参数就能实现有效的重建。如果我们采用典型的upconvs进行重建,则这个层应该习得有个适当的值,而不是四个。因此,我们可以预期我们的策略会更有效,因为传统的上采样不会给出放大分辨率的细节,而局部线性假设可以提供有效的指导。
为了用局部平面假设来指导特征,我们使用射线平面相交将每个估计的4D平面系数转换为k×k局部深度线索:
(1)
To guide features with the local planar assumption, we convert each estimated 4D plane coefficients to k × k local depth cues using ray-plane intersection:
其中表示估计的平面系数,
是像素
的
patch-wise 归一化坐标。
图4显示了所提层的细节。通过1×1卷积的堆栈,反复将通道数量减少2倍,直到达到3,,我们将获得特征图(假设输入是正方形)。然后,我们通过两种不同的方式传递特征图以获得局部平面系数估计:一种方式是转换为单位法向量
,另一种方式则是定义平面和原点之间的垂直距离
的sigmoid函数。在sigmoid函数之后,我们将输出与最大距离
相乘,以获得实际深度值。由于单位法向量只有两个自由度(即,与预定义轴的极角和方位角
),我们将给定特征图的前两个通道视为角度,并使用以下方程将其转换为单位法向量:
(2)
最后,将它们再次拼接起来,并使用公式1来估计。
![](https://img.haomeiwen.com/i13727053/3f5bd1c5b0179014.png)
我们将局部深度线索设计为在局部区域(即k×k patches)中定义的附加深度(additive depth)。由于在不同阶段的同一空间位置的特征被一起用于预测最终深度,为了有效表示,我们期望在更粗的尺度下学习全局形状,而在更细的尺度上学习局部细节。此外,它们可以相互作用以补偿错误的估计。我们可以如下表示最后一个卷积层的行为:
(3)
其中是激活函数,
表示表示卷积的相应线性变换。请注意,所提出的网络在多个尺度上进行学习,并且通过将训练损失仅定义在最终估计
上,我们并不强制每个尺度的参数要有相等的贡献(we do not enforce parameters for each scale learns with the constant contribution)因此,在训练中,具有尖锐曲率的区域的细节将在更精细的尺度上学习,而主要结构在更粗糙的尺度上。此外,在
中,有最后一次机会恢复上采样估计(
)中的坏假设(Also, there is the last chance in c˜ 1×1 to recover broken assumptions in the upsampled estimations.)。从图3中,我们可以从蓝色和黑色方框图中看到聚焦车辆后面的小细节,蓝色和黑色方框图分别显示了
和
,而这些细节在更粗的尺度
和
中缺失。此外,在车辆边界上的
和
中存在厚黑色估计(thick black estimations),以补偿
和
中的过度估计(over-estimations)。补充材料中提供了更多示例。
3.3 训练损失
在[11]中,Eigen等人引入了尺度不变误差,并从中得到启发,他们使用了以下训练损失:
(4)
其中,真值深度
,
=0.5,
表示具有有效真值值的像素数。通过改写上述方程,
(5)
我们可以看到,它是对数空间中的方差和误差的加权平方均值的和(a sum of the variance and a weighted squared mean of the error in log space)。因此,设置更高的会更加注重最小化误差的方差,我们在这项工作中使用
=0.85。此外,我们观察到适当缩放损失函数的范围可以提高收敛性和最终训练结果。最后,我们将训练损失
定义如下:
(5)
其中是一个常数,我们为所有实验设置为10。
4 实验
为了验证我们方法的有效性,我们提供了具有挑战性的各种设置基准的实验结果。在介绍了我们方法的实现细节之后,我们提供了两个具有挑战性的基准测试的实验结果,这两个基准测试涵盖了室内和室外环境。我们还提供了在线KITTI评估服务器上与已发表作品的比较分数。然后,我们提供了一项消融研究,以讨论所提出的核心因素的详细分析,以及一些定性结果,以证明我们的方法与竞争对手相比。
4.1 实施细节
我们使用开放式深度学习框架PyTorch[32]实现了所提出的网络。对于训练,我们使用Adam优化器[22],,
,
,通过多项式衰减从基础学习率
进行学习,power
。在配备了四个NVIDIA 1080ti GPU的桌面上,本工作中的所有实验的总epoch数设置为50,批量大小为16。
作为密集特征提取的主干网络,我们使用ResNet-101[18]、ResNext-101[48]和DenseNet161[20],使用ILSVRC数据集[36]对预训练的权重进行图像分类训练。由于已知早期卷积的权重针对原始视觉特征进行了良好的训练,因此在基础网络中,我们在训练中固定了前两个卷积层以及批归一化参数。在[16]之后,我们使用指数线性单元(ELU)[7]作为激活函数,而upconv使用最近邻上采样接着3×3卷积层[31]。
为了避免过度拟合,我们在输入到网络之前使用随机水平翻转以及[0.9,1.1]范围内的随机对比、亮度和颜色调整来增强图像,几率为50%。对于KITTI和NYU数据集,我们还分别使用[−1,1]和[−2.5,2.5]度范围内的输入图像的随机旋转。我们在KITTI数据集的352×704和NYU深度V2数据集的416×544的随机裁剪上训练我们的网络。
4.2 NYU Depth V2数据集
NYU Depth V2数据集[42]包含120K RGB和深度对,大小为480×640,使用Microsoft Kinect从464个室内场景中获取视频序列。我们遵循之前作品中的官方训练/测试划分,使用249个场景进行训练,215个场景(654张图像)进行测试。从总共120K个图像深度对中,由于RGB图像和深度图之间的异步捕获速率,我们使用时间戳以均匀的时间间隔对它们进行关联和采样,从而为训练集生成24231个图像深度。使用数据集提供的原始深度图像和相机投影,我们对齐图像深度对以实现精确的像素配准。我们对这个数据集使用。
4.3 KITTI数据集
KITTI为数据集[15]提供了61个“城市”、“住宅”、“道路”和“校园”类别的场景。由于现有的工作通常使用Eigen等人[11]提出的划分来进行训练和测试,因此我们也将其与那些工作进行比较。因此,总共29个场景的697个图像用于评估,23488个图像中的剩余32个场景用于训练。我们对这个数据集使用。
4.4 评价结果
为了进行评估,我们使用了以前作品中使用的以下指标:
其中表示真值可用的像素集合。
使用NYU Depth V2数据集,表1中给出的实验结果表明,我们的DenseNet实现了最先进的结果,在除了RMSE之外的两个度量,inlier度量(即)和精度度量(即AbsRel,log10)中都有显著的提升。我们基于ResNet的模型也优于Yin等人的方法[51],具有相同主干网络ResNext-101[48]的显著优势。
![](https://img.haomeiwen.com/i13727053/75d3327f97601d6a.png)
表2中提供的KITTI数据集进行的评估中,我们以显著的优势优于所有现有的工作。请注意,我们基于ResNet的模型已经优于Fu等人[12]和Yin等人[51]的方法,这些方法分别使用ResNet-101和ResNext-101[48]作为其主干网络。只有我们的均方根误差(RMSE)在捕获范围0-80m内落后于Fu等人的。然而,在0-50m的捕获范围内,我们的ResNet比Fu等人的结果在RMSE方面实现了10%以上的改进。此外,所提出的方法在内部度量(即δ<thres)方面实现了显著的改进,这意味着更多正确估计的像素数,这也可以从图5和图6的定性比较中看出。
![](https://img.haomeiwen.com/i13727053/ac56ae2d346a32da.png)
我们还在在线KITTI基准服务器上使用使用KITTI官方划分训练的模型评估了所提出的方法。除了训练集之外,所有其他设置都与使用KITTI Eigen split的实验相同。我们对我们的DenseNet进行了50轮的训练,从官方训练和验证集中抽取了28654个图像-真值对。如表3所示,我们的方法优于所有已发表的作品。
![](https://img.haomeiwen.com/i13727053/81afe1f9a6aae6b5.png)
![](https://img.haomeiwen.com/i13727053/59375be0b68dfdee.png)
![](https://img.haomeiwen.com/i13727053/25647801bfbf5eea.png)
4.5 消融研究
在这里,我们使用我们网络的变体进行评估,以查看核心因素的有效性。从仅由基础网络(即ResNet-101)和简单的上采样层组成的基线网络,我们用核心模块递增网络,以查看添加的因素如何提高性能。结果见表4。随着核心因素的增加,整体性能得到了改善,而最显著的改进是通过添加所提出的局部平面引导层。请注意,LPG层仅需要额外0.1M可训练参数,这是在1x1reduction层使用的。最后的改进来自于使用等式5中定义的训练损失。得益于强大的基础网络DenseNet-161,我们实现了最先进的性能,并具有显著的余量,同时所需的参数数量比基线少。
![](https://img.haomeiwen.com/i13727053/e3ec57a62556434f.png)
4.6 各种基础网络的实验
由于所提出的网络采用现有模型作为用于密集特征提取的编码器,因此期望看到性能如何随广泛用于类似应用的各种基础网络而变化。通过在其他设置不变的情况下使用各种模型改变编码器,我们使用NYU深度V2和KITTI Eigen split对所提出的方法进行了实验,并在表5和表6中提供了结果。注意,ResNet-101、ResNext101和DenseNet-161分别与表1和表2中的OursResNet、OursResNext和OursDenseNet相同。有趣的是,对于NYU Depth V2数据集,DenseNet161的性能最好,而对于KITTI的Eigen划分,ResNext-101达到了最先进的结果。我们认为这是NYU Depth V2数据集室内场景中数据分布相对较低方差的影响,这可能导致本实验中使用非常深的模型(如ResNext-101)时性能下降。此外,值得注意的是,与我们基于DenseNet-161的模型相比,我们基于MobileNetV2的模型仅导致内部度量的性能下降约3%,精度度量的性能降低不到15%,而它包含的参数数量不到一半,速度提高约三倍。
![](https://img.haomeiwen.com/i13727053/e3669ed5321b3ead.png)
4.7 定性结果
最后,我们讨论了我们和竞争作品的定性结果。如图5和图6所示,我们显示了更精确的对象边界。然而,在使用KITTI的实验结果中,我们可以在天空或场景的上部看到伪影。我们认为这是非常稀疏的真值深度数据的结果。由于某些区域在数据集中缺少有效的深度值,因此无法为这些区域适当地训练网络。
5 结论
在这项工作中,我们提出了一个有监督的单目深度估计网络,并取得了最先进的结果。受益于深度学习的最新进展,我们设计了一种网络架构,该架构使用新颖的局部平面引导层,给出了从内部特征图到所需预测的显式关系,以更好地训练网络。通过在解码阶段的多个阶段部署所提出的层,我们获得了显著的改进,并在具有挑战性的基准上显示了几个实验结果来验证它。然而,在使用KITTI数据集的实验中,我们在场景的上部观察到频繁的伪影。我们分析这是整个数据集中真值高度稀疏的影响。因此,我们计划研究在我们的框架中采用光度重建损失,这可以提供更密集的监督,以进一步提高性能。