论文阅读笔记-Unsupervised Learning of Depth and Ego-Motion from Video
原论文链接
arXiv Unsupervised Learning of Depth and Ego-Motion from Video
CVPR 2017 open access Unsupervised Learning of Depth and Ego-Motion from Video
据我所知,这是第一篇使用视频来进行无监督单目深度估计学习的论文。论文主要贡献是:利用视频中相邻两帧的视角合成作为监督信号来进行深度估计和相机位姿估计的训练。(所以后面也有人管这叫自监督学习。)
本博客仅为个人理解,推荐阅读原文,原文写得也非常清楚。
1 方法
在开头提到过利用视频中相邻两帧的视角合成作为监督信号来进行深度估计和相机位姿估计的训练是本文主要的贡献。
本章将详细说明该方法如何将相邻帧的视角合成作为监督信号,作者如何处理违背假设和视角合成没有意义的地方。
需要注意的是:本文的方法假设相邻帧之间的场景变化只受相机变化的影响,也就是说,视频中的运动物体会对本文的方法造成比较大的影响。
1.1 将视角合成作为监督信号
将视角合成作为监督信号的主要过程见图1,作者将视频中的一帧
I
t
I_t
It作为目标帧,也就是目标视角。然后将
I
t
I_t
It相邻的图像
I
t
−
1
I_{t-1}
It−1和
I
t
+
1
I_{t+1}
It+1作为源帧/源视角
I
s
I_{s}
Is。
首先将目标图像
I
t
I_t
It经过深度估计网络得到对应的深度图
D
^
t
\hat{D}_{t}
D^t,将目标图像
I
t
I_t
It分别和源图像
I
s
I_{s}
Is作为相机位姿估计网络的输入得到相对相机位姿
T
^
t
→
s
\hat{T}_{t\rightarrow s}
T^t→s。然后将利用目标图像深度图
D
^
t
\hat{D}_{t}
D^t,相机的内外参将目标图像
I
t
I_{t}
It投影弯曲到目标图像的平面上。投影弯曲的过程见图2。投影(Project)的过程主要通过下面的公式(1)来进行。
p
s
∼
K
T
^
t
→
s
D
^
t
(
p
t
)
K
−
1
p
t
\begin{align} p_{s} \sim K\hat{T}_{t\rightarrow s}\hat{D}_{t}(p_{t})K^{-1}p_{t} \end{align}
ps∼KT^t→sD^t(pt)K−1pt
经过投影之后,利用投影位置附近的四个像素的值进行可微双线性采样(differentiable bilinear sampling),采样后
I
^
s
\hat{I}_{s}
I^s上
p
t
p_{t}
pt位置的值为
I
^
s
(
p
t
)
=
I
s
(
p
s
)
=
∑
i
∈
{
t
,
b
}
,
j
∈
{
l
,
r
}
w
i
j
I
s
(
p
s
i
j
)
\begin{align} \hat{I}_{s}(p_{t}) = I_{s}(p_{s}) = \sum_{i\in \{t,b\}, j\in \{l,r\}}w^{ij}I_{s}(p_{s}^{ij}) \end{align}
I^s(pt)=Is(ps)=i∈{t,b},j∈{l,r}∑wijIs(psij)
其中
∑
i
,
j
w
i
j
=
1
\sum_{i,j}w^{ij}=1
∑i,jwij=1,
t
,
b
,
l
,
r
t,b,l,r
t,b,l,r分别表示
t
o
p
,
b
o
t
t
o
m
,
l
e
f
t
,
r
i
g
h
t
top, bottom, left, right
top,bottom,left,right。
得到了变化后的源图像
I
^
s
\hat{I}_s
I^s后,利用目标图像和源图像计算损失
L
v
s
\mathcal{L}_{vs}
Lvs,这与后面利用SSIM来计算该损失不同,这里直接用L1距离来计算。
L
v
s
=
∑
<
I
1
,
.
.
.
,
I
N
>
∈
S
∑
p
∣
I
t
(
p
)
−
I
^
s
(
p
)
∣
\begin{align} \mathcal{L}_{vs} = \sum_{<I_{1},...,I_{N}>\in \mathcal S}\sum_{p}|I_{t}(p)-\hat{I}_{s}(p)| \end{align}
Lvs=<I1,...,IN>∈S∑p∑∣It(p)−I^s(p)∣
1.2 处理违背假设的部分
以下三种情况违背了作者最初的假设:
- 场景中包含有运动的物体
- 源视角和目标视角之间有遮蔽和未遮蔽的变化,举个例子:目标视角中原本没有被遮蔽的物体,在源视角被遮蔽了。
- 物体表面不符合Lambertian
为处理这几种情况,作者在相机位姿估计网络中添加了解释性网络,解释性网络输出解释性掩模
E
^
s
\hat{E}_{s}
E^s。并利用解释性掩模
E
^
s
\hat{E}_{s}
E^s来修改损失
L
v
s
\mathcal{L}_{vs}
Lvs。
L
v
s
=
∑
<
I
1
,
.
.
.
,
I
N
>
∈
S
∑
p
E
^
s
(
p
)
∣
I
t
(
p
)
−
I
^
s
(
p
)
∣
\begin{align} \mathcal{L}_{vs} = \sum_{<I_{1},...,I_{N}>\in \mathcal S}\sum_{p}\hat{E}_{s}(p)|I_{t}(p)-\hat{I}_{s}(p)| \end{align}
Lvs=<I1,...,IN>∈S∑p∑E^s(p)∣It(p)−I^s(p)∣
但是这种情况下,为了最小化损失
L
v
s
\mathcal{L}_{vs}
Lvs,网络会将解释性掩模
E
^
s
\hat{E}_{s}
E^s预测为0,所以作者增加了正则化项
L
r
e
g
(
E
^
s
)
\mathcal{L}_{reg}(\hat{E}_{s})
Lreg(E^s)来通过最小化解释性掩模
E
^
s
\hat{E}_{s}
E^s与1的交叉熵损失来鼓励网络不将解释性掩模
E
^
s
\hat{E}_{s}
E^s预测为0。
1.3 处理视角合成没有意义的地方
因为损失 L v s \mathcal{L}_{vs} Lvs是由像素间的强度差来获取的。 L v s \mathcal{L}_{vs} Lvs在低纹理区域时没有意义,所以作者添加了损失函数 L s m o o t h \mathcal{L}_{smooth} Lsmooth,该损失最小化预测深度图的二阶导的 L 1 L_{1} L1正则化。
2 结论
作者提出了一个端到端的无监督单目深度估计方法。作者在文章结尾提出了展望:
- 对动态物体和遮蔽的处理不好,可能可以通过结合运动分割来处理。
- 需要相机内参,不能任意使用网络中的视频来训练。
- 深度图知识3D场景的一个简单的表示。