逐像素的真实尺度深度数据的大量获取,是具有挑战性的任务。为了克服这个限制,自监督学习已经成为一个有希望的替代训练模型,用来执行单目深度估计。本文中,我们提出了一系列的改进手段,用来提升自监督深度学习深度估计方法的精度。
自监督单目模型训练的研究,通常是探究越来越复杂的结构、损失函数和图像形成模型,而所有这些都有助于缩小与全监督方法的差距。我们展示了一个令人惊讶的简单模型,以及相关的设计选择,可以产生更好的预测。总的来说,我们提出了:
一个最小重投影误差,用来提升算法处理遮挡场景的鲁棒性
一种全分辨率多尺度采样方法,可以减少视觉伪影
一种auto-masking loss,用来忽略训练像素中违反相机运动假设的像素点
我们分别独立的演示了每个组件的有效性,并在KITTI基准上取得了高质量、sota的结果。
我们试图从一个单个彩色输入图像自动推断出一个密集的深度图像。估计绝对深度,甚至相对深度,在没有第二个输入图像的情况下,似乎无法使用三角测量。然而,人类却能从导航以及与现实世界的互动中学习,使我们能够为新场景假设合理的深度估计。
从彩色图像生成高质量的深度图,这项研究是十分具有吸引力的,因为它可以以低廉的价格成本,辅助用于自动驾驶汽车的激光雷达传感器,并支持新的单照片应用,如图像编辑和AR合成。通过使用大量未标注数据集求解深度,也可以达到为下游识别任务的深度神经网络进行预训练的目的。然而,为监督学习收集具有精确的ground truth的深度的大型和多样的训练数据集,其本身就是一个巨大的挑战。作为替代,最近有几个自监督的方法被提出,并且已经证明,可以只使用同步的立体图像对或单目视频来训练单目深度估计模型。在这两种自我监督的方法中,基于单目视频训练是一种有吸引力的替代立体图像监督的方法,但它也带来了一系列挑战。除了估计深度外,模型还需要估计训练过程中时间图像对之间的帧间运动。这通常涉及到训练一个以有限帧序列作为输入,并输出相应的摄像机变换的位姿估计网络。相反,使用立体图像对数据进行训练,使得相机姿态估计成为一次性离线校准(左右眼像平面变换),但可能会导致与遮挡和纹理复制等相关的问题。
我们提出了三种架构和一些可以用来组合的损失项,使得单目深度估计的性能得到大大提升,三种架构分别可以使用单目视频序列,立体双目图像对,或者两者结合的方式进行训练:
一种新颖的外观匹配损失,以解决在使用单目监督时出现的像素遮挡问题
一种新颖而简单的auto-masking方法,可以忽略在单目训练图像中没有发生相对相机运动的像素点
在输入分辨率下执行所有图像采样的多尺度外观匹配损失,导致深度伪影的减少
通过这些改进,我们在KITTI数据集[13]上取得了sota的单目和立体图像自监督深度估计结果,并简化了现有顶级模型中的许多组件。
我们回顾模型:在测试时,以一个单一的彩色图像作为输入,并预测每个像素的深度作为输出。
从单个图像估计深度是一个病态的问题,因为相同的输入图像可以投影到多个似是而非的深度(同一条射线)。为了解决这个问题,基于学习的方法已经证明自己能够拟合预测模型,通过利用彩色图像和它们相应深度之间的关系。各种方法,如结合本地预测[19,55],非参数场景采样[24],通过端到端的监督学习[9,31,10]已经被探索过。基于学习的算法在立体估计[72,42,60,25]和光流方面的性能也是最好的。许多上述方法是完全监督,要求有ground truth深度训练。然而,这在不同的现实环境中是具有挑战性的。结果,有越来越多的工作,利用弱监督训练数据,如已知对象的形式大小[66],稀疏的序数深度(77 6),监督外表匹配项(72、73),或未配对合成深度数据(45,2,16,78),同时还需要收集更多的深度或其他注释。合成训练数据是[41]的另一种选择,但生成大量包含各种真实世界外观和运动的合成数据并非易事。最近的研究表明,传统的从结构中恢复运动(SfM)管道可以生成摄像机姿态和深度的稀疏训练信号[35,28,68],这里的SFM作为与学习阶段解耦的预处理。最近,[65]在我们的模型的基础上加入了来自传统立体算法的噪声深度提示,改进了深度预测。
在缺乏ground truth深度的情况下,一种方法是利用图像重建作为监督信号来训练深度估计模型。在这里,模型被给定一组图像作为输入,要么是以立体对的形式,要么是以单目序列的形式。通过对给定图像预测深度,并将其投影到附近的视图中,通过最小化图像重构误差来训练模型。
自监督的一种形式来自立体图像对。这里,同步立体图像对在训练过程中是可用的,通过预测它们之间的像素视差,可以训练一个深度网络在测试时进行单目深度估计。[67]针对新颖的视图综合问题,提出了一种具有离散深度的模型。[12]通过预测连续的视差值扩展了这个方法,并且[15]通过包括一个左-右深度一致性项产生了优于当前有监督方法的结果。基于立体图像对的方法已经被拓展到与半监督数据[30,39]、生成对抗网络[1,48]、附加一致性[50]、时间信息[33,73,3]结合,为了实时使用[49]。
在这项工作中,我们表明,仔细选择外观损失和图像分辨率,我们可以仅使用单目训练达到立体双目训练的性能。此外,我们的贡献之一延续到立体训练,导致性能也有所提高。
一种约束较少的自我监督形式是使用单目视频,其中连续的时间帧提供训练信号。在这里,除了预测深度之外,网络还必须估计帧之间的摄像机位姿,这在存在物体运动的情况下是具有挑战性的。这个估计的摄像机位姿只需要在训练中帮助约束深度估计网络。在最早的单目自监督方法中,[76]训练了一个深度估计网络和一个单独的位姿估计网络。为了处理非刚性场景运动,一个额外的运动解释蒙版允许模型忽略违反刚性场景假设的特定区域。然而,他们在后续模型的迭代更新中,弃用了这一方案,并取得了更好地性能。受到[4]的启发,[61]提出了一种更复杂的使用多个运动masks的运动模型。然而,这并没有得到充分的评估,因此很难理解它的用途。[71]还将运动分解为刚体和非刚体两部分,利用深度和光流来解释物体运动。这改善了流估计,但他们报告说,联合训练流和深度没有提升估计精度。在光流估计的背景下,[22]表明它有助于显式地建模遮挡。最近的一些方法已经开始缩小单目和立体双目自监督方法之间的性能差距。[70]约束预测深度与预测面法线一致,[69]强制边缘一致。40]提出了一个近似的基于几何的匹配损失,以鼓励时间深度一致性。[62]使用深度归一化层来克服对更小深度值的偏好,这些值来自于[15]中常用的深度平滑项。[5]利用已知类别的预先计算的实例分割掩码来帮助处理移动对象。
自监督训练通常依赖于对物体表面的外观(即亮度稳定性)和材料属性(如朗伯坦面)做出的假设。[15]表明,与简单的两两像素差相比,包含基于局部结构的外观损失[64]显著提高了深度估计性能[67,12,76]。[28]扩展了这种方法,使其包含一个误差拟合项,并且[43]探索了将其与基于对抗性损失相结合,以鼓励逼真的合成图像。最后,受到[72]的启发,[73]使用ground truth深度来训练一个外貌匹配项。
在这里,我们描述我们的深度预测网络,它接受单个彩色图像的输入,并产生一个深度图。我们首先回顾了单目深度估计的自监督训练背后的关键思想,然后描述了我们的深度估计网络和联合训练的损失。
自监督深度估计将学习问题定义为一种新视图合成问题,通过训练一个神经网络来从另一幅图像的视角来预测目标图像的外观。通过使用中间变量来限制网络执行图像合成,在我们的模型的深度或视差中,我们可以从模型中提取这个可解释的深度。这是一个不适定的问题,因为每个像素可能有非常多的不正确深度,在给定两个视图之间的相对位姿的情况下,这些不正确的深度可以正确地重建新视图(想象射线的空间变换)。传统的双目和多视图立体视觉方法通常通过在深度图中增加平滑约束来解决这种模糊性,并在通过全局优化(如[11])求解每个像素深度时,通过在小块上计算照片一致性来解决这种模糊性。
与[12,15,76]类似,我们也将问题表述为训练时光度重投影误差的最小化。我们将每个源图相对于目标图像
的相对位姿记为
我们预测一个稠密的深度图
,通过最小化光度重投影误差
:
这里是光度重建误差,比如L1范数。
是利用
,
和
重投影到
的2D像素坐标,
是采样算符。 为了简单起见,我们假设所有视图的预先计算的相机内参
都是相同的。和[21]一样,我们使用双线性采样对源图像进行采样,这在局部是次可微的,我们遵循[75,15]使用L1范数和SSIM作为我们的光度误差函数
:
这里,。像[15]中的一样,我们使用边缘感知平滑。
其中是像[62]采用的一样的平均归一化逆深度,以防止估计深度的收缩。
在立体图像对训练中,源图像是相对于
的第二视图,其有着已知的相对位姿。 虽然关于单目序列的相对位姿并不能提前知道,[76]表明训练第二个位姿估计网络来预测相对位姿
是可能的。其可以用于投影函数
中。在训练阶段,我们同时预测相机的位姿和深度图,从而最小化
。对于单目序列训练范式,我们使用与
时间相邻的两帧图像作为源图像,也就是说,
。子啊混合训练范式中,
同时包括时序相邻帧和相对的(右)立体图像。
现有的自监督方法相对于有监督方法产生的预测深度精度要低很多。为了缩小差距,我们提出了几种改进手段,它们能有效的替身预测深度的精度,二不需要额外的模型部件。见图 3。
逐像素最小重投影误差损失
在从多个源图像来计算重投影误差时,现有的自监督深度估计方法,对于多源图像的重投影误差取平均。这可能会导致在目标图像中可见但在某些源图像中不可见的像素出现问题,见图 3c。如果网络预测了一个像素的正确深度,那么被遮挡的源图像中的相应颜色很可能与目标不匹配,从而产生一个很高的光度误差。这些有问题的像素主要来自两个类别:一种是处在图像边界,并且由于帧间运动而导致越界(跑出视图外)的像素,另一种是被遮挡的像素。通过在重投影损失中对相应像素进行掩蔽,可以减小视场外像素的影响[40,61],但这并不能处理(去)遮挡情况,平均重投影可能导致模糊的深度不连续。
我们提出了一种改进策略,来处理这两种情况。在每个像素处,我们不是对所有源图像的光度误差进行平均,而是简单地使用最小值。因此,我们最终的每像素光度损失是:
如图4所展示的,是这使用该损失的一个例子。
使用我们的最小重投影误差能有效的减少图像边界上的缺陷,提升遮挡边界的尖锐度,从而产生更高的精度。
自动过滤平稳像素
自监督单目训练通常建立在移动摄像机和静态场景的假设下进行。当这些假设失效时,例如当摄像机静止或场景中有物体运动时,性能会受到很大的影响。这个问题表现在,在测试时的预测深度图中产生无限深度的“孔”,对于在训练[38]期间通常观察到正在移动的对象(如图2)。
这激发了我们的第二个贡献:一个简单的自动屏蔽方法,它过滤掉那些不会在序列中从一帧到下一帧改变外观的像素。这样做的效果是让网络忽略与摄像机以相同速度移动的对象,甚至当摄像机停止移动时忽略单目视频中的整个帧。像其他工作[76、61、38]一样,我们也应用逐像素的mask 损失,有选择地加权像素。然而,与之前的工作相比,我们的掩码是二进制的,所以
,并且是在神经网络前向传播过程中自动计算的,而不是通过物体运动来学习或估计。 我们观察到,在序列中相邻帧之间保持相同的像素通常表示是静态相机情形,或者是与相机相对静止的运动物体,或一个低纹理区域。因此,我们设置μ值只包含那些在变换后图像
上的重投影误差小于在原始图像
上的重投影误差的像素点,如下式:
这里的[]在式子逻辑为真取1。 当相机和另一个物体都以相似的速度移动时,会过滤点这些静止像素,防止他们被计算在loss中。同样,当相机处于静止状态时,mask会滤除图像中的所有像素(如图 5)。
我们通过实验证明,这种简单而廉价的loss修正带来了显著的改善。
多尺度估计
由于双线性采样器[21]的梯度局部性,为了防止训练目标陷入局部极小值,现有的模型采用多尺度深度预测和图像重建。这里,总loss是解码网络在每一尺度上的单个loss的组合。[12,15]计算图像在每个解码层分辨率下的光度误差。我们观察到,这有在中间低分辨率深度图的大的低纹理区域和纹理复制情形下,创建“洞”的趋势。在测光误差不明确的低纹理区域,深度上的孔可以在低分辨率下出现。这使得深度估计网络的任务更加复杂,其可以自由地预测不正确的深度。在立体重建[56]技术的启发下,我们提出了对这种多尺度公式的改进,我们解耦了视差图像和用于计算重投影误差的彩色图像的分辨率。我们首先对低分辨率图像(从中间层)到输入图像分辨率的低分辨率深度图进行上采样,而不是对模糊的低分辨率图像进行光度误差计算,然后重投影,重新取样,并在更高的输入分辨率下计算误差(如图 3d)。这个过程类似于匹配图像块,因为低分辨率视差值将负责在高分辨率图像中扭曲整个像素快。这有效地约束了深度图在每个尺度上都朝着同一个目标努力,即尽可能精确地重建高分辨率输入目标图像。
最终的训练Loss
我们结合逐像素平滑和masked光度损失,并在每个像素,尺度,和批下取平均。
我们的深度估计网络是基于一般的U-Net架构的[53],即一个编码-解码器网络,具有跳转连接,使我们能够表示深层抽象特征以及局部信息。我们使用ResNet18[17]作为我们的编码网络,它包含11M参数,与现有工作[15]中使用的更大、更慢的disnet,以及ResNet50模型相比。与[30,16]类似,我们从在ImageNet[54]上预先训练的权重开始,并表明与从零开始的训练相比,这提高了紧凑模型的准确性(见表 2)。
我们的深度解码网络类似于[15],在输出处使用sigmoid激活函数,在其他地方使用ELU非线性激活函数[7]。我们将sigmoid输出σ转换到深度,通过公式,这里a和b是用来约束D取值在0.1到100个单位之间的。 在解码器中,我们使用反射填充来代替零填充,当采样落在图像边界之外时,返回源图像中最近的边界像素的值。我们发现这极大地减少了现有方法(例如[15])中发现的边界瑕疵。对于姿态估计,我们遵循[62]并使用轴角表示来预测旋转,并将旋转和平移输出缩放0:01。对于单目训练范式,我们使用三帧的序列长度,而我们的位姿网络是由一个ResNet18构成的,修改后接受一对彩色图像(六个通道)作为输入,并预测单个6自由度的相对位姿。我们做水平翻转以及如下的训练数据扩充策略,以50%的几率:随机亮度、对比度、饱和度和色调抖动,其范围分别为±0:2、±0:2、±0:2和±0:1。重要的是,彩色图像扩充只适用于图像被馈送到网络阶段,而不是用来计算
。向位姿和深度网络提供的所有三幅图像都使用相同的参数进行了扩充。
我们的模型是在PyTorch[46]中实现的,使用Adam[26]训练20个epochs,除非另有说明,批处理大小为12,输入/输出分辨率为640×192。我们对前15个epoch使用10 - 4的学习率,然后对其余的epoch使用10 - 5的学习率。使用10%数据的专用验证集。平滑项。训练使用单Tian XP GPU,在S,M,MS训练范式上分别花费8,12,15小时。
在这里,我们验证了:
与现有的重投影误差平均策略相比,我们的最小重投影损失有助于处理被遮挡的像素
我们的auto-masking改善了结果,特别是在使用静态摄像机的场景中进行训练时
我们的多尺度外观匹配损失提高了深度预测精度
我们在KITTI 2015立体声数据集[13]上评估我们的模型,命名为Monodepth2,以便与以前发表的单眼方法进行比较。
我们使用Eigen提供的数据集子集。除消融实验外,对于使用单目序列(即单目和单目+立体)的训练,我们遵循Zhou et al.[76]的预处理去除静态帧。这导致有39,810个单目triplets可以用于训练,4,424名拿来验证。我们对所有的图像使用相同的相机内参,设置相机的主点为图像中心,焦距为KITTI中所有焦距的平均值。对于S以及MS训练范式,我们将两个立体帧(左右)之间的变换设置为固定长度的纯水平平移。在评估过程中,我们将每个标准实践[15]的深度限制为80m。对于我们的单目模型,我们使用由[76]引入的每幅图像的中位数ground truth缩放来报告结果。请参阅补充材料D.2部分,了解我们对整个测试集应用单一中位数缩放的结果,而不是单独缩放每个图像。对于使用任何立体监督的结果,我们不执行中位数缩放,因为在训练期间可以从已知的摄像机基线推断出缩放。
我们比较了我们的模型的几个变体的结果,用不同类型的自监督训练:单眼视频(M),立体(S),和两者(MS)。表1的结果表明,我们的单目方法优于所有现有的sota的自监督方法。
我们也超越了最近的方法([38,51]),它们明确地计算光流和运动掩模。定性结果见图7和补充部分E。
然而,与所有基于深度估计的图像重建方法一样,当场景包含违反我们的Lambertian假设的对象时,我们的模型就会崩溃(图8)。
正如预期的那样,M和S训练数据的组合提高了准确性,这在对大深度错误(如RMSE)敏感的度量标准上尤其显著。尽管我们的贡献是围绕单目训练设计的,我们发现,在只有立体图像对的情况下,我们仍然表现良好。尽管我们使用比[47]的1024×384分辨率更低的分辨率,但我们实现了较高的准确性,并且大大减少了训练时间(20 vs. 200 epoch),并且没有使用后处理。
为了更好地理解我们的模型的组成部分是如何影响单目训练的整体表现的,在表2(a)中,我们通过改变模型的不同组成部分来进行消融研究。我们看到,没有我们的任何贡献的基线模型执行得最差。当组合在一起时,我们所有的组件都会带来显著的改进(Monodepth2 (full))。补充材料C部分显示了更多的试验,这些试验依次关闭了我们整个模型的各个部分。
Benefits of auto-masking 完整的Eigen [8] KITTI分割包含了几个序列,在这些序列中,摄像机不会在帧之间移动,例如,数据采集车在红绿灯处停下来。这些“无摄像机运动”序列可能会给自我监督单眼训练带来问题,因此,在训练时使用昂贵的光流计算来排除这些序列[76]。我们在表2(c)中报告了经过训练的单目结果,即不移除帧。在KITTI上训练的基准模型比我们的完整模型表现更差。
此外,在表2(a)中,我们用来自[76]的预测性mask的重新实现替换了我们的auto-masking。我们发现这个烧蚀模型比完全不使用mask更糟糕,而我们的auto-masking在所有情况下都改善了结果。我们可以在图5中看到auto-masking实际工作的例子。
Effect of ImageNet pretraining 我们遵循之前的工作[14,30,16]在初始化我们的编码器时,使用预先训练在ImageNet[54]上的权值。虽然其他一些单目深度预测工作已经选择不使用ImageNet预训练,我们在表1中显示,即使没有预训练,我们仍然取得了最先进的结果。我们训练这些30个epoch的“w/o预训练”模型以确保收敛。表2显示了我们的贡献给预先培训的网络和那些从零开始培训的网络带来的好处;更多烧蚀见补充材料C部分。
KITTI Odometry 在补充材料的A部分,我们展示了对KITTI的里程计评估。虽然我们的关注点是更好的深度估计,我们的位姿网络表现出了具有竞争力的性能。与之竞争的方法通常提供更多的帧到它们的位姿网络,这可能提高它们的泛化能力。我们还对最近引入的KITTI深度预测评价数据集[59]进行了实验,该数据集有着更加准确的groud truth。我们使用这个新的benchmark split训练模型,并使用在线服务器[27]对其进行评估,并在补充部分D.3中提供结果。此外,93%的Eigen split test具有[59]提供的更高质量的ground truth。就像[1],我们使用这些代替重新投影的激光雷达扫描,以比较我们的方法与几个现有的基准算法,仍然显示优越的性能。
Make3D 在表3中,我们使用在KITTI上训练的模型报告在Make3D数据集[55]上的性能。根据[15]的评价标准,我们的方法优于所有不使用深度监督的方法。然而,Make3D应该谨慎使用,因为它的地面真值深度和输入图像没有很好地对齐,这可能会导致评估问题。我们在一个2×1比例的中心作物上进行评估,并对我们的M模型应用中值缩放。定性结果见图6和补充部分E。
我们提出了一个通用的模型,用于自监督的单目深度估计,实现了最先进的深度预测。我们引入了三种贡献:
一个最小重投影误差,逐像素计算,用来处理单目视频序列中的帧间遮挡问题
auto-masking 损失加权mask,用来筛除那些静止和相对静止的像素
一种全分辨率多尺度采样方法
我们展示了它们如何一起给出了一个简单而有效的深度估计模型,该模型可以用单目视频数据、立体数据或混合单目和立体数据进行训练。