摘要
自监督单目深度估计网络,在训练过程中使用附近的帧作为监督信号来预测场景深度。然而在许多应用中,视频帧形式的序列信息也在测试时使用。绝大多数的单目网络不使用这个额外的信号,因此忽略了可用于改进预测深度的有价值信息,这些方法,要么使用计算成本高的测试时间细化技术,要么使用现成的循环网络,但是这些技术只能间接的利用固有的几何信息。
ManyDepth,是一种自适应的密集深度估计方法,它可以在测试时利用序列信息(当包含序列信息的时候)。受多视图立体的启发,ManyDepth 提出了一种基于深度端到端成本体积的方法,该方法仅使用自监督进行训练。我们提出了一种新的一致性损失,它鼓励网络在被认为不可靠时忽略成本量(这些情况包括在移动对象的情况下,以及处理静态相机的增强方案)
问题的设置
深度估计的目的是预测深度图
D
t
D_t
Dt,该深度图的像素与输入图像
I
t
I_t
It对齐。
传统的单图像深度估计方法通过训练一个深度网络
θ
d
e
p
t
h
\theta_{depth}
θdepth从
I
t
I_t
It映射到
D
t
D_t
Dt.
D
t
=
θ
d
e
p
t
h
(
I
t
)
D_t=\theta_{depth}(I_t)
Dt=θdepth(It)与其他多帧方法一样,我们的模型接受N个之前的时间视频帧作为输入
D
t
=
θ
d
e
p
t
h
(
I
t
,
.
.
.
,
I
t
−
N
)
D_t=\theta_{depth}(I_t,...,I_{t-N})
Dt=θdepth(It,...,It−N)虽然我们的模型利用了来自多个帧的信息,但是它也可以在测试时只有一个帧可用的情况下运行。与之前的工作不同,我们在测试时不使用未来帧,例如
I
t
+
1
I_{t+1}
It+1,因为在线应用中不能使用未来帧。
- 在训练的时候,我们利用先前帧和未来帧作为监督信号,而不需要立体监督;
- 在训练和测试的时候,我们不假设能够获得 I t I_t It和之前帧之间的相对想i姿态,而是我们使用一个可微的姿态网络 θ p o s e \theta_{pose} θpose来预测这些姿态;
- 我们也没有使用任何训练过的语义模型来掩盖移动的物体;
- 然而我们假设已知固定相机的内参K。
方法
我们的方法从两个完善的组件开始:基于自监督重投影的训练和多视图成本量。然后我们介绍了三个重要的创新,使成本体积匹配能够与来自单目视频的自监督训练一起工作。
- 自适应的成本体积
- 一种防止故障模式(成本体积过拟合)的方法
- 静态相机和单帧输入的数据增强
如上图所示,ManyDepth生成成本体积时较为复杂。首先针对于源帧 I t − 1 、 I t + 1 I_{t-1}、I_{t+1} It−1、It+1,首先通过特征提取网络形成特征图。将源帧和目标帧放入姿态网络形成相机之间的相对姿态 T t − > t + n T_{t->t+n} Tt−>t+n。最后与每个假设的深度 d d d( d ∈ P d\in P d∈P)一起进行扭曲,形成扭曲的深度图。扭曲的特征图和原始的特征图进行 L 1 L_1 L1损失,形成成本体积。将成本体积和特征图一起送入编码器解码器中形成最终的深度图。
自监督单目深度估计
与Sfm-Net的方法类似,我们只使用时间接近
I
t
I_t
It的视频帧来训练自监督深度网络。我们使用当前的深度估计
D
t
D_t
Dt和姿态网络
θ
p
o
s
e
\theta_{pose}
θpose生成的相对相机姿态
T
t
−
>
t
+
n
T_{t->t+n}
Tt−>t+n生成来自与
I
t
I_t
It具有相同视角的场景,我们只使用附近的源帧
I
t
+
n
,
n
∈
{
−
1
,
1
}
I_{t+n},n\in \{-1,1\}
It+n,n∈{−1,1}
I
t
+
n
−
>
t
=
I
t
+
n
<
p
r
o
j
(
D
t
,
T
t
−
>
t
+
n
,
K
)
>
I_{t+n->t}=I_{t+n}<proj(D_t,T_{t->t+n},K)>
It+n−>t=It+n<proj(Dt,Tt−>t+n,K)>上式可以看作是根据深度图
D
t
D_t
Dt,姿态网络生成的相机姿态,和相机本身内参,在附近源帧上进行采样,生成与
I
t
I_t
It具有相同视点下的图像,这也是后文所说的扭曲的图像。
其中 < > <> <>是采样算子, p r o j proj proj在重新投影到 I t + n I_{t+n} It+n的相机时,返回 D t D_t Dt中深度的二维坐标。虽然我们的成本体积(稍后描述),在线应用的时候仅使用先前的帧,但在训练的时候,我们的重投影损失也使用未来的帧。跟随MonoDepth,对于每个像素,我们通过在重建损失 p e p_e pe上选择每个像素最小值来优化最佳匹配源图像的损失。 L p = m i n n p e ( I t , I t + n − > t ) L_p=min_npe(I_t,I_{t+n->t}) Lp=minnpe(It,It+n−>t)我们将 p e p_e pe设置为SSIM和L1损失的组合,我们在四个输出尺度上最小化训练图像中所有像素的损失。
构建成本体积
为了利用多个输入帧,我们构建了一个成本体积,该成本体积测量
I
t
I_t
It的像素和输入视频的附近帧之间在不同深度值下的几何兼容性(该成本体积的主要作用是用来确定
I
t
I_t
It帧上每个像素的深度是多少)。
我们定义了一组有序平面
P
P
P,每个平面垂直于
I
t
I_t
It处的光轴,深度在
d
m
i
n
d_{min}
dmin和
d
m
a
x
d_{max}
dmax之间线性间隔。每个帧都被编码为一个深度特征图
F
t
F_t
Ft,并且使用已知的相机内参和估计的姿态采用每个假设的深度
d
∈
P
d\in P
d∈P将该特征图扭曲到
I
t
I_t
It下的视点中,这生成了一个扭曲的特征图
F
t
+
n
−
>
t
,
d
F_{t+n->t,d}
Ft+n−>t,d。在每个
d
∈
P
d\in P
d∈P处,最终的代价体积被构造为扭曲的特征与来自
I
t
I_t
It的特征之间的绝对差。成本体积有效地表示,对于像素
(
i
,
j
)
(i,j)
(i,j),对于
P
P
P中的每个
d
d
d,正确深度为
d
d
d的可能性有多大。将代价体积与特征
F
t
F_t
Ft连接起来,作为卷积解码器的输入,卷积解码器对深度
D
t
D_t
Dt进行回归。
成本体积的好处是允许网络从多个视角(此时需要改变的只有相机的姿态)利用输入,但是,通常需要选择
d
m
i
n
d_{min}
dmin和
d
m
a
x
d_{max}
dmax作为超参数,并且它们假设世界是静态的,在接下来的部分中我们将展示如何放宽这些假设。
自适应的成本体积
成本体积方法需要一个已知的深度范围,即 d m i n d_{min} dmin和 d m a x d_{max} dmax,这些通常是在训练之前根据数据集的先验知识或已知的相机姿态选择的超参数。我们无法做到这一点,因为单目序列上训练的自监督深度估计只能按比例估计深度。这意味着,虽然我们假设最终预测的深度和来自于姿态网络中相应的姿态都会大致一致,但它们与真实世界的深度将相差未知的比例因子。
为了解决这个问题,我们引入了一种新的自适应成本量,允许从数据中学习 d m i n d_{min} dmin和 d m a x d_{max} dmax这样它们就可以在训练过程中随着网络找到自己的缩放比例而进行调整。这可以通过使用来自 D t D_t Dt网络的当前预测来完成,此时我们计算训练批次上每个 D t D_t Dt的平均最小值和最大值。然后使用这些来更新具有动量0.99的 d m i n d_{min} dmin和 d m a x d_{max} dmax的指数移动平均估计。 d m i n d_{min} dmin和 d m a x d_{max} dmax与模型权重一起保存,然后在测试时保持固定。
解决成本体积过拟合问题
我们观察到,我们用单目监督训练的基线成本体积模型存在严重的伪影,包括在移动物体上出现的黑洞。这与单目
I
t
−
>
D
t
I_t->D_t
It−>Dt模型观察到的伪影相似,但是我们模型中出现的问题更加的严重。
理论上,我们的模型应该做的更好,它使用用于训练最先进的单帧深度估计器类似的重投影损失进行训练,同时他也可以通过成本体积访问额外的信息源。然而成本体积重所包含的信息仅在特定情况下是可靠的,例如在具有纹理表面的静态区域中。在对象正在移动的区域,或表面没有纹理的区域,成本体积将是深度信息的不可靠来源。
在训练的时候,网络变得过度依赖成本量,他没有忽略移动物体的成本,而是过于信任它。然后,在训练和测试时间,在最终的深度图中引入来自移动物体的成本体积中的伪影。最终,预测深度继承了成本体积的错误,我们通过教网络在这些不可靠的区域不要信任网络而在训练时改正了这个方法。
使用单独的网络正则化
我们观察到,单图像深度网络没有成本体积,因此不受成本体积过拟合的影响。虽然训练过程中,移动物体对于这些方法来说仍然是一个问题,但总体来说,它在移动物体上犯的错误要小的多。因此,我们在训练时,使用单目网络来教授成本体积网络的正确答案,但只在我们怀疑成本体积有问题的区域。这个独立的网络
θ
c
o
n
s
i
s
t
e
n
c
t
\theta_{consistenct}
θconsistenct为每个训练图像生成一个深度图
D
^
t
\hat D_t
D^t,在训练之后丢弃该深度图。
θ
c
o
n
s
i
s
t
e
n
c
y
θ_{consistency}
θconsistency与我们的主网络共享
θ
p
o
s
e
θ_{pose}
θpose,以帮助确保在
θ
d
e
p
t
h
θ_{depth}
θdepth和
θ
c
o
n
s
i
s
t
e
n
c
y
θ_{consistency}
θconsistency之间进行规模一致的预测。
在我们的多帧输出中,潜在的有问题的像素由一个二进制掩码来识别,在这些掩码区域,我们对
D
t
D_t
Dt施加
L
1
L_1
L1损失,鼓励预测与
D
t
D_t
Dt相似。
L
c
o
n
s
i
s
t
e
n
c
y
=
∑
M
∣
D
t
−
D
^
t
∣
L_{consistency}=\sum M|D_t-\hat D_t|
Lconsistency=∑M∣Dt−D^t∣
D
^
t
\hat D_t
D^t的梯度被屏蔽,以确保知识只从教师传递给学生。
识别不可靠的像素
我们的二进制掩码M在被认为不可靠的区域为1,在其他区域为0。我们使用了
D
^
t
\hat D_t
D^t来生成该掩码机制。我们推断,在成本体积可靠的区域,用
D
^
t
\hat D_t
D^t表示的深度将于体积成本
a
r
g
m
i
n
argmin
argmin表示的深度相似。我们因此将由成本体积的
a
r
g
m
i
n
argmin
argmin表示的深度
D
c
v
D_{cv}
Dcv与偶
θ
c
o
n
s
i
s
t
e
n
c
y
\theta_{consistency}
θconsistency预测的深度
D
^
t
\hat D_t
D^t进行比较。掩码M只在两者显著不同时被设置为1。
M
=
max
(
D
c
v
−
D
^
t
D
^
t
,
D
^
t
−
D
c
v
D
c
v
)
>
1
M=\max\Big(\frac{D_\mathrm{cv}-\hat{D}_t}{\hat{D}_t},\frac{\hat{D}_t-D_\mathrm{cv}}{D_\mathrm{cv}}\Big)>1
M=max(D^tDcv−D^t,DcvD^t−Dcv)>1使用单独的一次性网络来帮助规范训练的想法并不新鲜。我们的新颖之处是使用单帧深度网络来改进多帧系统。我们的方法也比使用离线语义分割成本更低,约束更少,并且比基于RANSAC的过滤做的假设更少。
静态相机和序列的开始
在测试时使用多个帧给我们的方法带来了两个潜在的挑战。
- 第一个挑战是当 I t − 1 I_{t-1} It−1不存在的时候,即当预测单个图像或序列开头的图像的深度时。多视图立体图像的方面不可避免的面临这些问题。为了解决这个问题,在使用概率 p p p进行训练的过程中,我们将成本体积替换为零的张量。这些图像鼓励网络学会只依赖与一张图像的特征。在测试的时候,当 I t − 1 I_{t-1} It−1不存在的时候,我们将成本体积替换为零的张量。
- 第二种情况发生在相机在
I
t
−
1
I_{t-1}
It−1和
I
t
I_t
It之间没有移动的时候。例如,一辆汽车在红绿灯之前停了下来。这对MVS的方法而言也较为困难。为了解决这个问题,在使用概率
p
p
p进行训练的过程中,我们将
I
t
−
1
I_{t-1}
It−1输入替换为
I
t
I_t
It的彩色增强版本。但是仍然使用真实的
I
t
−
1
,
I
t
+
1
I_{t-1},I_{t+1}
It−1,It+1进行监督。这使得网络能够预测合理的深度,即使成本体积是根据没有相机基线的图像构建的。
我们最终的损失为 L + ( 1 − M ) L p + L c o n s i s t e n c y + L s m o o t h L+(1-M)L_p+L_{consistency}+L_{smooth} L+(1−M)Lp+Lconsistency+Lsmooth