Advertisement

《MonoDepth2:Digging Into Self-Supervised Monocular Depth Estimation》论文笔记

阅读量:

参考代码:monodepth2

1. 概述

由于获取图片准确深度信息的代价较大, 因此利用标注数据进行训练会带来较高的成本, 这使得自监督方法成为研究者关注的重点. 本文针对单目场景下的自监督深度估计问题进行了研究, 基于经典的计算机视觉原理, 将深度估计任务划分为两个互补子任务:

  1. 利用编码网络从目标图像(target image)中预测深度信息;
  2. 根据源图像(source images)与目标图像组成的图像对, 估计该图像对之间的变换关系 (由旋转和平移组成的6维度变换状态);

为了进一步提升深度估计性能, 文章还提出了更具实际意义的损失函数及策略:

  1. 使用最小化重构误差损失作为最终损失函数, 并通过增强对视频序列中遮挡情况的鲁棒性处理来解决平均重构误差损失带来的模糊问题;
  2. 引入多尺度预测机制(统一resize在训练图分辨率上)并计算损失, 这不仅避免陷入局部最优问题, 而且使深度监督输入图片具有更强的方向性特征, 进而降低了视觉伪影现象的发生概率;
  3. 应用auto-mask策略来排除违反相机运动假设的像素点(如静止像素或低纹理区域等),从而避免无关像素对模型训练的影响, 最终提升了算法的鲁棒性;

本文旨在从单一图像中提取深度信息作为核心目标。现有的自监督学习方法已可基于立体图像对与单目视频数据进行有效的预训练。针对单目视频场景,在缺乏立体视觉系统先验信息的情况下,则依赖于引入姿态估计网络(用于追踪6个自由度的变化)来实现可靠的深度估计框架。而在实际应用中,则发现离线标定可能导致系统在处理遮挡区域及纹理复制 artifact 时表现不足。

整体上而言,文章所采用的方法较为清晰,并且所采用的策略也较为得当;最后生成的结果与其它一些方法的对比情况可见下图中

在这里插入图片描述

2. 方法设计

在这里插入图片描述

2.1 网络结构

文章的方法整体主要由两个部分构成:基于U型架构设计的深度信息编码与解码模块以及通过分析视频帧对实现的姿态估计模块。见图3中的(a)和(b)图。

2.2 自监督训练

在这里要做的就是把当前要估计的目标视频帧作为目标图像来进行处理了,并将其标记为目标点I_t。而这里的前后连续两帧则被视为源图像,并用I_{t^{‘}}来表示它们组成的集合。这里的I_{t^{‘}}具体指的是前一帧和后一帧两个连续的画面数据集。当我们在做立体视觉相关研究时,则会用另外一个摄像头捕捉到另一组数据作为参考来源。而在实际训练过程中,则是通过不同的视角组合来进行多视差计算的基础构建工作。这样就能得到三种不同的模型标记:M代表单目场景下的结果……S代表双目视差计算所得的结果……而MS则是两者结合在一起混合计算的情况标记

该方法的主要目标是从源图像出发利用计算得到的深度信息与姿态信息来生成目标图像实现图像重建的过程优化过程旨在通过最小化生成图像与预期目标图像之间的差异从而实现最佳的重建效果为了量化评估这种重建效果我们引入了如下定义:

L_p=\sum_{t^{‘}}pe(I_t,I_{t^{‘}\rightarrow t})

其中映射关系定义为:

I_{t^{‘}\rightarrow t}=I_{t^{‘}}\langle{proj(D_t,T_{t\rightarrow t^{‘}},K)}\rangle

这里的重构误差pe采用的是L1损失函数作为衡量标准其中(proj()代表按照给定参数进行映射后的坐标D_t表示估计得到的深度信息T_{t→t'}代表姿态信息而K则表示相机内部参数\langle\rangle符号表示采样策略这与后续提到的auto-mask等采样策略具有相关性

两个图像之间的重建误差被具体描述如下:

pe(I_a, I_b) = \frac{\alpha}{2}(1 - SSIM(I_a, I_b)) + (1 - \alpha)||I_a - I_b||_1

其中平衡因子被设定为\alpha = 0.85。同时为了增强边界平滑性我们引入以下损失函数:

L_s = |\partial_x d_t^*| e^{-|\partial_x I_t|} + |\partial_y d_t^*| e^{-|\partial_y I_t|}

其中d_t^*表示经过均值归一化的深度信息即d_t^* = \frac{d_t}{\bar{d}_t}这种定义有助于防止深度信息发生消散现象发生。

2.2 自监督训练中的策略

最低像素级重构误差: 在以往的方法中,通常会采用所有图像像素的重构误差求平均作为损失函数(这里所说的重构即指对应于世界坐标与图像坐标的变换关系)。然而,在视频序列出现以下问题时(如图3(c)所示),该种方式会导致训练过程出现不稳定现象:

  • 1)因为成像设备的运动而导致部分像素因成像设备运动而超出了图像边缘;
    • 2)因为目标在视频中发生位移而导致被其他物体遮挡;

此外,在均值重建误差的影响下会产生过深或过浅的模糊效果;为此该文章采用了对应像素最小值的方式设定最终损失函数:
L_p = \min_{t^{\prime}} pe(I_t, I_{t^{\prime} \rightarrow t})
通过这种方法可以剔除一些异常数据点从而提升模型训练的稳定性;这种处理方式能够使深度边界更加锐化;如图所示该方法在多幅图像对比实验中表现出了良好的匹配效果:

在这里插入图片描述

auto-masking策略: 基于自监督学习的深度估计数据场景需要采用一种特定的数据采集方法。具体而言,在这种情况下,我们需要利用具有运动特性的相机来完成对静态场景下物体表面细节信息的捕捉。然而,在实际应用中可能会遇到一些挑战性条件未能得到满足的情况。例如,在视频序列中如果被采集的目标物体出现了明显的运动(违背了初始假设条件),那么会导致对应区域出现“空洞”,如图所示:

在这里插入图片描述

为了实现对该文章中那些帧间静止状态、低纹理区域以及相机运动相对静止区域的相关像素进行有效滤除的目的,在文中采用了μ取值于{0,1}的方法进行区分,并对其设置的具体逻辑进行了详细阐述如下:
其计算依据为:
\mu=\min_{t^{’}}pe(I_t,I_{t^{’}\rightarrow t}) < \min_{t^{’}}pe(I_t,I_{t^{’}})
其中符号pe代表像素误差函数;通过该策略可以有效地抑制了与相机运动无关的像素干扰,并如图所示那样成功地将不需要关注的重点从视觉信息中剔除掉了:

在这里插入图片描述

这样的策略可以缓解上文提到的“孔洞”现象,但是不能彻底解决的

多尺度估计:
在特征图的不同比例层次上实现估计能够有效避免陷入局部最优解的情况。直接在对应的比例层次上计算损失函数会导致低纹理区域出现孔洞现象。为了解决这一问题,通常将特征图放大至输入图像分辨率后进行误差计算。具体参考图3(c)所示的示意图。

2.3 损失函数

总损失则表现为由最小化重建误差项和边界平滑项共同构成,并将其表示为 L = \mu L_p + \lambda L_s

3. 实验结果

性能比较:

在这里插入图片描述

消融实验:

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~