Learning Depth from Monocular Videos using Direct Methods论文学习

论文链接:http://openaccess.thecvf.com/content_cvpr_2018/papers/Wang_Learning_Depth_From_CVPR_2018_paper.pdf
(代码已开源鸭)

摘要

使用非监督的策略从单张图片中学习深度图非常的具有吸引力,因为它可以利用大量且种类丰富的单目视屏数据库,无需ground truth 和双目数据。在之前的工作中,姿态和深度的神经网络共同输出减小photometric error。 根据直接视觉测距法(direct visual odometry, DVO)的发展, 作者认为深度预测神经网路(depth CNN predictor)可以无需姿态预测器(depth CNN predicotr) 进行训练。作者融合了可以求导的DVO策略,以及深度归一化的策略以提高单目视屏训练。

introduction

zhou的文章提出通过减小photometric consistency 训练分离的深度和姿态对预测神经网络。尽管获得了令人印象深刻的结果,但是效果与进行过矫正的双目照片对相比仍是差强人意。 这些经过矫正的双目方法[1][2]在只提供离散深度值标定的数据集上展现了可以与监督方法相媲美的准确率。

作者表示单目和双目方法的主要区别有

  1. 帧之间未知的相机姿态
  2. 预测范围的不确定性(ambiguity in scale)

已知的方法解决这些差异只是增加了一个额外预测姿态的module。这篇文章的作者认为之前的方法都没有完全的解决尺寸不确定的问题,作者认为引入额外的姿态预测神经网络是没有必要的。

contribution

  • 理论上说明了范围不确定性在现有的单目方法上是十分有问题的。特别是在训练过程中存在于深度正则项的范围敏感度。作者提出了一个简单的归一化策略能够避免这些问题。
  • 作者认为学习一个额外的姿态预测神经网络并不是一个最有效策略从单目视频上估计深度网络。zhou的Pose-CNN没有完全利用相机姿态和深度预测之间的关系。相对的,作者提出了将DVO姿态预测器融合进framework当中(1)没有需要学习的参数(2)在输入的密集深度图和输出的姿态估计之间建立了之间的联系(3)它源自减小整个非监督训练的训练过程的图像重构loss。为了融合DVO进入端对端的训练框架当中,作者提出了一个可微分的DVO模型DDVO。
  • 最后,因为DVO是一个二阶梯度下降的方法,一个好的初始化点可以带来更好的效果。所以没有从一样的姿态开始训练,作者提出了一个混合训练方式,用一个预训练的Pose-CNN提供初始化的姿态继而训练DDVO。这样的训练方式能够达到比单独训练Pose-CNN 或 DDVO更好的效果。

~~~~论文的详细解说来啦~~~

在介绍作者的训练流程之前,作者提到了能够从(struture-from-motion SfM)算法中国呢获得辅助的深度标注,并且利用它的结果学习深度预测器。假设SfM减小两个loss,一个是Appearance loss, 衡量像素间的不对应程度;另一个是pior cost,驱使深度图具有平滑性。整个流程可以总结为以下两步:

  1. 通过SfM计算逆深度图和相机姿态计算
    2.利用方程一得到的逆深度图作为监督训练深度估计器在这里插入图片描述

作者认为上述的两步走优化方式理论上是次优化的,方程一反映了深度图的预测质量,减小方程2的loss的过程不一定是减小方程1的loss。因此,直接端对端的学习一个深度预测器减小方程一的损失函数是最佳的方式。然而,因为方程1 是一个真正的SfM流程的过度简化,与直接利用梯度下降的端对端学习相比,上述的两步走优化方式仍有可能得到更好的监督。(这部分好烦,:-(详细推导大家还是看论文吧= =)

2.1 scale ambiguity
正则项Lprior 是伴随逆深度图诞生的,小范围的逆深度预测往往有更小的loss值。这个正则项的范围敏感性质会带来灾难性的效果,损失函数可能不仅没有全局最小值,连局部最小值也没有。
Learning Depth from Monocular Videos using Direct Methods论文学习_第1张图片
作者做了一个实验,重新跑了一遍zhou的实验,每一个训练周期都减小一次逆深度的预测范围(tips:所谓的逆深度的值就是深度值的倒数,scale越小就意味着预测的最近的距离离相机越远)。作者发现经过几个周期之后,预测的深度图彻底变成0 了。为了解决范围敏感性这个问题提,作者提出了一个简单的方法,归一化深度预测网络的输出。Learning Depth from Monocular Videos using Direct Methods论文学习_第2张图片
(作者没说d都是什么,但是我觉得应该就是深度图的每一个像素值)
2.2 modeling pose
之前zhou论文当中的pose-net其实是非常简单的,就是将三张图片输入到神经网络当中,神经网络输出两个姿态向量,是其中两张图片相对于另一张图片的相机相对姿态。这个方法虽然简单易融合,但是忽略了相机姿态和深度之间的几何关系。
DVO和一种更为普遍的图像配准算法相关- the Lucas-Kanade(LK) 算法。它和LK算法都使用Gauss-Newton最小化为了更快的收敛,并且利用inverse composition trick提高计算效率。

在训练的过程中预测的深度的梯度来自两个方面,不仅和深度预测相关,也来自姿态估计。

3.1 direct visual odometry

DVO的输入:
reference image I, 以及对应的深度图D***, 二维像素 x i 的intensity为
I (x i) ,逆深度为 d i
source image I’
相机姿态由translation t 和exponential coordinates w表示(具体看原论文吧 = =)
reference image x i 映射到source image 的坐标
x’
* i 的公式为
在这里插入图片描述
目标: 寻找一个优化的相机姿态p 能够减小warped source image 和reference image 之间的 photometric error.在这里插入图片描述
作者提出的算法:

  1. 计算Jacobian 矩阵,并且计算伪逆矩阵:
    Learning Depth from Monocular Videos using Direct Methods论文学习_第3张图片
  2. 根据现在预测的相机姿态p 去warp source image, 并且将它转化为向量I‘ p。生成一个二值对角矩阵W,它的第i个对角元素代表映射坐标x‘ i师傅在视野内,我们可以利用这个矩阵组织视野外的像素值参与计算姿态更新。
  3. 计算姿态更新:
    在这里插入图片描述
    得到新的姿态:
    在这里插入图片描述
    圆圈是矩阵左乘的意思。
  4. 回到步骤2,一直重复直到收敛。

这个方法的限制在于帧之间的运动必须很小,为了处理更大的运动,我们利用下采样形成了图片和深度图的pyramid ,并且用coarse-to-fine的方式更新pose。

你可能感兴趣的:(Learning Depth from Monocular Videos using Direct Methods论文学习)