论文地址:https://arxiv.org/abs/1510.05970
源码地址:https://github.com/jzbontar/mc-cnn
背景
传统的立体匹配算法包含:匹配代价计算,代价聚合,视差计算,视差精细化四个步骤;针对初始匹配代价计算,本文提出一种基于CNN的patch相似度衡量方法,再结合传统算法中的代价聚合、视差计算与视差精细化步骤预测输入图像的深度图;
模型结构
基于自监督学习的框架引导模型训练,用
<
P
n
×
n
L
(
p
)
,
P
n
×
n
R
(
q
)
>
<\mathcal{P}_{n \times n}^{L}(\mathbf{p}), \mathcal{P}_{n \times n}^{R}(\mathbf{q})>
<Pn×nL(p),Pn×nR(q)>来表示以同名点
p
与
q
p 与 q
p与q 为中心的
n
×
n
n\times n
n×n 的patch;假设 p 点坐标为
(
x
,
y
)
(x, y)
(x,y) ,q 点坐标为
(
x
−
d
,
y
)
(x-d,y)
(x−d,y),则:
q
p
o
s
=
(
x
−
d
+
O
p
o
s
,
y
)
q
n
e
g
=
(
x
−
d
+
O
n
e
g
,
y
)
q_{pos}=(x-d+O_{pos}, y)\\q_{neg}=(x-d+O_{neg}, y)
qpos=(x−d+Opos,y)qneg=(x−d+Oneg,y)
其中
O
n
e
g
∈
[
−
m
a
x
D
,
−
m
i
n
D
]
∪
[
m
i
n
D
,
m
a
x
D
]
O_{neg}\in[-maxD, -minD]\cup [minD, maxD]
Oneg∈[−maxD,−minD]∪[minD,maxD],
O
p
o
s
∈
[
0
,
1
]
O_{pos}\in [0, 1]
Opos∈[0,1],模型的核心思想为拉进正样本对之间的距离,拉远负样本对之间的距离;
快速型
将正样本与负样本经过孪生神经网络中提取特征后,经过归一化与点乘,得到正样本对之间的相似性
s
+
s_{+}
s+ 与负样本对之间的相似性
s
−
s_{-}
s−;
损失函数:
使用合页损失函数:
L
=
m
a
x
(
0
,
m
+
s
−
−
s
+
)
(1)
L = max(0, m + s_{-}-s_{+})\tag{1}
L=max(0,m+s−−s+)(1)
只用负样本对之间的距离与正样本对之间的距离大于m, 损失才为0,否则损失为
m
+
s
−
−
s
+
m + s_{-}-s_{+}
m+s−−s+;
精度型
将正样本与负样本经过孪生神经网络中提取特征后,将样本对的特征图拼接后送入MLP中,最后得到匹配分数s;
损失函数
采用二分类交叉熵损失:
L
=
t
⋅
l
o
g
(
s
)
+
(
1
−
t
)
⋅
l
o
g
(
1
−
s
)
(2)
L = t\cdot log(s) + (1-t)\cdot log(1-s)\tag{2}
L=t⋅log(s)+(1−t)⋅log(1−s)(2)
正样本对时
t
=
1
t=1
t=1,负样本对时
t
=
0
t=0
t=0
初始代价计算
得到初始代价计算网络之后,使用模型的输出作为初始代价;
C
C
N
N
(
p
,
d
)
=
−
s
(
<
P
L
(
p
)
,
P
R
(
p
−
d
)
>
)
(3)
C_{\mathrm{CNN}}(\mathbf{p}, d)=-s\left(<\mathcal{P}^{L}(\mathbf{p}), \mathcal{P}^{R}(\mathbf{p}-\mathbf{d})>\right)\tag{3}
CCNN(p,d)=−s(<PL(p),PR(p−d)>)(3)
即匹配分数越高,cost越小;
注:模型后续的步骤与传统算法一致,包含代价聚合、视差计算、视差精细化,故不赘述;