论文地址:https://arxiv.org/abs/2007.12140v2
背景
本文提出一种不需要构建代价体来进行立体匹配的方法,通过多分辨率初始化、可微的传播过程与warp机制来实现视差预测。此外基于倾斜窗口的假设来提升几何warp与上采样操作的精度;创新点如下:
- 提出一种高效的多分辨率初始化步骤,能够使用学习到的特征计算高分辨率匹配;
- 基于倾斜窗口假设与学习到的特征进行视差传播;
模型架构
模型大致内容如下:先使用一个紧凑的U-Net结构提取左右视图的多尺度特征,在多尺度上构建基于平行窗口的视差假设层,然后基于
L
1
L_1
L1 距离得到初始视差图;在得到初始视差图的前提下使用视差传播来得到更精确的视差图;
Tile Hypothesis
使用Tile Hypothesis来存储一个title的信息,其包含几何约束信息与可学习的特征信息,如式1所示:
h
=
[
d
,
d
x
,
d
y
⏟
plane
,
p
⏟
descriptor
]
(1)
\mathbf{h}=[\underbrace{d, d_{x}, d_{y}}_{\text {plane }}, \underbrace{\mathbf{p}}_{\text {descriptor }}]\tag1
h=[plane
d,dx,dy,descriptor
p](1)
其中
d
d
d 为title的视差,
d
x
、
d
y
d_x、d_y
dx、dy 为该title内视差的梯度,用这三个量可以表示一个title平面;
p
p
p 为特征描述符,是一个可学习的参数,用于表示title的特征向量,通过网络学习可以将学习到的附加信息叠加到title中;模型的目标是为对title的视差进行调优,获得最终的视差图;
特征提取模块
首先使用U-Net得到多尺度的特征图 E = { e 0 , … e M } \mathcal{E}=\left\{e_{0}, \ldots e_{M}\right\} E={e0,…eM} ,其中 e l e_l el 表示第 l l l 层的特征图,其中 l ∈ 0 , . . . M l\in 0,...M l∈0,...M, e 0 e_0 e0 表示原始分辨率大小的特征图, e M e_M eM 表示原图下采样 2 M 2^{M} 2M 倍的特征图, e l , x , y e_{l,x,y} el,x,y 表示 e l e_l el 特征图中 ( x , y ) (x,y) (x,y) 点的特征向量;
初始化
初始化的过程包含在所有分辨率上初始化视差 d i n i t d^{init} dinit 与 特征描述子 P i n i t P^{init} Pinit ,经过初始化会得到 M + 1 M+1 M+1 个基于平行视差窗口的 tile Hypothesis: h i n i t = [ d i n i t , 0 , 0 , p i n i t ] h^{init}=[d^{init}, 0, 0, p^{init}] hinit=[dinit,0,0,pinit]
视差初始化
对于所有分辨率的左视图的特征图,使用
4
×
4
4\times 4
4×4 步长的CNN对特征图
e
l
L
e^L_l
elL 处理后得
1
4
h
×
1
4
w
\frac{1}{4}h\times \frac{1}{4}w
41h×41w的匹配特征图
e
~
l
L
\tilde{e}^L_l
e~lL;对所有分辨率的右视图的特征图使用
4
×
1
4\times 1
4×1步长的CNN进行特征提取后得
1
4
h
×
w
\frac{1}{4}h\times w
41h×w 尺寸的匹配特征图
e
~
l
R
\tilde{e}^R_l
e~lR;在卷积层后面后跟随一个 ReLU层与
1
×
1
1\times 1
1×1 的卷积层;由此得到
E
L
~
=
{
e
~
0
L
,
…
,
e
~
M
L
}
\tilde{\mathcal{E^L}}=\left\{\tilde{\mathbf{e}}^L_{0}, \ldots, \tilde{\mathbf{e}}^L_{M}\right\}
EL~={e~0L,…,e~ML} 与
E
R
~
=
{
e
~
0
R
,
…
,
e
~
M
R
}
\tilde{\mathcal{E^R}}=\left\{\tilde{\mathbf{e}}^R_{0}, \ldots, \tilde{\mathbf{e}}^R_{M}\right\}
ER~={e~0R,…,e~MR},此时左右匹配特征图的尺寸不同(左视图的匹配特征图的宽度为右匹配特征图的
1
4
\frac{1}{4}
41)
初始化匹配代价为:
使用匹配特征
E
L
~
、
E
R
~
\tilde{\mathcal{E^L}}、\tilde{\mathcal{E^R}}
EL~、ER~求初始代价体如式2所示:
ϱ
(
l
,
x
,
y
,
d
)
=
∥
e
~
l
,
x
,
y
L
−
e
~
l
,
4
x
−
d
,
y
R
∥
1
(2)
\varrho(l, x, y, d)=\left\|\tilde{\mathbf{e}}_{l, x, y}^{L}-\tilde{\mathbf{e}}_{l, 4 x-d, y}^{R}\right\|_{1}\tag2
ϱ(l,x,y,d)=
e~l,x,yL−e~l,4x−d,yR
1(2)
因为右视图的宽度是左视图的4倍,因此右视图的索引下标为
4
x
−
d
4x-d
4x−d 。
初始的视差:如式3所示:
d
l
,
x
,
y
init
=
argmin
d
∈
[
0
,
D
]
ϱ
(
l
,
x
,
y
,
d
)
(3)
d_{l, x, y}^{\text {init }}=\operatorname{argmin}_{d \in[0, D]} \varrho(l, x, y, d)\tag3
dl,x,yinit =argmind∈[0,D]ϱ(l,x,y,d)(3)
此外,尽管初始化阶段所有 patch 都计算匹配代价,但不需要存储代价体。测试阶段只需要提取最佳匹配的位置,这可以利用快速存储器(例如,GPU上的共享存储器)非常高效地完成。因此,不需要存储和处理3D匹配代价体;
初始的描述子:如式4所示:
p
l
,
x
,
y
init
=
D
(
ϱ
(
d
l
,
x
,
y
init
)
,
e
~
l
,
x
,
y
L
;
θ
D
l
)
(4)
\mathbf{p}_{l, x, y}^{\text {init }}=\mathcal{D}\left(\varrho\left(d_{l, x, y}^{\text {init }}\right), \tilde{\mathbf{e}}_{l, x, y}^{L} ; \boldsymbol{\theta}_{\mathcal{D}_{l}}\right)\tag4
pl,x,yinit =D(ϱ(dl,x,yinit ),e~l,x,yL;θDl)(4)
其中,初始描述子 实际上使用一个多层感知机预测而来,感知机的输入为某像素点的初始深度对应的代价值
ϱ
(
l
,
x
,
y
,
d
i
n
i
t
)
\varrho(l, x, y, d_{init})
ϱ(l,x,y,dinit) 与 该层对应的匹配特征图在该点的特征向量
e
~
l
,
x
,
y
L
\tilde{\mathbf{e}}_{l, x, y}^{L}
e~l,x,yL,而
θ
D
l
\boldsymbol{\theta}_{\mathcal{D}_{l}}
θDl 表示MLP的参数;
传播
传播过程是以该层初始化的Tile Hypothesis与上一层预测的Tile Hypothesis上采样为输入,基于空间传播和信息融合来得到更精细化的Tile Hypothesis,过程中将右视图的特征warp到左视图用于求输入Tile Hypothesis的残差;此外,额外引入了一个置信度参数,用于融合上一层上采样而来的Tile Hypothesis与本层初始化的Tile Hypothesis;
Local Cost Volume:
warping 操作是基于第
l
l
l 层的tiles Hypothesis将
e
l
R
e^R_l
elR 的特征图warp到左视图,然后与
e
l
L
e^L_l
elL 求损失。以此来衡量该层的tiles Hypothesis 的准确性(自监督损失);在初始化阶段,每个 title Hypothesis 代表了一个
4
×
4
4\times 4
4×4 窗口内的信息(匹配特征图是有原始特征图以stride为
4
×
4
4\times 4
4×4下采样而来),根据中心点的视差
d
d
d 与梯度
d
x
、
d
y
d_x 、d_y
dx、dy 可以计算出窗口内其余点的视差值;利用一个窗口内16个点的16个视差值,可以将
e
l
R
e^R_l
elR 中对应16个点的特征图warp到左视图并与
e
l
R
e^R_l
elR 对应点特征求误差,从而得到16个匹配误差值;
在title plane求邻域点的视差:tiles Hypothesis中每个像素点(黑点)对应原始特征图
e
l
L
e^L_l
elL 每个
4
×
4
4\times 4
4×4 窗口,给定中心点的视差d与梯度
d
x
、
d
y
d_x 、d_y
dx、dy 求
e
l
L
e^L_l
elL 的
4
×
4
4\times 4
4×4 窗口内其余点的的视差如式5所示:
d
i
,
j
′
=
d
+
(
i
−
1.5
)
d
x
+
(
j
−
1.5
)
d
y
(5)
\mathbf{d}_{i, j}^{\prime}=d+(i-1.5) d_{x}+(j-1.5) d_{y}\tag5
di,j′=d+(i−1.5)dx+(j−1.5)dy(5)
其中
i
,
j
∈
{
0
,
1
,
2
,
3
}
i, j \in\{0, 1, 2, 3\}
i,j∈{0,1,2,3}
故每个窗口内的warp后的匹配误差向量
ϕ
(
e
l
,
d
′
)
∈
R
16
\boldsymbol{\phi}\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}\right)\in{R^{16}}
ϕ(el,d′)∈R16 如式6所示:
ϕ
(
e
l
,
d
′
)
=
[
c
0
,
0
,
c
0
,
1
,
…
,
c
0
,
3
,
c
1
,
0
…
c
3
,
3
]
w
h
e
r
e
c
i
,
j
=
∥
e
l
,
4
x
+
i
,
4
y
+
j
L
−
e
l
,
4
x
+
i
−
d
′
i
,
j
,
4
y
+
j
R
∥
1
(6)
\boldsymbol{\phi}\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}\right)=\left[c_{0,0}, c_{0,1}, \ldots, c_{0,3}, c_{1,0} \ldots c_{3,3}\right]\\\\ where \ \ \ \ c_{i, j}=\left\|\mathbf{e}_{l, 4 x+i, 4 y+j}^{L}-\mathbf{e}_{l, 4 x+i-\mathbf{d}^{\prime}{ }_{i, j}, 4 y+j}^{R}\right\|_{1} \tag6
ϕ(el,d′)=[c0,0,c0,1,…,c0,3,c1,0…c3,3]where ci,j=
el,4x+i,4y+jL−el,4x+i−d′i,j,4y+jR
1(6)
式6表明匹配误差向量是在 e l L e^L_{l} elL 与 e l R e^R_{l} elR上的特征匹配计算得来的, 其中 e l , 4 x + i − d ′ i , j , 4 y + j R \mathbf{e}_{l, 4 x+i-\mathbf{d}^{\prime}{ }_{i, j}, 4 y+j}^{R} el,4x+i−d′i,j,4y+jR 就是右视图根据根据每个像素预测的视差值warp回左视图的特征向量;
文中同时考虑了 ϕ ( e l , d ′ − 1 ) \boldsymbol{\phi}\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}-1\right) ϕ(el,d′−1) 与 ϕ ( e l , d ′ + 1 ) \boldsymbol{\phi}\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}+1\right) ϕ(el,d′+1) ,即局部代价体(Local Cost Volume)为 { ϕ ( e l , d ′ − 1 ) \boldsymbol{\phi}\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}-1\right) ϕ(el,d′−1) 、 ϕ ( e l , d ′ ) \boldsymbol{\phi}\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}\right) ϕ(el,d′)、 ϕ ( e l , d ′ + 1 ) \boldsymbol{\phi}\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}+1\right) ϕ(el,d′+1)}
Tile Update Prediction:
结合Tile Hypothesis:
h
l
,
x
,
y
h_{l, x, y}
hl,x,y 与 Local Cost Volume 一起构成了更新 Tile Hypothesis 的 CNN 模型的输入:
a
l
,
x
,
y
=
[
h
l
,
x
,
y
,
ϕ
(
e
l
,
d
′
−
1
)
,
ϕ
(
e
l
,
d
′
)
,
ϕ
(
e
l
,
d
′
+
1
)
⏟
local cost volume
]
(7)
\mathbf{a}_{l, x, y}=[\mathbf{h}_{l, x, y}, \underbrace{\phi\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}-\mathbf{1}\right), \phi\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}\right), \phi\left(\mathbf{e}_{l}, \mathbf{d}^{\prime}+\mathbf{1}\right)}_{\text {local cost volume }}]\tag7
al,x,y=[hl,x,y,local cost volume
ϕ(el,d′−1),ϕ(el,d′),ϕ(el,d′+1)](7)
这一步将每个像素的 n 个 Tile Hypothesis 作为输入,并预测 Tile Hypothesis 的更新残差值加上每个Tile Hypothesis 的权重
w
n
w^n
wn ,表明这个Tile Hypothesis 的置信度。使用CNN模块
U
l
\mathcal{U}_{l}
Ul来预测n个 Tile Hypothesis 的残差与置信度:
(
Δ
h
l
1
,
w
1
,
…
,
Δ
h
l
n
,
w
n
⏟
hypotheses updates
)
=
U
l
(
a
l
1
,
…
,
a
l
n
;
θ
U
l
)
.
(8)
(\underbrace{\Delta \mathbf{h}_{l}^{1}, w^{1}, \ldots, \Delta \mathbf{h}_{l}^{n}, w^{n}}_{\text {hypotheses updates }})=\mathcal{U}_{l}\left(\mathbf{a}_{l}^{1}, \ldots, \mathbf{a}_{l}^{n} ; \boldsymbol{\theta}_{\mathcal{U}_{l}}\right) .\tag8
(hypotheses updates
Δhl1,w1,…,Δhln,wn)=Ul(al1,…,aln;θUl).(8)
其中
w
i
∈
R
w^{i}\in R
wi∈R 为每个 title hypothesis的权重;其中 n 代表有每个像素点有几个 Tile Hypothesis :
当
l
=
M
l=M
l=M 时(最低分辨率层),每个像素点只有初始化的 Tile Hypothesis,故
n
=
1
n=1
n=1 。通过预测的 title hypothesis 残差值与原来的title hypothesis 得到更新后的title hypothesis,再对其进行2倍上采样得到下一层的 title hypothesis。在这一步,因此,视差 d 使用title hypothesis的平面方程进行上采样,而title hypothesis的其余部分dx、dy和p使用最近邻采样进行上采样。
当
l
=
M
−
1
l = M-1
l=M−1 时
n
=
2
n=2
n=2 ,一个是
l
=
M
−
1
l = M-1
l=M−1 层初始化得到的 Tile Hypothesis ,一个是上个state的Tile Hypothesis经过上采样得到的 Tile Hypothesis;此时使用
w
i
w_i
wi 来选择并更新置信度最高的 Tile Hypothesis ;然后重复此过程,直到得到原始分辨率的视差图,从而实现对视差的精细化;
损失函数
损失函数包含一个约束初始视差估计的对比损失和一个约束tile视差参数的损失(既约束tile中的视差,又约束tile中的视差梯度,还涉及置信度的约束)
Initialization Loss
Ground True是亚像素精度的视差值,但是初始化视差是用整数表示
ψ
(
d
)
=
(
d
−
⌊
d
⌋
)
ϱ
(
⌊
d
⌋
+
1
)
+
(
⌊
d
⌋
+
1
−
d
)
ϱ
(
⌊
d
⌋
)
(9)
\psi(d)=(d-\lfloor d\rfloor) \varrho(\lfloor d\rfloor+1)+(\lfloor d\rfloor+1-d) \varrho(\lfloor d\rfloor)\tag9
ψ(d)=(d−⌊d⌋)ϱ(⌊d⌋+1)+(⌊d⌋+1−d)ϱ(⌊d⌋)(9)
Initialization Loss 目标是U-Net得到一个较好的特征
E
\mathcal{E}
E 使得初始初始代价体在ground true处的代价最小而在其它
d
d
d 的代价较大,为此设计了一个对比损失:
L
i
n
i
t
(
d
g
t
,
d
n
m
)
=
ψ
(
d
g
t
)
+
max
(
β
−
ψ
(
d
n
m
)
,
0
)
(10)
L^{\mathrm{init}}\left(d^{\mathrm{gt}}, d^{\mathrm{nm}}\right)=\psi\left(d^{\mathrm{gt}}\right)+\max \left(\beta-\psi\left(d^{\mathrm{nm}}\right), 0\right)\tag{10}
Linit(dgt,dnm)=ψ(dgt)+max(β−ψ(dnm),0)(10)
其中
β
>
0
\beta >0
β>0 是个边界,
d
g
t
d^{gt}
dgt 是标签视差,
d
m
n
d^{mn}
dmn 如式11所示:
d
n
m
=
argmin
d
∈
[
0
,
D
]
/
{
d
:
d
∈
[
d
g
t
−
1.5
,
d
g
t
+
1.5
]
}
ϱ
(
d
)
(11)
d^{\mathrm{nm}}=\operatorname{argmin}_{d \in[0, D] /\left\{d: d \in\left[d^{\mathrm{gt}}-1.5, d^{\mathrm{gt}}+1.5\right]\right\}} \varrho(d)\tag{11}
dnm=argmind∈[0,D]/{d:d∈[dgt−1.5,dgt+1.5]}ϱ(d)(11)
d
m
n
d^{mn}
dmn表示在不匹配的视差值
d
d
d 产生的最低代价,
d
∈
[
0
,
D
]
/
{
d
:
d
∈
[
d
g
t
−
1.5
,
d
g
t
+
1.5
]
d \in[0, D] /\{d: d \in [d^{\mathrm{gt}}-1.5, d^{\mathrm{gt}}+1.5]
d∈[0,D]/{d:d∈[dgt−1.5,dgt+1.5] 表示
d
∈
[
0
,
d
g
t
−
1.5
]
∪
[
d
g
t
+
1.5
,
D
]
d\in [0, d^{\mathrm{gt}}-1.5]\cup [d^{\mathrm{gt}}+1.5, D]
d∈[0,dgt−1.5]∪[dgt+1.5,D] 也就是非最优视差d;该损失将
d
=
g
r
o
u
n
d
t
r
u
e
d = ground true
d=groundtrue 时的初始代价推向0,以及驱使非最优视差d的匹配代价推向一定的边界(有点像传统算法中的最优和次优拉开一定的距离,形成单峰损失)。要么使用一个随机的非最优视差匹配代价作为负样本,要么使用所有的非最优视差匹配代价作为负样本。
Propagation Loss
在传播过程中,对 tile 的几何约束信息和置信度设置损失函数:
L
prop
(
d
,
d
x
,
d
y
)
=
min
(
ρ
(
d
diff
)
,
A
)
(12)
L^{\text {prop }}\left(d, d_{x}, d_{y}\right)=\min \left(\rho\left(d^{\text {diff }}\right), A\right)\tag{12}
Lprop (d,dx,dy)=min(ρ(ddiff ),A)(12)
其中 ρ ( . ) \rho(.) ρ(.) 表示一个平滑 L 1 L_1 L1 损失,且 d d i f f = d g t − d ^ d^{\mathrm{diff}}=d^{\mathrm{gt}}-\hat{d} ddiff=dgt−d^
此外,还对倾斜表面设置损失,如式13所示:
L
s
l
a
n
t
(
d
x
,
d
y
)
=
∥
d
x
g
t
−
d
x
d
y
g
t
−
d
y
∥
1
χ
∣
d
d
i
f
f
∣
<
B
(13)
L^{\mathrm{slant}}\left(d_{x}, d_{y}\right)=\left\|\begin{array}{c} d_{x}^{\mathrm{gt}}-d_{x} \\ d_{y}^{\mathrm{gt}}-d_{y} \end{array}\right\|_{1} \chi_{\left|d^{\mathrm{diff}}\right|<B}\tag{13}
Lslant(dx,dy)=
dxgt−dxdygt−dy
1χ∣ddiff∣<B(13)
其中
χ
\chi
χ 是一个指示函数,当条件满足时,它的值为1,否则为0。
为了监督置信度,当预测的视差与
d
g
t
d_{gt}
dgt 距离小于
C
1
C_1
C1 增加置信度,而距离大于
C
2
C_2
C2 时应该减小置信度,如式14所示:
L
w
(
w
)
=
max
(
1
−
w
,
0
)
χ
∣
d
diff
∣
<
C
1
+
max
(
w
,
0
)
χ
∣
d
diff
∣
>
C
2
(14)
L^{\mathrm{w}}(w)=\max (1-w, 0) \chi_{| d^{\text {diff }}|<C_{1}}+\max (w, 0) \chi_{|d^{\text {diff }}|>C_{2}}\tag{14}
Lw(w)=max(1−w,0)χ∣ddiff ∣<C1+max(w,0)χ∣ddiff ∣>C2(14)
Global Loss
总体的损失函数如式15所示:
L
t
o
t
a
l
=
∑
l
,
x
,
y
λ
init
L
l
init
+
λ
prop
L
l
prop
+
λ
slant
L
l
slant
+
λ
w
L
l
w
(15)
L_{total} = \sum_{l, x, y} \lambda^{\text {init }} L_{l}^{\text {init }}+\lambda^{\text {prop }} L_{l}^{\text {prop }}+\lambda^{\text {slant }} L_{l}^{\text {slant }}+\lambda^{\mathrm{w}} L_{l}^{\mathrm{w}}\tag{15}
Ltotal=l,x,y∑λinit Llinit +λprop Llprop +λslant Llslant +λwLlw(15)