一、基本信息
标题:Unsupervised CNN for Single View Depth Estimation: Geometry to the Rescue
时间:2016
论文领域:深度预测、深度学习
引用格式:Garg R, BG V K, Carneiro G, et al. Unsupervised cnn for single view depth estimation: Geometry to the rescue[C]//European Conference on Computer Vision. Springer, Cham, 2016: 740-756.
二、研究背景
老生常谈问题:需要标签数据,户外获取深度昂贵,所以提出本文无监督的CNN单视图深度预测
监督学习CNN方法:使用均方根RMS计算损失
合成数据:难以估计真实世界
三、创新点
原理
视差公式:
令:
由此可得:
假设CNN可以预测深度视差(这里预测右图):
那么就可以用预测视差加上右图来合成左图(输入的右图为):
用预测的左图减去真实的左图就得到损失函数:
预测到视差d,同时又知道f和b,就可以得到深度z
损失函数
本文损失函数:
上面d为预测的深度,f和B预设,为输入的左右2张图。
上图用左图预测视差D,然后用右图加上这个视差来合成图(其实就是预测左图),计算损失,为啥是在右图加左图的预测视差呢?这其实叫做synthesizing a backward warp image ,下面解释。
backward warp
假如用左图预测的视差d加上左图,得到的合成图像存在以下问题:
多个点可能映射到同一个点p->q
而在中有可能有空洞
所以换个思路,用右图减去左图预测的视差d,这是合成图像是用来预测左图的,那么损失也可以通过这个合成图像和左图来得到,这么做解决了上述问题,因为预测图的目标是用来预测左图,和真实左图对比,能够更好学习(解释还不是很清楚)。
正则项(防止多个点预测到一个点上)
算梯度吧,要是多个点预测到一个点上,梯度更大。这个会使图像倾向于平滑
所以最终损失:
提高分辨率
这是跳跃连接
粗分辨率 -> 双线性插值(4x4 卷积) +
池化 -> 1x1卷积 = 细分辨率
全卷积结构带来的好处:
- 使用简单双线性插值可以保持CNN参数固定
- 而使用上一层的信息可以给粗分辨率提供帮助
网络结构
典型FCN网络,因为去了全连接层,所以可接受输入图像尺寸变化。
还有就是上面提到到,可以提高分辨率,因为可以跨层跳跃连接。
四、实验结果
aug数据增强8倍
基于KITTI数据集对比:
和监督学习对比:
五、结论与思考
作者结论
网络在不到一半的KITTI数据集上进行了训练,在单视图深度估计方面,可以与目前最先进的监督方法媲美。
总结
立体配对基本思想