论文链接:https://arxiv.org/pdf/1906.06195.pdf
代码链接:https://github.com/naver/r2d2
主要内容
本文首先指出显著区域未必是易辨识区域,因此用判断极值的方法来判断keypoint(关键点)位置的方法未必准确,这样会影响到所提取描述子的性能。相比于之前只重视特征点的repeatble(可重复性,即特征在连续图像中多次出现)的方法,作者加入了reliable(可靠性)的因数,指出特征的提取需要在repeatble和reliable的均不错的区域进行。同时,沿用D2-net网络的detection-and-description方法(关于D2-net,可以参考我的博客),因此方法命名为R2D2,训练方式采用自监督进行。
文中指出,repeatble和discriminative(特异性,易于匹配)是两个概念,参考下图:
左图中体现了可靠性,包括三角形的区域就是discriminative的地方。并且这些区域拥有相同的可靠性。右图中虽然虽然有很好的可重复性,但是由于图片中的物体形状过于相似,不存在或者说很难找到discriminative的地方。
文章的主要贡献
1、提出了一种全新的损失函数来学习关键点的检测,并且关键点在保证稀疏性(保证计算量合适)的同时可以均匀分布在图像上,相比于别的方法,可以获得更好的可重复性。
2、在学习可靠的局部描述子的同时,可以清晰地给出这些描述子的可靠性程度。
3、所提出的方法挑选出了重复性和可靠性均高的的关键点,并且取得了最好的效果。
具体实现
整体网络架构如下图所示:
对于尺寸为
H
×
W
H×W
H×W的输入图片
I
I
I,输出由三部分组成,第一个是一个三维的tensor
X
∈
R
H
×
W
×
D
X\in\R^{H×W×D}
X∈RH×W×D,第二个是一个heatmap
S
∈
[
0
,
1
]
H
×
W
S\in[0,1]^{H×W}
S∈[0,1]H×W,它的目的是提供稀疏并且可重复性高的关键点位置,为了完成这个目的,在训练
S
S
S包含强烈并且可重复性高的局部最大值的同时,从和局部最大值有响应的地方提取关键点。第三个是关于可靠性地图
R
∈
[
0
,
1
]
H
×
W
R\in[0,1]^{H×W}
R∈[0,1]H×W的,用来提供网络所评估的可靠性信息,也就是每一个像素点
(
x
,
y
)
(x,y)
(x,y)处描述子
X
i
j
(
i
=
1..
W
,
j
=
1..
H
)
X_{ij}(i=1..W,j=1..H)
Xij(i=1..W,j=1..H)的可辨识度。
主干网络参考L2-Net,用3个3×2的卷积层替代了最后一层的8×8卷积层,从而减少权重数量,并且可以获得类似甚至更好的效果。输出的128维的tensor作为下一个分支网络的输入,a)通过
l
2
l_2
l2正则层得到描述子
X
X
X,b)通过一个平方处理,再通过一个1×1的卷积层和一个softmax层得到
R
R
R,c)和b)一样的处理得到
S
S
S。
损失函数
repeatability
作者指出用监督的学习方法会妨碍神经网络去寻找更好的关键点,因此训练采用自监督的方法。
记
I
I
I和
I
′
I'
I′为同一场景下的两张图片,
U
∈
R
H
×
W
×
2
U\in\R^{H×W×2}
U∈RH×W×2为
I
I
I和
I
′
I'
I′之间的真实映射关系,也就是说如果
I
I
I中的像素点
(
i
,
j
)
(i,j)
(i,j)与
I
′
I'
I′中的像素点
(
i
′
,
j
′
)
(i',j')
(i′,j′)对应,则
U
i
j
=
(
i
′
,
j
′
)
U_{ij}=(i',j')
Uij=(i′,j′)。事实上,如果
I
I
I和
I
′
I'
I′为自然图片,
U
U
U可以通过光流法或者双目视觉匹配方法估算得到,如果
I
′
I'
I′是通过已知变换得到,比如单应矩阵,那么可以精确地得到
U
U
U。记
S
S
S和
S
′
S'
S′分别是
I
I
I和
I
′
I'
I′的repeatability map,
S
U
′
S'_U
SU′是从
I
′
I'
I′中得到,并根据
U
U
U进行warp得到的heatmap。(看前面的说明,repeatability map和heatmap不应该是一种东西么?)
最终,希望可以使得
S
S
S中的局部最大值可以和
S
U
′
S'_U
SU′中的局部最大值对应。文中采取的策略是最大化
S
S
S和
S
U
′
S'_U
SU′之间的余弦相似度,记为
c
o
s
i
m
cosim
cosim,当
c
o
s
i
m
(
S
,
S
U
′
)
cosim(S,S'_U)
cosim(S,SU′)最大化之后,
S
S
S和
S
U
′
S'_U
SU′这两张heatmap是完全一致的,它们的极大值点处实现了精确地匹配。当然这是在假设没有遮挡、变形、边界效应的情况,为了弥补这些影响,采取对重叠的块计算其余弦相似度并求其均值的策略。我们定义一系列的patch
P
=
p
\mathcal P={p}
P=p,其中包含了图片中所有的
N
×
N
N×N
N×N个patch,然后定义损失:
这里,
S
[
p
]
∈
R
N
2
S[p]\in \R^{N^2}
S[p]∈RN2表示从
S
S
S中提取出来的
N
×
N
N×N
N×N个向量化的patch
p
p
p,
S
U
′
[
p
]
S'_U[p]
SU′[p]同理。
同时,我们注意到,如果
S
S
S和
S
U
′
S'_U
SU′为定值,那么
L
c
o
s
i
m
\mathcal L_{cosim}
Lcosim也可以取到定值。为了避免这种事情发生,引入第二个损失函数,来最大化repeatability map中的局部最大值:
repeatability map的最终损失函数可以通过上面两个式子的加权和确定:
reliability
第一幅图片中的每一个像素点
(
i
,
j
)
(i,j)
(i,j)定义了一个尺寸为
M
M
M的patch,然后和第二幅图片中全部的其他的patch进行比较,在知道了真实映射关系
U
U
U之后,便可以计算其AP(Average Precision)值,为了保证所提取的描述子的可靠性,设计了如下的损失函数:
这里,
κ
∈
[
0
,
1
]
\mathcal \kappa\in[0,1]
κ∈[0,1]是一个用来规定每个patch最小预期AP的的超参数。为了最小化损失函数,当
A
P
(
i
,
j
)
<
κ
AP(i,j)<\mathcal \kappa
AP(i,j)<κ时,网络应该预测
R
i
,
j
=
0
R_{i,j}=0
Ri,j=0,当
A
P
(
i
,
j
)
>
κ
AP(i,j)>\mathcal \kappa
AP(i,j)>κ时,网络应该预测
R
i
,
j
=
1
R_{i,j}=1
Ri,j=1。时间测试中发现,当
κ
\mathcal \kappa
κ取0.5时可以取得很好的结果。
描述子的得分最终为 S i j S_{ij} Sij和 R i j R_{ij} Rij的乘积。
实验结果