Overview

本文介绍一种自监督的深度估计方法Monodepth2。

太长不看版:

1、提出minmum loss在解决multi-view时存在的遮挡问题,指出应该取multi-view中的最小的光度误差,而不是对误差取平均,这是因为当合成图像某处存在遮挡时候,会造成合成图像产生较大的光度误差,而影响模型训练。

2、提出一种multi-scale采样的方法,对low-level的深度图,采用先upsample到原图大小再进行变换的方法,这样可以避免图片太小而产生的模糊预测和伪影。

3、提出一种auto-masking loss。如果前后帧目标没有运动的话,就不产生光度误差。这是因为如果单目深度估计对于运动物体往往预测不好,因此这部分loss主要??

Introduction

  1. a minimum reprojection loss to robustly handle occlusions,;
  2. a full-resolution multi-scale sampling method reduces visual artifacts;
  3. an auto-masking loss to ignore training pixels that violate camera motion assumptions;

2.2 Self-supervised Depth Estimation

        自监督不需要标注好的深度图作为监督信号,以图像重构信息作为监督信号。

        单目自监督输入单目视频帧序列,通过Depth Net输出图像的深度图,通过PoseNet预测六自由度位姿矩阵(x,y,z方向的旋转矩阵和偏移量),并将Source View (Target View)图像投影到Target View(Source View)的视角上,通过最小化合成视角图像和原视角图像间的重构误差(光度误差)来训练模型。

        相比于单目自监督,双目自监督则不需要预测位姿矩阵,通过离线校准(相机标定?)即可得到固定的位姿矩阵(两个相机光心坐标的差?)

        本文的方法在单目和双目自监督上均有明显提高。

Self-supervised Monocular Training

自监督深度估计的两大问题:运动和遮挡

Appearance Based Losses

自监督训练通常依赖于对外观或外表属性做出假设(这部分不太理解)

Method

        其实自监督预测深度图,通过预测位姿矩阵和深度图得到合成深度图的这个做法,本身就是病态的问题,这是因为预测的深度图,本身就存在很多错误的点,又怎么能够正确重构新的视角图呢。然而,近期的一些方法通过深度图平滑和最小化光度误差解决这个问题。

        Classical binocular and multi-view stereo methods typically address this ambiguity by enforcing smoothness in the depth maps, and by computing photo-consistency on patches when solving for per-pixel depth via global optimization.

3.1 Self-Supervised Training (Baseline)

自监督的深度估计的问题,是最小化光度误差的问题。

直接监督深度学习 自监督深度估计_深度图

 

直接监督深度学习 自监督深度估计_深度估计_02

这里采用了SSIM和L1距离去计算光度误差,SSIM是统计量,根据局部的均值和方差计算,由于SSIM的引入,这个指标会计算得更好。

 此外,还参考[15]和[62]引入了 edge-aware smoothness

直接监督深度学习 自监督深度估计_深度图_03

3.2 Improved Self-Supervised Depth Estimation (Ours)

Per-Pixel Minimum Reprojection Loss

        如果需要从多个source images计算重投影误差,现有方法大多是采用多个误差取平均的操作,这样会导致,如果有一个视角的图像某处存在遮挡,那重构出来的图片在该处就会误差比较大,取平均就会导致较高的光度误差惩罚。

        因此思想就是把这部分错误的光度误差mask掉,采用的是多个误差取min得操作,而非取avg。

直接监督深度学习 自监督深度估计_直接监督深度学习_04

        该方法可以消除图片边界的伪影,提高遮挡边界的锐利程度。 

Auto-Masking Stationary Pixels

单目深度估计有一个假设,就是在单目深度估计的场景中,假设相机是运动的而场景是静止的,因此,单目估计无法抵抗动态物体,如果物体在运动,那么物体在前一帧和后一帧的位置将会发生变化,这会导致图像重构无法匹配而产生很大的光度误差。现象就是,导致该物体深度被估计为一个无穷远的空洞。

于是本文提出了一个Auto-mask的思想,mask掉那些图像中静止或相对静止的像素点,这是因为如果静止的话,图像的视角是没有变化的,不利于计算重构误差。

直接监督深度学习 自监督深度估计_深度估计_05

但这里的Auto-mask的思想只能mask掉那些相对静止的物体,并不能很好地解决运动物体这个问题。

此外,本文设置了一个参数μ,满足条件的像素点,才会计算loss。这个条件的意思是,对warp后的source image和target image计算pe loss,如果该pe loss小于原source image和target image的pe loss 才计算loss。反之,如果前者大于后者,说明warp后该处发生了失真,该处可能是发生了与视角位姿变换不匹配的运动,例如静止、相对静止、大片低纹理变化的区域等。如果出现以上情况,后者的loss是非常低的,因此通常会被mask掉。而如果出现相对运动的情况,后者loss就比较高了。

直接监督深度学习 自监督深度估计_深度图_06

Multi-scale Estimation

在multi-scale的估计策略中,如果采用Low-resolution 的深度图进行图像重构和光度误差计算,在低纹理细节的部分光度误差会不明确,因此,可以先上采样深度图,再进行重构和误差计算。

实验

三种训练数据:monocular video only (M), stereo only (S), and both (MS).

Failure Case

我们的自监督损失无法学习扭曲、反射和颜色饱和区域的良好深度。下图:如果边界不明确(左)或形状复杂(右),我们可能无法准确描绘对象。

直接监督深度学习 自监督深度估计_深度学习_07