一、基本信息
标题: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计算损失
合成数据:难以估计真实世界
三、创新点
原理
视差公式:
x
−
b
=
z
f
∗
x
r
;
x
=
z
f
∗
x
l
⇒
(
x
l
−
x
r
)
=
f
∗
b
z
x-b=\frac{z}{f} * x_{r} ; x=\frac{z}{f} * x_{l} \Rightarrow\left(x_{l}-x_{r}\right)=\frac{f * b}{z}
x−b=fz∗xr;x=fz∗xl⇒(xl−xr)=zf∗b
令:
d
=
f
∗
b
z
d=\frac{f * b}{z}
d=zf∗b
由此可得:
d
=
x
l
−
x
r
⇒
x
l
=
d
+
x
r
d=x_{l}-x_{r} \Rightarrow x_{l}=d+x_{r}
d=xl−xr⇒xl=d+xr
假设CNN可以预测深度视差(这里预测右图):
F
(
x
r
)
=
d
x
F\left(x_{r}\right)=d_x
F(xr)=dx
那么就可以用预测视差加上右图来合成左图
I
w
I_w
Iw(输入的右图为
I
r
I_r
Ir):
I
w
=
I
r
(
F
(
x
r
)
+
x
r
)
I_w = I_{r}\left(F\left(x_{r}\right)+x_{r}\right)
Iw=Ir(F(xr)+xr)
用预测的左图减去真实的左图就得到损失函数:
L
=
(
I
w
−
I
l
)
2
L = (I_w - I_l)^2
L=(Iw−Il)2
预测到视差d,同时又知道f和b,就可以得到深度z
损失函数
本文损失函数:
E
r
e
c
o
n
s
i
=
∫
Ω
∥
I
w
i
(
x
)
−
I
1
i
(
x
)
∥
2
d
x
=
∫
Ω
∥
I
2
i
(
x
+
D
i
(
x
)
⏟
f
B
/
d
i
(
x
)
)
−
I
1
i
(
x
)
∥
2
d
x
E_{r e c o n s}^{i}=\int_{\Omega}\left\|I_{w}^{i}(x)-I_{1}^{i}(x)\right\|^{2} d x=\int_{\Omega}\left\|I_{2}^{i}(x+\underbrace{D^{i}(x)}_{f B / d^{i}(x)})-I_{1}^{i}(x)\right\|^{2} d x
Ereconsi=∫Ω∥∥Iwi(x)−I1i(x)∥∥2dx=∫Ω∥∥∥∥∥∥∥I2i(x+fB/di(x)
Di(x))−I1i(x)∥∥∥∥∥∥∥2dx
上面d为预测的深度,f和B预设,
{
I
1
i
,
I
2
i
}
\left\{I_{1}^{i}, I_{2}^{i}\right\}
{I1i,I2i}为输入的左右2张图。
上图用左图
I
1
I_1
I1预测视差D,然后用右图加上这个视差来合成图(其实就是预测左图)
I
w
I_w
Iw,计算损失,为啥是在右图
I
2
I_2
I2加左图的预测
D
D
D视差呢?这其实叫做synthesizing a backward warp image
(
I
w
)
(I_w)
(Iw),下面解释。
backward warp
假如用左图预测的视差d加上左图,得到的合成图像存在以下问题:
多个点可能映射到同一个点p->q
而在
I
′
I^{'}
I′中有可能有空洞
所以换个思路,用右图减去左图预测的视差d,这是合成图像是用来预测左图的,那么损失也可以通过这个合成图像和左图来得到,这么做解决了上述问题,因为预测图的目标是用来预测左图,和真实左图对比,能够更好学习(解释还不是很清楚)。
正则项(防止多个点预测到一个点上)
E smooth i = ∥ ∇ D i ( x ) ∥ 2 E_{\text {smooth}}^{i}=\left\|\nabla D^{i}(x)\right\|^{2} Esmoothi=∥∥∇Di(x)∥∥2
算梯度吧,要是多个点预测到一个点上,梯度更大。这个会使图像倾向于平滑
所以最终损失:
E
=
∑
i
=
1
N
E
recons
i
+
γ
E
smooth
i
E=\sum_{i=1}^{N} E_{\text {recons}}^{i}+\gamma E_{\text {smooth}}^{i}
E=i=1∑NEreconsi+γEsmoothi
提高分辨率
这是跳跃连接
粗分辨率 -> 双线性插值(4x4 卷积) +
池化 -> 1x1卷积 = 细分辨率
全卷积结构带来的好处:
- 使用简单双线性插值可以保持CNN参数固定
- 而使用上一层的信息可以给粗分辨率提供帮助
网络结构
典型FCN网络,因为去了全连接层,所以可接受输入图像尺寸变化。
还有就是上面提到到,可以提高分辨率,因为可以跨层跳跃连接。
四、实验结果
aug数据增强8倍
基于KITTI数据集对比:
和监督学习对比:
五、结论与思考
作者结论
网络在不到一半的KITTI数据集上进行了训练,在单视图深度估计方面,可以与目前最先进的监督方法媲美。
总结
立体配对基本思想