深入研究自监督单目深度估计:Monodepth2

摘要:
图1单深度深度估计是目前单眼深度估计的难点,也是本文的重点:1.图像序列中存在遮挡。接下来,本文将分三部分介绍Monodepthh2模型,即Monodepth2中的逆深度估计模块、相机姿态的姿态估计模块和训练中使用的损失函数。

作者:Gus

来源:微信公众号|3D视觉工坊(系投稿)

3D视觉精品文章汇总:https://github.com/qxiaofan/awesome-3D-Vision-Papers/

单目深度估计模型Monodepth2对应的论文为Digging Into Self-Supervised Monocular Depth Estimation,由伦敦大学学院提出,这篇论文的研究目标是从单目RGB图像中恢复出对应的深度,由图1所示:该网络可以从单目图像中恢复对应的深度,图中不同颜色代表不同的深度。

论文地址:在公众号「计算机视觉工坊」,后台回复「Monodepth2」,即可直接下载。

深入研究自监督单目深度估计:Monodepth2

 

图1 Monodepth深度估计图

目前单目深度估计的难点,同时也是本论文着重解决的方向:

1、图像序列中存在遮挡。

2、当场景中发生物体运动的情况,如场景中运动的车辆,此时图像序列不仅存在因相机位姿而产生的图像改变,还存在因运动物体而产生的图像亮度的改变

从理论上说:在未给定第二帧图像的情况下估计图像对应的绝对或相对深度值是一个病态问题,因为无法通过构建三角化求解对应深度。然而,从直觉上说:人类通过在现实场景中生活、学习,获得了单眼估计深度的能力。因此,类比人类的学习能力,利用深度学习技术,从单目图像中获取对应的深度是可行的。该篇论文联合相机位姿估计与单目深度估计两项任务,使单目深度估计成为了可能。具体来说便是:首先利用单目深度估计网络进行逆深度估计,需要注意的是:该逆深度被限定在0与1之间,也就是说,该网络估计的为相对逆深度。然后进行相机位姿估计。最后利用相机位姿与视差计算亮度投影误差,作为网络模型的损失函数,利用梯度下降进行参数更新。接下来,本文将分三部分对Monodepth2模型进行介绍,分别是Monodepth2中的逆深度估计模块,相机位姿Pose估计模块,以及训练中使用的损失函数。

一、逆深度估计模块

该模块的作用是从单目图像中估计图像每个像素点的逆深度,在求解出逆深度之后,只需要对其取倒数便可获取对应的深度。这里需要说明,估计出来的逆深度被限定在0到1之间,与以真实深度存在一个比例因子,因此只可表示相机与场景的相对距离。该深度估计模块又可分为两个子模块,分别为特征编码子模块与特征解码子模块。特征编码子模块采用Res18模型结构,对输入图像进行32倍下采样,共生成5级特征,级数越高,特征空间分辨率越低(表示能力越强),但特征个数越多(对应通道部分)。特征解码子模块与U-Net解码模块部分一致,从第5级开始,联合特征编码子模块中相同分辨率的特征进行深度估计,该模块输出4级逆深度map(第五级因空间分辨率过低而不求解对应的逆深度),级数越低,空间分辨率越大,最大的空间分辨率与输入图像保持一致。

二、相机位姿Pose估计模块

该模块的作用为:由连续帧之间图像的变化情况,估计出相机之间的位姿(相机的运动情况)。该模块有两种处理情况,以下将对这两种情况分别介绍。

2.1 连续帧情况

首先进行符号的说明,用-1代表进行逆深度估计图像的前一帧图像,1代表进行逆深度估计图像的后一帧图像,0代表进行逆深度估计的当前图像。在该情况下利用相机位姿估计模块分别估计:从前一帧图像-1到当前图像0之间的位姿,与从当前图像0到后一帧图像1之间的位姿。

2.2 双目情况

同样进行符号说明,用0代表进行逆深度估计的当前图像(左目图像),"s"代表当前0图像对应的右目图像。在该情况下,因双目相机的位姿已固定,因此位姿也已固定(不需要利用pose估计模块进行估计)。

2.3 相机位姿模块结构

该模块同样分为特征编码子模块与特征解码子模块,其中该模块中的特征编码子模块与深度估计模块中的特征编码子模块结构一致,但参数独立,同样为Res18模型结构。因相机位姿求取的是图像连续帧之间的刚性运动,因此在该论文中,利用空间分辨率最低的第5级特征(抽象能力最强)输入进对应该模块的特征解码子模块来进行位姿估计。位姿解码子模块为3层卷积结构,对输入的第5级特征进行解码,并回归出对应每个像素点的运动信息。例如,位姿估计网络的输入为(256,6,20),那么经过解码回归之后输出的特征为(12,6,20)。对维度1(对应长),维度2(对应宽)求取均值可得连续帧之间的轴角与平移向量。在求得轴角后可通过罗德里格旋转公式求取旋转矩阵,如下图2所示。

深入研究自监督单目深度估计:Monodepth2

 

图2 罗德里格旋转公式

三、训练中使用的损失函数

本论文的创新点集中在对损失函数的改进。分别提出了:1.一种适用于单目遮挡情况下的匹配损失函数。2.一种在单目情况下检测相机间有无运动的标记方法。3.一种多尺度的匹配损失函数。以下将对这三种情况分别进行探讨。

3.1 一种适用于单目遮挡情况下的匹配损失函数

绝大多数单目深度(也包括光流与立体匹配)无监督方法都采用亮度投影误差(photometric reprojection error)作为训练的损失函数,亮度投影误差被定义为:利用深度与相机位姿对源图像进行采样,并与目标图像进行比对之后得到的误差,如下图3所示

深入研究自监督单目深度估计:Monodepth2

 

具体来说便是:利用相机位姿与深度获得采样坐标,利用采样坐标对源图像(-1或1号图像)进行采样,在未发生遮挡的情况下,采样后的图像应与目标图像(0号图像)在同位置的像素点亮度保持一致,这样在训练过程中,学习到使得采样图像与目标图像亮度值趋于一致的深度与相机位姿,计算该深度与相机位姿的模型参数即为最优参数。然而现实场景复杂多变,存在大量遮挡情况,在遮挡情况下,亮度投影误差会失效,因为采样之后的图像像素点发生了遮挡,对亮度投影误差进行简单的求取平均操作无法有效衡量该区域的匹配情况,如图5所示。

深入研究自监督单目深度估计:Monodepth2

 

图5 遮挡情况示意图

因此,本论文对此种情况做出了改进,用取最小值操作取代取平均操作,如此做法可使亮度投影误差函数忽略遮挡处不正确的亮度值,进而使模型专注非遮挡区域的计算,整个计算过程如下图5所示:

深入研究自监督单目深度估计:Monodepth2

 

图5 论文中提出的最小化亮度守恒损失函数

3.2 一种在单目情况下检测相机间有无运动的标记方法

单目深度估计需要进行如下假设:场景静止、相机运动。如训练集中存在使此假设不成立的图像序列,会严重影响网络的精度。因此,本文利用一种检测相机间有无运动的标记方法,剔除图像序列中未发生运动的像素点。过程如下图6所示:

深入研究自监督单目深度估计:Monodepth2

 

深入研究自监督单目深度估计:Monodepth2

 

图7 图像序列中静止点可视化图

图中黑色像素点为静止点,需要从整个损失函数中剔除。

3.3 一种多尺度的匹配损失函数

此方法过程比较简单,即对逆深度估计模块估计出的4级逆深度map进行上采样到与输入同尺寸,并对上采样之后的4级逆深度map求取损失函数。

四、 总结

本文对单目深度估计模型Monodepth2的主要计算过程进行了介绍,通过以上三个步骤的改进,该模型达到state-of-the-art,因此可作为一般深度估计模型的baseline方法。

备注:作者也是我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区

本文仅做学术分享,如有侵权,请联系删文。

免责声明:文章转载自《深入研究自监督单目深度估计:Monodepth2》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server如何清除连接过的服务器名称历史?iptables使用总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

镜头主要参数工业相机镜头的参数与选型

一、 镜头主要参数   1.焦距(FocalLength)   焦距是从镜头的中心点到胶平面上所形成的清晰影像之间的距离(注意!,相机的焦距与单片凸透镜的焦距是两个概念,因为相机上安装的镜头是多片薄的凸透镜组成,单片凸透镜的焦距是平行光线汇聚到一点,这点到凸透镜中心的距离)。焦距的大小决定着视角的大小,焦距数值小,视角大,所观察的范围也大;焦距数值大,视角...

机器学习速成笔记一

定义:机器学习系统通过如何组合输入信息来对从未见过的数据做出有用的预测。 基本术语 标签:标签是我们要预测的事物,即简单线性回归中的(y)变量。 特征:特征是输入变量,即简单线性回归中的(x)变量,特征可以有多个,是一种可量化的指标。 样本:样本是指数据的特定实例(X),样本分为有标签样本和无标签样本。 模型:模型定义了特征与标签之间的关系。 训练:是指...

OpenCV 图像采样 插值 几何变换

InitLineIterator 初始化线段迭代器 int cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2, CvLineIterator* line_iterator, int connectivity=8 ); image 带采线段的输入图像. pt1 线段起始点 pt...

深度学习——卷积神经网络入门

传统神经网络:   是全连接形式,即样本的每个特征属性都通过所有的隐藏层节点映射,最后输出数据。由于是全连接,所以计算极为复杂,且模型不易学习。 卷积神经网络:卷积神经网络(Convolutional Neural Networks, CNN), CNN可以有效的降低反馈神经网络(传统神经网络)的复杂性,常见的CNN结构有LeNet-5、AlexNet、Z...

Opencv2系列学习笔记2(图像的遍历)

原文地址:http://blog.csdn.net/lu597203933/article/details/16359461 图像遍历主要有三种方法,本节主要介绍和比较这三种方法。 一:简单存取像素值        首先介绍一个名词—椒盐噪点:它是一种特殊的噪点,它随机的将图像中的部分像素设置为白色或者黑色。 Code: [cpp] view...

超详细介绍 图像处理(卷积)(转)

图像处理(卷积)作者太棒了    原文   http://blog.sina.com.cn/s/blog_4bdb170b01019atv.html 图像处理-线性滤波-1 基础(相关算子、卷积算子、边缘效应) 这里讨论利用输入图像中像素的小邻域来产生输出图像的方法,在信号处理中这种方法称为滤波(filtering)。其中,最常用的是线性滤波:输出...