深度学习SLAM结合之google开源SFMLearner论文详解-Unsupervised Learning of Depth and Ego-Motion from Video

无监督学习下的深度和位姿估计
摘要:文章提出了一种单目深度和位姿估计的无监督学习网络,本文的创新点是完全无监督的网络。整个网络主要分为两个部分,分别是单视图深度估计和多视图位姿估计。需要注意的是本文最后得到的深度和位姿没有系统尺度。如论文中图1所示(这里注意后面有提到同时训练了第三个网络explainability prediction network暂时翻译成解释预测网络)
这里写图片描述
论文核心算法:
1.视觉合成做监督
本文将视觉合成作为深度和位姿估计的关键监督信息,主要的思路是将一个目标图像上的像素点首先经过重投影映射(project)到源图像上(一般不止一个),然后将这个源图像中像素点扭曲(warp)到和目标图像上对应像素点同一位置,最后对这同一位置对应的像素点求像素差,也就是灰度值的差(有点类似于求特征点匹配)。建立下面公式(1)的损失函数(最小二乘模型):
这里写图片描述
这里写图片描述
整体的框图如图2所示,对于深度网络(Depth CNN),输入的是目标视图It,输出像素点的深度Dt(p),对于位姿网络(Pose CNN),输入的是目标视图It和源视图Is(不止一个),输出的是源视图相对于目标视图的位姿Tt->t-1和Tt->t+1等。

2.深度位姿的图像扭曲
整个扭曲过程由图3所示
这里写图片描述
2.1重投影映射(project)
首先通过单目视觉相机模型将目标视图It中的点pt投影到源视图Is上的ps。
p_s=KTP_W
D(p_t ) p_t=KP_W
联立约去P_W可以得到公式(2)
这里写图片描述
2.2可微分双线性采样机制
直接将像素点投影到ps会出现一个问题,这个点的坐标很有可能没有落在源视图的像素点上,就会出现图3中间视图的情况,需要采用双线性采样机制来加权得到ps的灰度值(像素值)。将与ps点相近的上下左右四个点按距离做权值进行加权(这里权值和为1)得到ps灰度值。
2.3视图扭曲(warp)
一个像素点包含两个信息,一个是灰度值,另一个是位置。2.2解决了灰度值的问题,这里为了满足公式(1)中的代价函数,需要将所有源视图中的ps点的位置扭曲成目标视图中pt点的位置。

3.克服模型局限性的建模
单目视图需要以下假设
(1)视图场景完全是静止的,不存在动态物体。
(2)目标视图和源视图之间没有遮挡和离合的物体。
(3)物体表面是朗伯体以保证图像一致性误差有意义。
但其实实际上上面假设不完全满足,因此为提高系统鲁棒性,克服以上的问题,在这里增加了另一个训练网络explainability prediction network(和深度和位姿估计网络联合)。其输出主要是为每一队目标和源视图提供每个像素的Es(soft mask)。因此将公式(1)改为公式(3)。
这里写图片描述
注意观察上面的公式就会发现,这里对Es的估计很有可能会使其变成0那整个式子就没有意义了,因此需要添加一个正则化项,如公式(4)中所示,最后一项便是正则化部分。

4.克服梯度区域
目前系统还遗留一个问题,在系统学习时,其梯度主要来自于pt和ps相邻四个点的像素差。在低纹理或者当前估计时肯能会一直训练。因此采用允许在较大空间区域直接导出梯度值的策略smooth。在本文中最小化二阶梯度L1准则来估计深度。因此最后的损失函数定义为公式(4)
这里写图片描述
5.整体网络结构
整个估计系统的网络结构如图4所示
这里写图片描述

猜你喜欢

转载自blog.csdn.net/wangshuailpp/article/details/80098059