Overview
本文介绍一种自监督的深度估计方法Monodepth2。
太长不看版:
1、提出minmum loss在解决multi-view时存在的遮挡问题,指出应该取multi-view中的最小的光度误差,而不是对误差取平均,这是因为当合成图像某处存在遮挡时候,会造成合成图像产生较大的光度误差,而影响模型训练。
2、提出一种multi-scale采样的方法,对low-level的深度图,采用先upsample到原图大小再进行变换的方法,这样可以避免图片太小而产生的模糊预测和伪影。
3、提出一种auto-masking loss。如果前后帧目标没有运动的话,就不产生光度误差。这是因为如果单目深度估计对于运动物体往往预测不好,因此这部分loss主要??
Introduction
- a minimum reprojection loss to robustly handle occlusions,;
- a full-resolution multi-scale sampling method reduces visual artifacts;
- 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)
自监督的深度估计的问题,是最小化光度误差的问题。
这里采用了SSIM和L1距离去计算光度误差,SSIM是统计量,根据局部的均值和方差计算,由于SSIM的引入,这个指标会计算得更好。
此外,还参考[15]和[62]引入了 edge-aware smoothness
3.2 Improved Self-Supervised Depth Estimation (Ours)
Per-Pixel Minimum Reprojection Loss
如果需要从多个source images计算重投影误差,现有方法大多是采用多个误差取平均的操作,这样会导致,如果有一个视角的图像某处存在遮挡,那重构出来的图片在该处就会误差比较大,取平均就会导致较高的光度误差惩罚。
因此思想就是把这部分错误的光度误差mask掉,采用的是多个误差取min得操作,而非取avg。
该方法可以消除图片边界的伪影,提高遮挡边界的锐利程度。
Auto-Masking Stationary Pixels
单目深度估计有一个假设,就是在单目深度估计的场景中,假设相机是运动的而场景是静止的,因此,单目估计无法抵抗动态物体,如果物体在运动,那么物体在前一帧和后一帧的位置将会发生变化,这会导致图像重构无法匹配而产生很大的光度误差。现象就是,导致该物体深度被估计为一个无穷远的空洞。
于是本文提出了一个Auto-mask的思想,mask掉那些图像中静止或相对静止的像素点,这是因为如果静止的话,图像的视角是没有变化的,不利于计算重构误差。
但这里的Auto-mask的思想只能mask掉那些相对静止的物体,并不能很好地解决运动物体这个问题。
此外,本文设置了一个参数μ,满足条件的像素点,才会计算loss。这个条件的意思是,对warp后的source image和target image计算pe loss,如果该pe loss小于原source image和target image的pe loss 才计算loss。反之,如果前者大于后者,说明warp后该处发生了失真,该处可能是发生了与视角位姿变换不匹配的运动,例如静止、相对静止、大片低纹理变化的区域等。如果出现以上情况,后者的loss是非常低的,因此通常会被mask掉。而如果出现相对运动的情况,后者loss就比较高了。
Multi-scale Estimation
在multi-scale的估计策略中,如果采用Low-resolution 的深度图进行图像重构和光度误差计算,在低纹理细节的部分光度误差会不明确,因此,可以先上采样深度图,再进行重构和误差计算。
实验
三种训练数据:monocular video only (M), stereo only (S), and both (MS).
Failure Case
我们的自监督损失无法学习扭曲、反射和颜色饱和区域的良好深度。下图:如果边界不明确(左)或形状复杂(右),我们可能无法准确描绘对象。