CVPR 2017【论文笔记】Unsupervised Learning of Depth and Ego-Motion from Video

1 Intro
在已知相机参数的情况下,可以通过视差来得到相对应的深度。那如果左右相机不在同一个平面并且参数也不知道,本文就提出了一种方法,从视频序列来进行深度和相机运动的估计。这也是无监督的学习方法,区别在于不需要双目,也不用知道相机参数。
2 Approach
这里的训练图片就是通过相机的移动获得序列图片,框架的结构有两部分,一部分为single-view depth CNN,一部分为camera pose estimation CNN。
2.1 View synthesis as supervision
作者将训练的图片序列分为两部分,target image 和source image。
下图可以看到整个pipeline。整体架构有两部分深度网络(depth cnn)和位置网络(pose cnn)。
深度网络将目标视图(It)作为input,输出是逐像素深度图Dt;位置网络将目标视图和其他视图(It-1,It+1)作为输入,输出就是相机位置信息(relative pose)Tt→t-1,Tt→t+1,最后再对source view采样,利用预测的深度图和relative pose重建target view。
在这里插入图片描述
这里的loss为:
在这里插入图片描述
其中,It就是target image,^Is就是Is 通过深度图warp到target的结果。
2.2 Differentiable depth image-based rendering
这里解释It和Is如何warp。下图过程为首先将target view中每一个像素点Pt通过预测的深度图和相机位置投影到source view上,因为神经网络预测出的Ps值是连续的,可能会落在不是像素点的位置上,这时候就要用到双线性插值(什么是双线性插值https://blog.csdn.net/xbinworld/article/details/65660665)(通过四个值top left,top right,bottom left,bottom right),最后得到warp过去的^Is上Pt的值。
在这里插入图片描述
用Pt表示target view中一个像素的齐次坐标(参考:https://www.cnblogs.com/zhizhan/p/3999885.html),k表示相机内参矩阵,那么可以获得Pt投影到source view的齐次坐标Ps通过下述式子:
在这里插入图片描述
T就是之前提到的relative pose。
这里有一个问题就是It project 到 Is 上有可能超出范围,文中没有提到(怎么处理这样的问题想到了再更新)
2.3 Modeling the model limitation
以上所说的内容都基于以下三点,1)场景是固定的,没有移动的物体;2)在target view和source view之间没有遮挡;3)表面反射是理想反射。如果训练中这三点没有实现,就会出现训练失败。
为了解决这个问题,作者提出了使用explainability prediction network(depth and pose networks连接起来同时训练),它的output是对每个target-source图像对中每一个像素的mask,^Es。Loss就变为
在这里插入图片描述
Mask就用来过滤,同样的问题网络会学习到让^Es为0从而使loss最小,所以这里作者使用了一个约束,用来得到E:假设mask所有的值都为1,然后使得像素值均为1的mask和Es(P) 之间的交叉熵(cross-entropy loss)尽可能小(意味着两者更相似)。这也就意味着,需要得到一个尽可能大的mask,并且这个mask能够让重建的损失函数达到最小。这样网络就被允许去忽略一些不要的因素。
2.4 Overcoming the gradient locality
梯度是通过I(Pt)和I(Ps)不同得到的,如果正确的Ps(通过ground-truth得到)在低纹理区域或者离当前的估计特别远,训练就会被抑制。作者提了两个方法:
1)在深度网络中使用具有小瓶颈的卷积编码器-解码器架构,该架构隐式地将输出约束为全局平滑,并有助于梯度传播到附近的区域;
2)明确的多尺度和平滑度损失使梯度可以从更大的空间区域直接获得。
本文采用第二种方法,对平滑项采用L1范式,最终的loss变为:
在这里插入图片描述
2.5 Network architecture
看一下具体的网络结构
在这里插入图片描述
都是encoder-decoder的结构,Single-view depth network采用dispnet的结构;pose network的input是target和source连接在一起的,经过七个卷积层再应用全局平均池化预测空间位置。
对于explainability prediction network,前五层和pose network是共享的,output通过softmax每两个通道归一化,第二个通道经过归一化后就是^Es。
3 Experiments
对Single-view depth estimation和pose estimation进行实验。
3.1 Single-view depth estimation
在这里插入图片描述
在Cityscapes数据集上的预测结果(只在cs数据集上训练)
再与其他监督的方法对比:
在这里插入图片描述
可以看到表现要比Godard方法差,因为其loss采用了左右一致性约束,作者提到可以思考将类似的一致性约束用于本文的网络。
与其他方法结果对比:
在这里插入图片描述
可以看出本文的方法与其他的监督方法有差不多的效果,并且在边界和细小的物体比如树上有更好的效果。
作者同样给出了一些预测结果不好的例子,总结出该网络在物体离镜头较近或者大的开阔地就没有很好的效果。如下图所示:
在这里插入图片描述
只在cs数据集训练和cs数据集训练后在KITTI上微调两种进行比较
在这里插入图片描述
图中可以看出在Cityscapes上训练模型,在识别车这样物体有困难,并且会和运处物体弄混。
随后作者又在Make3D上评估模型的泛化能力,从下图可以看出本文的模型离其他监督的方法还是有差距的。
在这里插入图片描述
在这里插入图片描述
但是从结果上看,尽管没有在Make3D上进行过训练,网络还是能够抓取到场景全局的布局。
3.2 Pose estimation
在KITTI odometry split上评估该模型的pose estimation network。从下表和图可以看出该方法是优于其他比较方法的。
在这里插入图片描述

在这里插入图片描述
3.3 Visualizing the explainability prediction
这里再看explainability prediction network的效果。
在这里插入图片描述
上图的前三行表明,网络可以识别出运动的物体,将他们定为unexplainable,4-5行展示了网络标出target和source之间会遮挡的物体,最后两行则是网络标出的网络不太能识别出的细小结构,倾向让他们是unexplainable。
4 Discussion 本文的方法是完全无监督的,不像双目用其中一张来作为ground-truth,所以可能效果没有那么好,但有不错的实用性。只需要知道相机内参就可以。另外该模型的网络可以用于表征学习的研究,pose network使用对应的图像形式来估计摄像机的运动,而depth network识别场景和对象的共同结构特征,那么将网络拿出来与其他表征学习的网络相比会不会有更好的效果,或者将其他representation learning的方法拿来使用是否会提高performance。