[深度学习]MonoDepth2论文阅读_单目深度估计(1)

文章标题:Digging Into Self-Supervised Monocular Depth Estimation

摘要:

        逐像素的真实尺度深度数据的大量获取,是具有挑战性的任务。为了克服这个限制,自监督学习已经成为一个有希望的替代训练模型,用来执行单目深度估计。本文中,我们提出了一系列的改进手段,用来提升自监督深度学习深度估计方法的精度。

       自监督单目模型训练的研究,通常是探究越来越复杂的结构、损失函数和图像形成模型,而所有这些都有助于缩小与全监督方法的差距。我们展示了一个令人惊讶的简单模型,以及相关的设计选择,可以产生更好的预测。总的来说,我们提出了:

  1. 一个最小重投影误差,用来提升算法处理遮挡场景的鲁棒性

  2. 一种全分辨率多尺度采样方法,可以减少视觉伪影

  3. 一种auto-masking loss,用来忽略训练像素中违反相机运动假设的像素点

我们分别独立的演示了每个组件的有效性,并在KITTI基准上取得了高质量、最先进的结果。

 

一、引言:

        我们试图从一个单个彩色输入图像自动推断出一个密集的深度图像。估计绝对深度,甚至相对深度,在没有第二个输入图像的情况下,似乎无法使用三角测量。然而,人类却能从导航以及与现实世界的互动中学习,使我们能够为新场景假设合理的深度估计。

        从彩色图像生成高质量的深度图,这项研究是十分具有吸引力的,因为它可以以低廉的价格成本,辅助(补充)用于自动驾驶汽车的激光雷达传感器,并支持新的单照片应用,如图像编辑和AR合成。通过使用大量未标注数据集求解深度,也可以达到为下游识别任务的深度神经网络进行预训练的目的。然而,为监督学习收集具有精确的ground truth的深度的大型和多样的训练数据集,其本身就是一个巨大的挑战。作为替代,最近有几个自监督的方法被提出,并且已经证明,可以只使用同步的立体图像对或单目视频来训练单目深度估计模型。

        在这两种自我监督的方法中,基于单目视频训练是一种有吸引力的替代立体图像监督的方法,但它也带来了一系列挑战。除了估计深度外,模型还需要估计训练过程时间图像对之间的帧间运动。这通常涉及到训练一个以有限帧序列作为输入,并输出相应的摄像机变换的位姿估计网络。相反,使用立体图像对数据进行训练,使得相机姿态估计成为一次性离线校准(左右眼像平面变换),但可能会导致与遮挡和纹理复制等相关的问题。

       我们提出了三种架构和一些可以用来组合的损失项,使得单目深度估计的性能得到大大提升,三种架构分别可以使用单目视频序列,立体双目图像对,或者两者结合的方式进行训练:

  1. 一种新颖的外观表面匹配损失,以解决在使用单目监督时出现的像素遮挡问题

  2. 一种新颖而简单的auto-masking方法,可以忽略在单目训练图像中没有发生相对相机运动的像素点

  3. 在输入分辨率下执行所有图像采样的多尺度外观匹配损失,导致深度伪影的减少

通过这些改进,我们在KITTI数据集[13]上取得了(sota)体现最高水平的的单目和立体图像自监督深度估计结果,并简化了现有顶级模型中的许多组件。

 

二、相关工作:

      我们回顾模型:在测试时,以一个单一的彩色图像作为输入,并预测每个像素的深度作为输出。

2.1 有监督深度估计

       从单个图像估计深度是一个病态的问题,因为相同的输入图像可以投影到多个似是而非的深度(同一条射线)。为了解决这个问题,基于学习的方法已经证明自己能够拟合预测模型,通过利用彩色图像和它们相应深度之间的关系。各种方法,如结合本地预测[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]在我们的模型的基础上加入了来自传统立体算法的噪声深度提示,改进了深度预测。

2.2 自监督深度估计

       在缺乏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深度来训练一个外貌匹配项。

 

三、方法:

       在这里,我们描述我们的深度预测网络,它接受单个彩色图像的输入I_t,并产生一个深度图D_t。我们首先回顾了单目深度估计的自监督训练背后的关键思想,然后描述了我们的深度估计网络和联合训练的损失。

3.1 自监督训练

       自监督深度估计将学习问题定义为一种新视图合成问题,通过训练一个神经网络来从另一幅图像的视角来预测目标图像的外观。通过使用中间变量来限制网络执行图像合成,在我们的模型的深度或视差中,我们可以从模型中提取这个可解释的深度。这是一个不适定的问题,因为每个像素可能有非常多的不正确深度,在给定两个视图之间的相对位姿的情况下,这些不正确的深度可以正确地重建新视图(想象射线的空间变换)。传统的双目和多视图立体视觉方法通常通过在深度图中增加平滑约束来解决这种模糊性,并在通过全局优化(如[11])求解每个像素深度时,通过在小块上计算照片一致性来解决这种模糊性。

       与[12,15,76]类似,我们也将问题表述为训练时光度重投影误差的最小化{SP1:SLAM DSO的影子}。我们将每个源图I_t{'}相对于目标图像I_t的相对位姿记为T_{t\rightarrow t{'}}我们预测一个稠密的深度图D_t ,通过最小化光度重投影误差L_p

Eq 1,2

这里pe是光度重建误差,比如L1范数。 proj()是利用D_tT_{t\rightarrow t^{'}}K 重投影到I_t^{'}的2D像素坐标,<>是采样算符。 为了简单起见,我们假设所有视图的预先计算的相机内参K都是相同的。和[21]一样,我们使用双线性采样{SP2}对源图像进行采样,这在局部是次可微的,我们遵循[75,15]使用L1范数和SSIM{SP3}作为我们的光度误差函数pe

Eq 3

这里,\alpha=0.85。像[15]中的一样,我们使用边缘感知平滑。

其中d_t^{*}=d_t/\overline{d_t}是像[62]采用的一样的平均归一化逆深度,以防止估计深度的收缩

         在立体图像对训练中,源图像I_{t^{'}}是相对于I_t的第二视图,其有着已知的相对位姿。 虽然关于单目序列的相对位姿并不能提前知道,[76]表明训练第二个位姿估计网络来预测相对位姿T_{t\rightarrow t^{'}}是可能的。其可以用于投影函数proj中。在训练阶段,我们同时预测相机的位姿和深度图,从而最小化L_p。对于单目序列训练范式,我们使用与I_t时间相邻的两帧图像作为源图像,也就是说,I_{t^{'}}\in\{I_{t-1},I_{t+1}\} 。子啊混合训练范式中,I_{t^{'}}同时包括时序相邻帧和相对的(右)立体图像。

3.2提升的自监督深度估计

        现有的自监督方法相对于有监督方法产生的预测深度精度要低很多。为了缩小差距,我们提出了几种改进手段,它们能有效的替身预测深度的精度,而不需要额外的模型部件。见图 3。

图 3

逐像素最小重投影误差损失

       在从多个源图像来计算重投影误差时,现有的自监督深度估计方法,对于多源图像的重投影误差取平均。这可能会导致在目标图像中可见但在某些源图像中不可见的像素出现问题,见图 3c。如果网络预测了一个像素的正确深度,那么被遮挡的源图像中的相应颜色很可能与目标不匹配,从而产生一个很高的光度误差。这些有问题的像素主要来自两个类别:一种是处在图像边界,并且由于帧间运动而导致越界(跑出视图外)的像素,另一种是被遮挡的像素。通过在重投影损失中对相应像素进行掩蔽,可以减小视场外像素的影响[40,61],但这并不能处理(去)遮挡情况,平均重投影可能导致模糊的深度不连续

       我们提出了一种改进策略,来处理这两种情况。在每个像素处,我们不是对所有源图像的光度误差进行平均,而是简单地使用最小值。因此,我们最终的每像素光度损失是:

Eq 4

如图4所展示的,是这使用该损失的一个例子。使用我们的最小重投影误差能有效的减少图像边界上的缺陷,提升遮挡边界的尖锐度,从而产生更高的精度。

图 4

自动过滤平稳像素

        自监督单目训练通常建立在移动摄像机和静态场景的假设下进行。当这些假设失效时,例如当摄像机静止或场景中有物体运动时,性能会受到很大的影响。这个问题表现在,在测试时的预测深度图中产生无限深度的“孔”,对于在训练[38]期间通常观察到正在移动的对象(如图2)。

图 2

这激发了我们的第二个贡献:一个简单的自动屏蔽方法,它过滤掉那些不会在序列中从一帧到下一帧改变外观的像素。这样做的效果是让网络忽略与摄像机以相同速度移动的对象,甚至当摄像机停止移动时忽略单目视频中的整个帧。

        像其他工作[76、61、38]一样,我们也应用逐像素的mask \mu损失,有选择地加权像素。然而,与之前的工作相比,我们的掩码是二进制的,所以\mu \in \{0,1\},并且是在神经网络前向传播过程中自动计算的,而不是通过物体运动来学习或估计。 我们观察到,在序列中相邻帧之间保持相同的像素通常表示是静态相机情形{SP4:弯曲车道线空洞},或者是与相机相对静止的运动物体,或一个低纹理区域。因此,我们设置μ值只包含那些在变换后图像I_{t\rightarrow t^{'}} 上的重投影误差小于在原始图像I_{t^{'}}上的重投影误差的像素点{SP5:???},如下式:

Eq 5

这里的[]在式子逻辑为真取1。 当相机和另一个物体都以相似的速度移动时,\mu会过滤点这些静止像素,防止他们被计算在loss中。同样,当相机处于静止状态时,mask会滤除图像中的所有像素(如图 5)。

图 5

我们通过实验证明,这种简单而廉价的loss修正带来了显著的改善。

多尺度估计

       由于双线性采样器[21]的梯度局部性,为了防止训练目标陷入局部极小值,现有的模型采用多尺度深度预测和图像重建。这里,总loss是解码网络在每一尺度上的单个loss的组合。[12,15]计算图像在每个解码层分辨率下的光度误差。我们观察到,这有在中间低分辨率深度图的大的低纹理区域和纹理复制情形下,创建“洞”的趋势。在测光误差不明确的低纹理区域,深度上的孔可以在低分辨率下出现。这使得深度估计网络的任务更加复杂,其可以自由地预测不正确的深度。在立体重建[56]技术的启发下,我们提出了对这种多尺度公式的改进,我们解耦了视差图像和用于计算重投影误差的彩色图像的分辨率。我们首先对低分辨率图像(从中间层)到输入图像分辨率的低分辨率深度图进行上采样,而不是对模糊的低分辨率图像进行光度误差计算,然后重投影,重新取样,并在更高的输入分辨率下计算误差pe(如图 3d)。这个过程类似于匹配图像块,因为低分辨率视差值将负责在高分辨率图像中扭曲整个像素快。这有效地约束了深度图在每个尺度上都朝着同一个目标努力,即尽可能精确地重建高分辨率输入目标图像。

最终的训练Loss

      我们结合逐像素平滑和masked光度损失L=\mu L_p+\lambda L_s,并在每个像素,尺度,和批下取平均

3.3 其他考虑项

       我们的深度估计网络是基于一般的U-Net架构的[53],即一个编码-解码器网络,具有跳转连接,使我们能够表示深层抽象特征以及局部信息。我们使用ResNet18[17]作为我们的编码网络,它包含11M参数,与现有工作[15]中使用的更大、更慢的disnet,以及ResNet50模型相比。与[30,16]类似,我们从在ImageNet[54]上预先训练的权重开始,并表明与从零开始的训练相比,这提高了紧凑模型的准确性(见表 2)。

表 2

       我们的深度解码网络类似于[15],在输出处使用sigmoid激活函数,在其他地方使用ELU非线性激活函数[7]。我们将sigmoid输出σ转换到深度,通过公式D=1/(a \sigma+b),这里a和b是用来约束D取值在0.1到100个单位之间的。 在解码器中,我们使用反射填充来代替零填充,当采样落在图像边界之外时,返回源图像中最近的边界像素的值。我们发现这极大地减少了现有方法(例如[15])中发现的边界瑕疵。对于姿态估计,我们遵循[62]并使用轴角表示来预测旋转,并将旋转和平移输出缩放0.01。对于单目训练范式,我们使用三帧的序列长度,而我们的位姿网络是由一个ResNet18构成的,修改后接受一对彩色图像(六个通道)作为输入,并预测单个6自由度的相对位姿。我们做水平翻转以及如下的训练数据扩充策略,以50%的几率:随机亮度、对比度、饱和度和色调抖动,其范围分别为±0:2、±0:2、±0:2和±0:1。重要的是,彩色图像扩充只适用于图像被馈送到网络阶段,而不是用来计算L_p。向位姿和深度网络提供的所有三幅图像都使用相同的参数进行了扩充。

我们的模型是在PyTorch[46]中实现的,使用Adam[26]训练20个epochs,除非另有说明,批处理大小为12,输入/输出分辨率为640×192。我们对前15个epoch使用10 - 4的学习率,然后对其余的epoch使用10 - 5的学习率。使用10%数据的专用验证集。平滑项\lambda=0.001。训练使用单Tian XP GPU,在S,M,MS训练范式上分别花费8,12,15小时。

 

四、实验:

在这里,我们验证了:

  1. 与现有的重投影误差平均策略相比,我们的最小重投影损失有助于处理被遮挡的像素

  2. 我们的auto-masking改善了结果,特别是在使用静态摄像机的场景中进行训练时

  3. 我们的多尺度外观匹配损失提高了深度预测精度

我们在KITTI 2015立体声数据集[13]上评估我们的模型,命名为Monodepth2,以便与以前发表的单眼方法进行比较。

4.1 KITTI Eigen Split

我们使用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的自监督方法。

表 1

我们也超越了最近的方法([38,51]),它们明确地计算光流和运动掩模。定性结果见图7和补充部分E。

图 7

然而,与所有基于深度估计的图像重建方法一样,当场景包含违反我们的Lambertian假设的对象{SP6}时,我们的模型就会崩溃(图8)。

图 8

正如预期的那样,M和S训练数据的组合提高了准确性,这在对大深度错误(如RMSE)敏感的度量标准上尤其显著。尽管我们的贡献是围绕单目训练设计的,我们发现,在只有立体图像对的情况下,我们仍然表现良好。尽管我们使用比[47]的1024×384分辨率更低的分辨率,但我们实现了较高的准确性,并且大大减少了训练时间(20 vs. 200 epoch),并且没有使用后处理。

4.1.1 KITTI Ablation Study

      为了更好地理解我们的模型的组成部分是如何影响单目训练的整体表现的,在表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部分。

 

4.2 其他额外的数据集

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。

 

五、结论:

我们提出了一个通用的模型,用于自监督的单目深度估计,实现了最先进的深度预测。我们引入了三种贡献:

  1. 一个最小重投影误差,逐像素计算,用来处理单目视频序列中的帧间遮挡问题

  2. auto-masking 损失加权mask,用来筛除那些静止和相对静止的像素

  3. 一种全分辨率多尺度采样方法

我们展示了它们如何一起给出了一个简单而有效的深度估计模型,该模型可以用单目视频数据、立体数据或混合单目和立体数据进行训练。

 


{SP0}:笔记补充

 

模型的训练过程

 

                                                     可以同时使用运动自监督和双目自监督

光度重建误差

        目标图像位于第0帧,并且用于姿态估计过程的图像可以是前一帧或后一帧,也就是帧+1或帧-1。该损失是基于目标图像和重建的目标图像之间的相似性。重建过程通过使用姿态网络从源帧(帧+1或帧-1)计算转换矩阵开始。然后使用旋转和平移的信息来计算从源帧到目标帧的映射。最后使用从深度网络预测的目标图像的深度图和从姿势网络转换的矩阵,将其投影到具有固有内参矩阵K的摄像机中,以获取重建的目标图像。此过程需要先将深度图转换为3D点云,通过姿态将点云转换到另一个坐标系后再使用相机内参将3D点转换为2D点。所得的点用作从目标图像进行双线性插值的采样网格。

                                                 光度重建误差,ssim是经常用在图像相似度里的度量

       这种loss的目的是减少目标图像和重建的目标图像之间的差异,在目标图像和重建的目标图像中,姿态和深度估计的过程中都需要使用它。

使用最小光度误差的好处。 带圆圈的像素区域被遮挡。

 

自动mask

        最终的光度重建误差要乘以一个mask,该mask解决与假设相机在静态场景(例如静态场景)中移动的变化有关的问题。尤其是 一个物体正在以与相机相似的速度移动,或者在其他物体正在移动时照相机已停止,也就是那些在相机坐标系里静止的物体。 这些相对静止的物体理论上应该有无穷大的深度。 作者使用一种自动mask方法解决了这一问题,该方法可以过滤不会将外观从一帧更改为下一帧的像素,也就是那些和相机同步运动的像素。 mask是二进制的,如果目标图像和重建的目标图像之间的最小光度误差小于目标图像和源图像的最小光度误差,则为1,否则为0。

                                      [1]中的自动遮罩生成,其中Iverson方括号为 true时返回1,否则为0。      

       当相机是静止的时,这种方法会图像中的所有像素都被掩盖(实际场景中概率很低)。 当物体以与照相机相同的速度移动时,会导致图像中静止物体的像素被掩盖。

多尺度估计

       作者将各个尺度的损失合并在一起。 将较低分辨率的深度图上采样到较高的输入图像分辨率,然后在较高的输入分辨率下重新投影,重新采样并计算光度误差。 作者声称,这使得各个比例尺上的深度图以实现相同的目标,即对目标图像进行精确的高分辨率重建。

其他形式的loss

        作者加入了平均归一化的逆深度图值和输入/目标图像之间的边缘敏感的平滑度损失。 这鼓励模型学习尖锐的边缘并消除噪声。

最终损失函数变为:

                                          [1]中的最终损失函数在每个像素,尺度和bacth上平均。

 

 

双线性差值的数学公式为{SP2}:

 

SSIM (Structural SIMilarity) 结构相似性{SP3}

图像质量评价指标之 PSNR 和 SSIM

1. PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比

给定一个大小为 𝑚×𝑛的干净图像 𝐼 和噪声图像 𝐾,均方误差 (𝑀𝑆𝐸)定义为:

一般地,针对 uint8 数据,最大像素值为 255,;针对浮点型数据,最大像素值为 1。

上面是针对灰度图像的计算方法,如果是彩色图像,通常有三种方法来计算。

  • 分别计算 RGB 三个通道的 PSNR,然后取平均值。
  • 计算 RGB 三通道的 MSE ,然后再除以 3 。
  • 将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR。

其中,第二和第三种方法比较常见。

# im1 和 im2 都为灰度图像,uint8 类型
# method 1
diff = im1 - im2
mse = np.mean(np.square(diff))
psnr = 10 * np.log10(255 * 255 / mse)
# method 2
psnr = skimage.measure.compare_psnr(im1, im2, 255)

compare_psnr(im_true, im_test, data_range=None) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 PSNR,然后取平均值,这个指标称为 MPSNR。

2. SSIM (Structural SIMilarity) 结构相似性

𝑆𝑆𝐼𝑀公式基于样本 𝑥 和 𝑦之间的三个比较衡量:亮度 (luminance)、对比度 (contrast) 和结构 (structure)。

每次计算的时候都从图片上取一个 𝑁×𝑁的窗口,然后不断滑动窗口进行计算,最后取平均值作为全局的 SSIM。

# im1 和 im2 都为灰度图像,uint8 类型
ssim = skimage.measure.compare_ssim(im1, im2, data_range=255)

compare_ssim(X, Y, win_size=None, gradient=False, data_range=None, multichannel=False, gaussian_weights=False, full=False, **kwargs) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 SSIM,然后取平均值,这个指标称为 MSSIM。

 

Lambertian反射(也叫理想散射){SP6}

Lambertian表面是指在一个固定的照明分布下从所有的视场方向上观测都具有相同亮度的表面,Lambertian表面不吸收任何入射光.Lambertian反射也叫散光反射,不管照明分布如何,Lambertian表面在所有的表面方向上接收并发散所有的入射照明,结果是每一个方向上都能看到相同数量的能量.


Monodepth2扩展

Monodepth2扩展名:Struct2Depth

对象运动建模

       来自Google大脑的作者发表了[3],该书进一步扩展了Monodepth2。它们通过预测单个对象而不是整个图像的运动来改善姿势网络。因此,现在重建的图像序列不再是单个投影,而是组合在一起的一系列投影。通过两个模型,一个对象运动模型和一个自我运动网络(类似于前面几节中描述的姿势网络)来做到这一点。步骤如下:

Mask R-CNN [2]的样本输出。图片来自[2]

1、预训练的遮罩R-CNN [2]用于捕获潜在移动物体的分割。

2、使用二进制掩码从静态图像(帧-1,帧0和帧+1)中删除这些可能移动的对象

3、被掩盖的图像被发送到自我运动网络,并输出帧-1和0与帧0和+1之间的转换矩阵。

 

遮罩过程可提取静态背景,然后提取自我运动转换矩阵,而无需移动对象。来自[3]的方程。

1、使用步骤3中产生的自我运动转换矩阵,并将其应用于帧-1和帧+1,以获取变形的帧0。

2、使用从步骤3得到的自我运动变换矩阵,并将其应用于可能移动的对象的分割蒙版到帧-1和帧+1,以获取每个对象都针对帧0的扭曲的分割蒙版。

3、二元掩码用于保持与变形分割掩码关联的像素。

4、蒙版mask图像与变形图像组合在一起,并传递到对象运动模型,该模型输出预测的对象运动。

 

一个对象的对象运动模型。来自[3]的方程

        结果表示了相机必须如何移动才能“解释”对象外观的变化。然后,要根据对象运动建模过程的步骤4中生成的运动模型来移动对象。最后,将变形的对象运动与变形的静态背景结合起来,以获得最终的变形:

 

来自[3]的方程

图片来自[5]

学习对象量表

虽然Monodepth2通过其自动遮罩技术解决了静态物体或以与照相机相同速度移动的物体的问题,但这些作者还是建议对模型进行实际训练,以识别物体的比例,从而改善物体运动的建模。

图片来自Struct2Depth。中间一栏显示了无限深度分配给以相同相机速度移动的对象的问题。第三列显示了他们改进此方法的方法。

 

它们基于对象(例如房屋)的类别定义每个对象的比例尺的损失。它旨在基于对象比例尺的知识来限制深度。损失是图像中对象的输出深度图与通过使用相机的焦距,基于对象类别的先验高度和图像中分割后的对象的实际高度计算出的近似深度图之间的差,两者均按目标图片的平均深度进行缩放:

损耗的公式可帮助模型学习对象比例。来自[3]的方程。

结果

将[3]中描述的扩展与Monodepth2模型直接进行比较,并显示出显着的改进。

中间的一行显示[3]的结果,而第三行显示的是地面真实情况。图片来自[5]

 

参考链接{SP8}

Monodepth2:https : //github.com/nianticlabs/monodepth2

Struct2Depth:https : //github.com/tensorflow/models/tree/master/research/struct2depth

  • 6
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
单目深度估计是指通过一张单独的图像来估计场景中物体的深度信息。传统的单目深度估计方法并不理想,因为从单张图片中获取具体的深度相当于从二维图像推测出三维空间,这是一个非常复杂的函数。即使人眼在两只眼睛来定位自然世界的物体的情况下也存在问题,更何况使用单张照片。因此,人们更加关注研究立体视觉(Stereo Vision),即从多张图片中得到深度信息。通过比较多张图片之间的视角变化,可以计算出图片之间的视差(disparity),从而得到深度信息。\[3\] 然而,随着深度学习的发展,利用深度学习方法进行单目深度估计也取得了一定的进展。Cao等人提出将单目深度估计看作是一个分类问题,将连续的深度离散化,对深度范围进行分类和排序。这种方法相比于传统的回归方法更加简化了问题,同时也取得了较好的效果。\[1\] 单目深度估计在许多应用场景中都有重要的作用。除了前面提到的应用场景,如3D重建、障碍物检测和SLAM等,单目深度估计还可以应用于虚拟现实、增强现实、自动驾驶等领域。深度估计作为上游任务,为这些下游任务提供了重要的深度信息支持。\[2\]因此,单目深度估计计算机视觉领域具有重要的研究和应用价值。 #### 引用[.reference_title] - *1* [单目深度估计梳理(1) -- 有监督学习之单任务篇](https://blog.csdn.net/qq_17027283/article/details/129351192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [单目深度估计--深度学习篇](https://blog.csdn.net/weixin_43702653/article/details/123831009)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值