一、基本信息
标题:Unsupervised Learning of Depth and Ego-Motion from Video
时间:2017
论文领域:深度预测、深度学习
引用格式:Zhou T, Brown M, Snavely N, et al. Unsupervised learning of depth and ego-motion from video[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2017: 1851-1858.
二、研究背景
SfM: 对于低纹理,复杂的几何/光度学,薄的结构,和遮挡,存在问题。最近使用深度学习方法解决。
Warping-based view synthesis:和视差不太一样,基于扭曲的方法被迫学习几何和/或对应的中间预测
三、创新点
本文在之前系列加入了位置估计网络。
有2个网络,联合训练,单独使用。假设场景是刚性的(事实上KITTI中车是会动的,使用这篇 方法有所解决),场景外观变换主要是因为相机动了。
把合成视图作为监督(无监督)
CNN产生新的合成视图作为关键的监督信息。给定一个场景的一个输入视图,合成一个新的场景图像从不同的相机姿势。合成过程使用CNN,损失完全可微。
L v s = ∑ s ∑ p ∣ I t ( p ) − I ^ s ( p ) ∣ \mathcal{L}_{v s}=\sum_{s} \sum_{p}\left|I_{t}(p)-\hat{I}_{s}(p)\right| L v s = s ∑ p ∑ ∣ ∣ ∣ I t ( p ) − I ^ s ( p ) ∣ ∣ ∣
p是像素索引,I t I_{t} I t 是目标图,I s I_{s} I s 是源图,I ^ s \hat{I}_{s} I ^ s 是I s I_{s} I s 使用深度D ^ t \hat{D}_{t} D ^ t 和位置矩阵T ^ t → s \hat{T}_{t \rightarrow s} T ^ t → s 计算出来的。个人理解:I s I_{s} I s 通过CNN参数产生I ^ s \hat{I}_{s} I ^ s ,I ^ s \hat{I}_{s} I ^ s 其实就是为了表示I t I_{t} I t ,损失算之间差异。
那么就说道,先前工作使用此方法需要位姿信息,而本文直接再用一个网络估计位置。
解释上图:
深度预测只需要一张图I t I_t I t (训练时需要几张?什么方法),通过DepthCNN,得到预测深度图D ^ t ( p ) \hat{D}_{t}(p) D ^ t ( p ) ,输入3帧I t I_{t} I t 、I t − 1 I_{t-1} I t − 1 、I t + 1 I_{t+1} I t + 1 ,通过PoseCNN,可以得到2个位置预测T ^ t → t − 1 \hat{T}_{t \rightarrow t-1} T ^ t → t − 1 、T ^ t → t + 1 \hat{T}_{t \rightarrow t+1} T ^ t → t + 1 。那么重点就是深度+位置希望重建目标targe view损失最小。
比如I t − 1 I_{t-1} I t − 1 结合 D ^ t ( p ) \hat{D}_{t}(p) D ^ t ( p ) 和T ^ t → t − 1 \hat{T}_{t \rightarrow t-1} T ^ t → t − 1 生成I ^ t − 1 ( p ) \hat{I}_{t-1}(p) I ^ t − 1 ( p ) ,希望和I t I_t I t 的光度重建误差最小,也就是∣ I t ( p ) − I ^ t − 1 ( p ) ∣ \left|I_{t}(p)-\hat{I}_{t-1}(p)\right| ∣ ∣ ∣ I t ( p ) − I ^ t − 1 ( p ) ∣ ∣ ∣ 要小。
深度预测和之前使用视差方法不太一样,但是深度 D ^ t ( p ) \hat{D}_{t}(p) D ^ t ( p ) 作用在另一张上算损失,思想是一样的。
上述具体关联,比如说s和t(上面是I t I_t I t 和I t − 1 I_{t-1} I t − 1 、I t + 1 I_{t+1} I t + 1 ):
p s ∼ K T ^ t → s D ^ t ( p t ) K − 1 p t p_{s} \sim K \hat{T}_{t \rightarrow s} \hat{D}_{t}\left(p_{t}\right) K^{-1} p_{t} p s ∼ K T ^ t → s D ^ t ( p t ) K − 1 p t
上面计算出p s p_s p s 是连续的,就是带小数,所以又使用双线性插值 了,这种方法可以微分,求梯度:
I ^ s ( p t ) = I s ( p s ) = ∑ i ∈ { t , b } , j ∈ { l , r } w i j I s ( p s i j ) \hat{I}_{s}\left(p_{t}\right)=I_{s}\left(p_{s}\right)=\sum_{i \in\{t, b\}, j \in\{l, r\}} w^{i j} I_{s}\left(p_{s}^{i j}\right) I ^ s ( p t ) = I s ( p s ) = i ∈ { t , b } , j ∈ { l , r } ∑ w i j I s ( p s i j )
模型限制
有3个限制:
没有移动的物体(-_-)
没有遮挡
表面Lambertian
如果条件不满足,梯度就会被破坏,并可能抑制训练。为了提高鲁棒性:
L v s = ∑ ⟨ I 1 , … , I N ⟩ ∈ S ∑ p E ^ s ( p ) ∣ I t ( p ) − I ^ s ( p ) ∣ \mathcal{L}_{v s}=\sum_{\left\langle I_{1}, \ldots, I_{N}\right\rangle \in \mathcal{S}} \sum_{p} \hat{E}_{s}(p)\left|I_{t}(p)-\hat{I}_{s}(p)\right| L v s = ⟨ I 1 , … , I N ⟩ ∈ S ∑ p ∑ E ^ s ( p ) ∣ ∣ ∣ I t ( p ) − I ^ s ( p ) ∣ ∣ ∣
又为了防止E ^ s \hat{E}_{s} E ^ s 总是0,加了正则化项L r e g ( E ^ s ) \mathcal{L}_{r e g}\left(\hat{E}_{s}\right) L r e g ( E ^ s )
,也就是说,鼓励网络将视图综合目标最小化,但对模型未考虑的因素给予一定的松弛。
克服梯度局部性2种方法:
使用带有深度网络小瓶颈的卷积编码器-解码器架构,隐式限制输出全局平滑,促进梯度从有意义的区域传播到附近的区域??
多层和平滑损失
本文使用第2种方法,所以最终损失:
L final = ∑ L v s l + λ s L smooth l + λ e ∑ L reg ( E ^ s l ) \mathcal{L}_{\text {final}}=\sum \mathcal{L}_{v s}^{l}+\lambda_{s} \mathcal{L}_{\text {smooth}}^{l}+\lambda_{e} \sum \mathcal{L}_{\text {reg}}\left(\hat{E}_{s}^{l}\right) L final = ∑ L v s l + λ s L smooth l + λ e ∑ L reg ( E ^ s l )
网络结构
对於单视图深度,使用DispNet(a),输出多尺度深度图。b是位姿估计和可解释性网络,在反卷积之前,输出6自由度的位姿,只有再反卷积得到E ^ s \hat{E}_{s} E ^ s
四、实验结果
最后2行处理的不好,大场景和靠近镜头。
位姿误差和SLAM对比:
可解释高亮部分说明不能计算运动:
五、结论与思考
作者结论
作者也提到了还未能解决的问题:
场景在动,比如行人,路上行驶的车,还有遮挡问题
相机内参固定了
没有转成3D点云。。
总结
提出位置网络,训练时不是单独训练的,而是结合深度,来重建目标图。但是在使用时是各种的2个网络。
思考
参考