论文链接:https://arxiv.org/pdf/1905.03561.pdf
代码链接:https://github.com/mihaidusmanu/d2-net
主要内容
相比传统的detect-then-describe的方法(先提取关键点,然后在关键点附近提取patch,然后用这些patch产生描述子),本文提出的D2-Net采用describe-and-detect的策略(同时提取描述子和关键点),测试显示D2-Net在困难的数据集(如较大的光照、角度变化等)上可以获得相同甚至更好的性能。
研究思路
detect-then-describe方法先提取关键点,然后在关键点附近提取patch,然后用这些patch产生稀疏的描述子,稀疏的描述子可以采用最近邻搜索,计算其欧氏距离的方法实现高效的特征匹配,稀疏的描述子也意味着内存的节省。同时,由于关键点多选择角点或者块状区域,因此使用这些局部特征可以很准确地进行定位。但是稀疏的局部特征在昼夜、季节变化或者弱纹理条件下匹配性能会变得很差。研究发现这种问题的原因在于关键点提取所使用的低层信息容易受到图像低层信息,比如像素密度的影响。另一方面,一系列的研究也发现即使当关键点性能很差时,局部描述子依然可以成功匹配。因此,放弃检测(提取关键点)直接稠密地提取描述子的方法被提出,这种方法在具有挑战性的情况下确实获得了更好的表现,但这种鲁棒性是以更久的匹配时间和更大的内存损耗为代价的。
因此,在这篇文章中,作者希望可以使用稀疏特征,并且能够在具有挑战性的情况下确实获得了很好的表现。出于这个目的,作者提出了一种describe-and-detect的策略,首先使用CNN(Convolutional Neural Network,卷积神经网络)计算特征图,然后通过将这些特征图进行切片的方式来计算描述子,并且提取关键点(选择特征图中的局部最大值)。通过这种方法,使得局部关键点和局部描述子可以很好的耦合到一起,这些局部关键点也会获得很好的匹配性能。这里注意到,关键点和描述子都是从特征图中提取的,而特征图由CNN产生,属于高层信息,很好地解决了上面提到的问题。但同时作者也指出,高层次信息提取出来的关键点在拥有高鲁棒性的同时,准确性会受到一定影响(可能是因为感受野问题,是不是需要上采样还原,我自己猜的)。
两种特征提取方式如下图所示:
整体流程
整体流程如下图所示:
首先,将图像
I
I
I输入到卷积神经网络
F
\mathcal F
F中,得到三维张量
F
F
F,
F
∈
R
h
×
w
×
n
F\in R^{h×w×n}
F∈Rh×w×n,
h
×
w
h×w
h×w是特征图的空间分辨率,
n
n
n是特征图的通道数。然后使用三维张量
F
F
F来提取描述子向量
d
:
d
i
j
=
F
i
j
,
d
∈
R
n
d:d_{ij}=F_{ij},d\in R^n
d:dij=Fij,d∈Rn,这里
i
=
1
,
.
.
.
,
h
,
j
=
1
,
.
.
.
,
w
i=1,...,h,j=1,...,w
i=1,...,h,j=1,...,w。通过计算描述子欧式距离并进行比较的方法,建立匹配关系。在比较前,先进行归一化处理:
d
^
i
j
=
d
i
j
/
∣
∣
d
i
j
∣
∣
2
\hat d_{ij}=d_{ij}/||d_{ij}||_2
d^ij=dij/∣∣dij∣∣2。
接下来对特征点做进一步的表达,首先定义对三维张量
F
F
F的二维响应
D
D
D:
D
k
=
F
:
:
k
,
D
k
∈
R
h
×
w
D^k=F_{::k},D^k\in R^{h×w}
Dk=F::k,Dk∈Rh×w
这里,
k
=
1
,
.
.
.
,
n
k=1,...,n
k=1,...,n。可以将特征提取函数
F
\mathcal F
F理解为
n
n
n个不同的特征检测函数,每个函数都产生一个二维响应地图
D
k
(
k
=
1
,
.
.
.
,
n
)
D^k(k=1,...,n)
Dk(k=1,...,n)。然后根据这些响应地图进行检测。如果点
(
i
,
j
)
(i,j)
(i,j)要被检测到,它必须满足如下要求:
对每一个像素点
(
i
,
j
)
(i,j)
(i,j),选择最突出的特征检测函数,相当于特征图的通道进行选择,并且要求像素点
(
i
,
j
)
(i,j)
(i,j)是对应响应地图
D
k
D^k
Dk的局部最大值点。
下面设计相应的公式来实现上述操作,并且可以让网络实现误差反向传播。首先,定义软的的局部最大值得分:
这里,
N
(
i
,
j
)
N(i,j)
N(i,j)是像素点
(
i
,
j
)
(i,j)
(i,j)临近的九个像素点(包括自己,相当于3×3)。然后定义特征图通道选择函数,以比例的形式定义:
β
i
j
k
=
D
i
j
k
/
m
a
x
t
D
i
j
t
\beta^k_{ij}=D^k_{ij}/\underset {t}{max}D^t_{ij}
βijk=Dijk/tmaxDijt
为了将
α
i
j
k
\alpha^k_{ij}
αijk、
β
i
j
k
\beta^k_{ij}
βijk都考虑进来,用它们的乘积来定义
γ
i
j
\gamma_{ij}
γij:
γ
i
j
=
m
a
x
k
(
α
i
j
k
β
i
j
k
)
\gamma_{ij}=\underset {k}{max}(\alpha^k_{ij}\beta^k_{ij})
γij=kmax(αijkβijk)
最后将
γ
i
j
\gamma_{ij}
γij进行归一化,得到soft detection score
s
i
j
s_{ij}
sij:
s
i
j
=
γ
i
j
/
∑
(
i
′
,
j
′
)
γ
i
′
j
′
s_{ij}=\gamma_{ij}/\sum_{(i',j')}\gamma_{i'j'}
sij=γij/(i′,j′)∑γi′j′
为了获得对尺度表换更加鲁邦的特征,文中使用了图像金字塔。给定输入图片
I
I
I,图像金字塔
I
ρ
I^{\rho}
Iρ被建立,其中包含了三种不一样的分辨率
ρ
=
0.5
,
1
,
2
\rho=0.5,1,2
ρ=0.5,1,2(分别对应于半分辨率、输入分辨率和两倍的分辨率),并在每个分辨率下提取特征图
F
ρ
F^{\rho}
Fρ。然后更大的图片结构就会被从低分辨率的特征图传递到高分辨的特征图,用下面的这种方式:
为了满足加法,特征图
F
γ
F^{\gamma}
Fγ会被修改成和特征图
F
ρ
F^{\rho}
Fρ一样的尺寸。
损失函数
给定一对图像
(
I
1
,
I
2
)
(I_1,I_2)
(I1,I2)和它们之间的一组匹配
c
:
A
↔
B
(
A
∈
I
1
,
B
∈
I
2
)
c:A\leftrightarrow B(A\in I_1,B\in I_2)
c:A↔B(A∈I1,B∈I2)。所设计的损失函数希望最小化匹配的描述子
(
d
^
A
(
1
)
,
d
^
B
(
2
)
)
(\hat d_A^{(1)},\hat d_B^{(2)})
(d^A(1),d^B(2))距离,最大化与其不匹配的描述子
(
d
^
N
1
(
1
)
,
d
^
N
2
(
2
)
)
(\hat d_{N_1}^{(1)},\hat d_{N_2}^{(2)})
(d^N1(1),d^N2(2))之间的距离。其中,
d
^
A
(
1
)
\hat d_A^{(1)}
d^A(1)对应
d
^
N
2
(
2
)
\hat d_{N_2}^{(2)}
d^N2(2),
d
^
B
(
2
)
\hat d_B^{(2)}
d^B(2)对应
d
^
N
1
(
1
)
\hat d_{N_1}^{(1)}
d^N1(1)。
然后便可以定义正距离
p
(
c
)
p(c)
p(c):
p
(
c
)
=
∣
∣
d
^
A
(
1
)
−
d
^
B
(
2
)
∣
∣
2
p(c)=||\hat d_A^{(1)}-\hat d_B^{(2)}||_2
p(c)=∣∣d^A(1)−d^B(2)∣∣2
负距离
n
(
c
)
n(c)
n(c)定义为:
n
(
c
)
=
m
i
n
(
∣
∣
d
^
A
(
1
)
−
d
^
N
2
(
2
)
∣
∣
2
,
∣
∣
d
^
N
1
(
1
)
−
d
^
B
(
2
)
∣
∣
2
)
n(c)=min(||\hat d_A^{(1)}-\hat d_{N_2}^{(2)}||_2,||\hat d_{N_1}^{(1)}-\hat d_B^{(2)}||_2)
n(c)=min(∣∣d^A(1)−d^N2(2)∣∣2,∣∣d^N1(1)−d^B(2)∣∣2)
这里,负样本
d
^
N
1
(
1
)
\hat d_{N_1}^{(1)}
d^N1(1)和
d
^
N
2
(
2
)
\hat d_{N_2}^{(2)}
d^N2(2)是位于正确对应的正方形局部邻域之外的最困难的负样本:
N
2
N_2
N2同理。在给定margin
M
M
M之后,triplet margin loss可以被定义为:
m
(
c
)
=
m
a
x
(
0
,
M
+
p
(
c
)
2
−
n
(
c
)
2
)
m(c)=max(0,M+p(c)^2-n(c)^2)
m(c)=max(0,M+p(c)2−n(c)2)
最终的损失函数可以写为:
这里,
s
c
(
1
)
s_c^{(1)}
sc(1)和
s
c
(
2
)
s_c^{(2)}
sc(2)是
I
1
I_1
I1中点
A
A
A和
I
2
I_2
I2中点
B
B
B的soft detection score,
C
C
C是
I
1
I_1
I1和
I
2
I_2
I2之间全部的响应。
实验结果