Monodepth2: Digging Into Self-Supervised Monocular Depth Estimation精读

Monodepth2: Digging Into Self-Supervised Monocular Depth Estimation精读

项目地址:https://github.com/nianticlabs/monodepth2
论文地址:https://arxiv.org/abs/1806.01260

一种较少受到限制的自我监督形式是使用单目视频,其中连续的时间帧提供训练信号。在这里,除了预测深度,网络还必须估计相机的姿态之间的帧,这是具有挑战性的存在,对象的运动。这种估计的摄像机姿态只需要在训练期间,以帮助约束深度估计网络。
在自监督深度估计网络中通常是由两个net组成,一个深度估计网络depth,一个位姿估计网络pose,在monodepth2中这两个网络采用U-NET网络采用encode和decode来实现。
在第一个单目自我监督的方法中,训练了一个深度估计网络和一个分离的姿态网络。为了处理非刚性场景运动,一个附加的运动解释掩码允许模型忽略违反刚性场景假设的特定区域。然而在后面的迭代中他们模型允许在线禁用这一功能以获得优秀的性能。受[4]的启发,[61]提出了一个更为复杂的运动模型,这个模型采用多个运动掩膜来处理非刚性运动区域。然而这没有充分的评估,使得让别人很难理解这些单元。将运动分解为刚性和非刚性,利用深度信息和光流来解释物体的运动。这促进了流估计,但是他们说当训练时联合流和深度估计对于结果并没有提升。在使用光流估计的背景下,[22]表明,它有助于明确的模型的遮挡部分。
最近的一些单目估计方法性能已经和双目的自监督估计方法相接近。约束预测的深度与预测的表面法线一致,并且[69]强制边缘一致性。[40]提出了一种基于近似几何的匹配丢失算法,以提高时间深度的一致性。使用深度归一化层来克服由[15]中常用的深度平滑项引起的对较小深度值的偏好。[5]利用已知类别的预计算实例分割掩码来帮助处理移动对象。

基于表面的损失
自我监督训练通常依赖于对物体表面在帧之间的外观(即亮度恒定性)和材料属性(如 Lambertian)进行假设。[15]显示,与简单的成对像素差异相比,包含基于局部结构的外观损失[64]显着改善了深度估计性能[67,12,76]。[28]将这种方法扩展到包括一个误差拟合术语,并且[43]探索将其与基于对抗性的损失相结合,以鼓励合成图像的真实外观。最后,受[72]的启发,[73]使用地面真相深度来训练一个外观匹配术语。
3、方法
在这里,我们描述了我们的深度预测网络,采取一个单一的颜色图像It输入它,并产生深度地图 Dt。我们首先回顾单目深度估计自监督训练的关键思想,然后描述了我们的深度估计网络和联合训练损失。
在monodepth2中总体的损失是由多个损失计算得到的,后文会提及。
3.1 自监督训练
自监督深度估计将学习问题定义为一种新的视点合成方法,通过训练网络从另一幅图像的视点推测深度。通过中间变量来约束网络去做图像的合成,在我们的网络中这些变量是深度或者视差,我们可以从模型中提取可以解释的深度信息。这是一个病态的问题,因为每个像素可能存在大量不正确的深度,这些深度可以根据两个视图之间的相对姿态正确地重建新视图。经典的双目和多视立体方法通常通过强制深度图中的平滑度来解决这种模糊性,并且在通过全局优化求解每像素深度时通过计算每个区域的深度连续性来解决这种模糊性,例如[11]。与[12,15,76]类似,我们也将我们的问题表述为训练时最小化光度重投影误差。我们给出了每个源视图 It ′相对于目标图像的相对姿态,即 Tt → t ′。我们预测一个稠密的深度图 Dt,它使光度重投影误差 Lp 最小,即:
在这里插入图片描述

此处pe是构建光度误差,例如使用L1距离来计算像素的(光度)距离; Proj ()是求解它的投影深度 Dt 在It ′下的二维坐标,<>是采样运算符。为简便考虑,假设所有相机的内参矩阵都是相同的,虽然有时他们可能不同。和[21]一样我们采用双性采样对原图像采样这是局部可微的,并且我们和[75,15]一样采用L1和SSIM来作为我们的光度误差函数pe。
在这里插入图片描述

当α = 0 .85。如[15]我们使用边缘感知平滑度
其中 dt* = dt/sqrt(dt)是[62]的平均归一化逆深度,以阻止估计深度的收缩。
在双目图像训练中,我们的源图像It ′是双目图像对另一个图像It的第二视图,它具有已知的相对姿态。虽然单目序列的相对姿态事先不知道,但是[76]表明可以训练第二个姿态估计网络来预测投影函数项目中使用的相对姿态 Tt → t ′。在训练过程中,我们同时求解相机的姿态和深度,使 Lp 最小化。对于单目训练,我们使用时间上与 It 相邻的两帧作为源帧,即 It ′∈{ It-1,I t + 1}。在混合训练(MS)中,It ′它包括时间上相邻的帧和双目图像中另一个图像。
其实对于自监督学习来说就是无监督学习,接触到的最简单的无监督学习应该是K-Means聚类算法,给定一些数据通过一定的损失来调整簇的中心不断迭代使得损失最小,完成聚类。可以看出无监督学习想要收敛的话就必须设计好相应的损失函数。
从上文可以看到在这里定义了两个损失函数Lp和Ls,Lp是两幅图像的光度误差,Ls图像的边缘损失,对于Ls论文没有做过多的描述可能还是得回头看一下文献[15]。这里也提到了由于单目序列图像我们无法知道相邻间相机的位姿所以还需要一个网络来估计帧间位姿。

3.2改进自监督深度估计
现存的自监督深度估计网络效果比最好的监督深度估计网络差。为了弥补这一差距,我们提出了一些改进,显著提高了预测的深度质量,而没有增加额外的模型。
每个像素的最小重投影误差
在计算多个源图像的重投影误差时,现有的自监督深度估计方法将重投影误差平均到每个可用的源图像中。这可能导致在目标图像中可见但在某些源图像中不可见的像素出现问题。如果网络为这样一个像素预测了正确的深度,相应的颜色在一个被遮蔽的源图像很可能匹配不正确的目标,导致较高的光度损失。这些有问题的像素来自两个主要类别: 由于在图像边界上的视线之外的像素,以及被遮挡的像素。视野外像素的影响可以通过在重投影损失中掩盖这种像素来减少[40,61] ,但是这不能被遮挡的像素,其中平均重投影可能导致模糊的深度不连续性。
我们提出可以解决这两个问题的方法。对于所有源图像的每个像素我们采用最小的光度误差取代平均光度误差,最终我们每个像素的光度损失如下:
在这里插入图片描述

这种损失的实际例子见图4。使用我们的最小重投影损失显著减少图像边界伪影,提高遮挡边界的清晰度,从而有更好的准确性。
上述是论文的主要创新点之一,将先前使用的整张图像的平均光度差err来作为光度损失loss,改为使用图像中最小的光度差来作为光度损失。
自动屏蔽固定像素点
自监督单目训练是基于假设运动的相机和静止的场景。当这些假设被打破时,例如当摄像头是静止的或场景中有物体运动时,性能会受到很大影响。这个问题在预测是的深度图中表现为无限深度的“洞”,因为在训练过程中通常观察到物体在移动38。这启发了我们的第二个贡献: 一个简单的自动掩蔽方法,在不改变序列的情况下过滤出像素。这样做的效果是让网络忽略了与摄像机速度相同的物体(相对静止),甚至在摄像机停止运动时忽略了单目视频中的整个画面。
这里和slam有些相似,都是需要在假设运动的相机静止的场景下才能较为有效的工作。
像其他论文[76,61,38] ,我们也对损失应用每像素的掩膜 μ,有选择地加权像素。然而,与先前的工作不同,我们的掩模是二进制的,即 μ ∈{0,1} ,并且是在网络的前向传播中通过自动计算,而不是学习或估计的目标运动。我们观察到在序列中相邻帧之间保持相同的像素通常表示一个静态相机,一个与相机运动相同的物体,或者一个低纹理区域。因此,我们将 μ 设置为仅包括采样图像重投影误差低于原始未采样源图像重投影误差的像素损失,
在这里插入图片描述

如果相机和另一个物体以相同的速度移动, μ防止图像中保持静止的像素对loss造成不好的影响。同样的当相机是静止时mask过滤掉整张图像的像素(如图5)。我们的实验表明,这种简单和廉价的修改loss,对结果带来显着的改善。
这里就有点和图像的掩膜差不多,屏蔽掉静止的点。但是论文是在损失函数上来实现这样的思想,为Loss做掩膜。
多尺度估计
由于双线性采样器[21]的梯度局部性,并防止训练目标陷入局部极小值,现有的模型采用多尺度深度预测和图像重建。在这样的方法下面,总损失是解码器中每个尺度上的单个损失的组合。[12,15]计算每个解码器层的不同分辨率图像上的光度误差。我们观察到,在过程中低分辨率的深度地图,有大量的低纹理区域从而导致有创建“洞”的趋势,以及纹理复制伪影(从彩色图像错误转移的深度地图的细节中)。在低分辨率的纹理较弱的区域光度误差比较模糊,就会产生“洞”。这使深度网络(depth network)的任务复杂化,并且会导致自由地预测的深度不正确。受双目重建技术的启发[56] ,我们提出了对这个多尺度公式的改进,其中我们解耦不同分辨率下的视差图像和彩色图像用于计算重投影误差。而不是计算模糊的低分辨率图像上的光度误差,而是首先将较低分辨率的深度图(从中间层)上采样到输入图像的分辨率,然后重新投影,重新采样,并计算在这个较高的输入分辨率下的误差pe(图3(d))。这个过程类似于匹配补丁,因为低分辨率的视差值将负责在高分辨率图像中扭曲整个像素“补丁”。(低分辨率的图像是搞分辨率图像的补丁?)。这样可以有效地约束每个比例尺的深度图,使其朝着相同的目标工作,即尽可能准确地重建高分辨率的输入目标图像。
最终训练的Loss
我们将每个像素的平滑度和掩盖光度损失结合为 L = μLp + λL,并且对每个像素、尺度和批量进行平均。
λ的值为一个超参数
3.3其他的考量
我们的深度估计网络基于一般的 U-Net 体系结构[53] ,即编码器-解码器网络,具有跳跃连接,使我们能够表示深层抽象特征和当前的信息。我们使用 ResNet18[17]作为编码器,与现有工作中使用的更大、更慢的 DisNet 和 ResNet50模型相比[15],其中包含11M的参数。与[30,16]类似,我们从 ImageNet 上预先训练的权重开始[54] ,并且从头训练相比较,结果如表2所示,预训练提高了我们模型的准确性。我们的深度解码器类似于[15] ,在输出时采用激活函数和ELU非线性[7]以及其他一些地方。我们用 D = 1/(aσ + b)将激活函数输出 σ 转换为深度,其中选择 a 和 b 将 D 约束在0.1到100个单位之间。在解码器中,我们使用反射填充代替零填充,当样本落在图像边界之外时,返回源图像中最接近的边界像素的值。我们发现这显著减少了在现有方法中边界伪影的发现,例如[15]。对于姿态估计,我们遵循[62]并使用轴角预测旋转,旋转和平移输出的比例为0.01。对于单目训练,我们使用三帧的序列长度,而我们的姿态网络由 ResNet18形成,修改后接受一对彩色图像(或六个通道)作为输入,并预测单个6自由度相对姿态。我们进行水平翻转和以下训练增强,每个都有50% 概率: 随机亮度,对比度,饱和度和色调抖动,各自的范围分别为 ± 0.2,± 0.2,± 0.2和 ± 0.1。重要的是,颜色增强只适用于输入网络的图像,而不适用于计算 Lp 的图像。提供给姿态和深度网络的所有三幅图像都用相同的参数进行了增强。

猜你喜欢

转载自blog.csdn.net/weixin_43151193/article/details/125664808