一、基本信息
标题: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|
Lvs=s∑p∑∣∣∣It(p)−I^s(p)∣∣∣
p是像素索引,
I
t
I_{t}
It是目标图,
I
s
I_{s}
Is是源图,
I
^
s
\hat{I}_{s}
I^s是
I
s
I_{s}
Is使用深度
D
^
t
\hat{D}_{t}
D^t和位置矩阵
T
^
t
→
s
\hat{T}_{t \rightarrow s}
T^t→s计算出来的。个人理解:
I
s
I_{s}
Is通过CNN参数产生
I
^
s
\hat{I}_{s}
I^s,
I
^
s
\hat{I}_{s}
I^s其实就是为了表示
I
t
I_{t}
It,损失算之间差异。
那么就说道,先前工作使用此方法需要位姿信息,而本文直接再用一个网络估计位置。
解释上图:
深度预测只需要一张图
I
t
I_t
It(训练时需要几张?什么方法),通过DepthCNN,得到预测深度图
D
^
t
(
p
)
\hat{D}_{t}(p)
D^t(p),输入3帧
I
t
I_{t}
It、
I
t
−
1
I_{t-1}
It−1、
I
t
+
1
I_{t+1}
It+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} It−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 It的光度重建误差最小,也就是 ∣ I t ( p ) − I ^ t − 1 ( p ) ∣ \left|I_{t}(p)-\hat{I}_{t-1}(p)\right| ∣∣∣It(p)−I^t−1(p)∣∣∣要小。
深度预测和之前使用视差方法不太一样,但是深度 D ^ t ( p ) \hat{D}_{t}(p) D^t(p)作用在另一张上算损失,思想是一样的。
上述具体关联,比如说s和t(上面是
I
t
I_t
It和
I
t
−
1
I_{t-1}
It−1、
I
t
+
1
I_{t+1}
It+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}
ps∼KT^t→sD^t(pt)K−1pt
上面计算出
p
s
p_s
ps是连续的,就是带小数,所以又使用双线性插值了,这种方法可以微分,求梯度:
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(pt)=Is(ps)=i∈{t,b},j∈{l,r}∑wijIs(psij)
模型限制
有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| Lvs=⟨I1,…,IN⟩∈S∑p∑E^s(p)∣∣∣It(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) Lreg(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) Lfinal=∑Lvsl+λsLsmoothl+λe∑Lreg(E^sl)
网络结构
对于单视图深度,使用DispNet(a),输出多尺度深度图。b是位姿估计和可解释性网络,在反卷积之前,输出6自由度的位姿,只有再反卷积得到
E
^
s
\hat{E}_{s}
E^s
四、实验结果
最后2行处理的不好,大场景和靠近镜头。
位姿误差和SLAM对比:
可解释高亮部分说明不能计算运动:
五、结论与思考
作者结论
作者也提到了还未能解决的问题:
- 场景在动,比如行人,路上行驶的车,还有遮挡问题
- 相机内参固定了
- 没有转成3D点云。。
总结
提出位置网络,训练时不是单独训练的,而是结合深度,来重建目标图。但是在使用时是各种的2个网络。