Advertisement

《Unsupervised Monocular Depth Learning in Dynamic Scenes》论文笔记

阅读量:

这篇文章提出了一种改进的方法,在深度估计和运动感知任务中结合刚性物体运动特性进行约束。其主要贡献在于通过隐式约束刚性物体运动区域而非显式标注边界框或mask的方式减少对相机外参数依赖的问题。文章在现有方法的基础上提出了新的网络架构,并引入了深度图平滑损失、循环一致性损失以及基于稀疏性和梯度约束的物体移动约束损失来优化模型性能。通过消融实验验证了这些新损失函数的有效性,并在Cityscapes和KITTI数据集上展示了该方法在深度估计任务中的优越性能对比结果。

参考资料:位于github.com/google-research下的深度学习与运动估计仓库

1. 概述

该研究基于论文(Depth from Videos in the Wild)进行了优化与改进。早期的方法通常使用mask或bounding box来标注运动区域/物体,在实际应用中可能会引入外部依赖问题。针对这一问题,在深入分析刚性物体运动特性后发现以下特点具有重要意义:首先,在整体图像中刚性物体所占的比例相对较小;其次,在刚性运动过程中速度变化呈现明显的分段恒定特征;正是基于以上观察发现,在原有方法的基础上构建了一个约束模型用于优化运动物体区域的深度估计。

该方法采用隐式约束的形式对刚性物体的运动区域施加约束;从而无需显式标注运动区域;因此,在输入两张连续的图像后,该方法可同时完成深度估计与物体运动分析;如图所示。

在这里插入图片描述

2. 方法设计

2.1 网络结构

文章的网络结构如下图所示:

在这里插入图片描述

整体而言,本网络架构与先前的研究Depth from Videos in the Wild具有相似之处。然而,在细节部分存在差异。值得注意的是,在基于两帧图像的传统架构基础上增加了深度估计模块作为输入来源。

2.2 损失函数

深度估计图平滑损失
该损失项旨在通过施加平滑约束对深度估计结果进行调节,在一定程度上抑制噪声的扩散。其对应的损失函数表达式为:
L_{reg,dep}=\alpha_{dep}\iint\left(|\partial_ud(u,v)e^{-\partial_uI(u,v)}+\partial_vd(u,v)e^{-\partial_vI(u,v)}|\right)dudv

循环一致性损失:
基于变换矩阵的循环一致性约束定义如下:
L_{cyc}=\alpha_{cyc}\frac{||RR_{inv}-\mathbf{1}||^2}{||R-\mathbf{1}||^2+||R_{inv}-\mathbf{1}||^2}+\beta_{cyc}\iint\frac{||R_{inv}T(u,v)+T_{inv}(u_{warp},v_{warp})||^2}{||T(u,v)||^2+||T_{inv}(u_{warp},v_{warp})||^2}d_ud_v
基于图像域的循环一致性约束则被定义为:
L_{rgb}=\alpha_{rgb}\iint|I(u,v)-I_{warp}(u,v)|\mathbf{1}_{D_{u,v}\gt D_{warp}(u,v)}d_ud_v+\beta_{rgb}\frac{1-\mathcal{SSIM(I,I_{warp})}}{2}

物体移动约束损失:
这部分损失主要是完成下面的两个作用:

  • 1)基于上文所述的稀疏特性,在运动场上施加稀疏化约束条件。具体采用L^{\frac{1}{2}}这一形式进行表征。研究表明该函数形式具有显著的优势。
  • 2)依据对刚性物体运动特性的分析,在刚性物体所占据的空间区域内向其运动场施加梯度损失惩罚项。这种操作从而使该区域的空间分布呈现出分段恒定的特点。

针对常量值特性,在其基础上施加梯度约束。对于每个通道i来说,在其对应的区域内计算梯度幅值。通过在各自区域计算梯度幅度来实现这一约束条件的引入。其中T_i(u,v)表示第i个通道的空间二维函数。

为了实现数据稀疏性问题的有效解决,在此基础上进行优化

则这部分整体上由以下两个部分组成:
L_{reg,mot}\alpha_{mot}L_{g1}[T_{obj}(u,v)]+\beta_{mot}L_{\frac{1}{2}}[T_{obj}(u,v)]
具体而言,则该损失函数的构建过程可参考:

复制代码
    # losses/loss_aggregator.py#L283
    normalized_trans = regularizers.normalize_motion_map(
    residual_translation, translation)
    self._losses['motion_smoothing'] += scale_w * regularizers.l1smoothness(  # 对应公式2,分段常量值约束
    normalized_trans, self._weights.motion_drift == 0)
    self._losses['motion_drift'] += scale_w * regularizers.sqrt_sparsity(  # 对应公式3,稀疏性约束
    normalized_trans)

上面提到的几点约束的消融实验结果:

在这里插入图片描述

3. 实验结果

Cityscapes数据集性能对比:

在这里插入图片描述

KITTI数据集 上性能对比:

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~