核心思想
该文提出一种基于深度学习的图块匹配方法,其思路并不复杂利用孪生网络分别提取两个图块的特征信息,然后利用全连接层计算图块之间的相似度,最后利用预测两个值分别表示图块匹配或不匹配的概率。整个网络的结构如下图所示
首先通过采样的方式获取训练的样本,样本是两个图块,并对图块进行预处理,将图像的灰度值进行归一化。然后分别用两个结构相同权重共享的卷积神经网络对两个图块进行特征提取,提取得到的特征会通过一个bottleneck层将特征维度进行压缩。接着将两个图块提取到的特征图级联起来送入到度量网络中,度量网络是由三个全连接层构成,最后通过一个softmax层输出两个预测值,分别表示两个图块匹配或不匹配的概率。
实现过程
网络结构
本文的网络结构参数如下表所示
损失函数
本文采用交叉熵损失函数
其中
y
i
=
0
y_i=0
yi=0表示两个图块不匹配,
y
i
=
1
y_i=1
yi=1表示两个图块匹配,
y
i
^
\hat{y_i}
yi^表示网络的预测结果,计算方法如下
v
0
,
v
1
v_0,v_1
v0,v1分别表示网咯输出的两个预测值。
训练策略
本文在训练过程中为保持正负样本的数量平衡(比如一个Batch有32对图块,那么有16对匹配图块和16个对匹配图块),采用了一种特殊的采样方法。对于正向样本(一对匹配的图块),采样方法比较简单就是在数据集的同一个组里随机选择两个图块,而对于负向样本(一对不匹配的图块)则需要从一个称为水库采样器(reservoir sampler)的图块缓存中获取。这个图块缓存器中始终保持有R个图块,用于生成不匹配的图块。R的大小也决定了内存占用及负向样本的多样性,本文选择R=16384。图块的采样方法如下图所示
为了获得2S个图块,就要进行S次采样。首先从下一组图块数据集中把全部的
k
k
k幅图块提取出来(这些都是相互匹配的图块),从中随机选择两个图块
p
i
,
p
j
p_i,p_j
pi,pj并带上匹配的标签
1
1
1,保存到第
2
b
2b
2b个样本中,
b
=
0
,
1...
S
−
1
b=0,1...S-1
b=0,1...S−1。然后对于
k
k
k幅图块考虑是否将其补充到图块缓存器中,当图块缓存器中的图块数量不满R时,就会把全部的
k
k
k个图块添加进去,而当图块缓存器数量已满时,对于第
T
T
T个图块样本,他有
R
/
T
R/T
R/T的概率被添加到图块缓存器中,并替代原本其中的一个图块。接着在图块缓存器中随机选择两个图块
p
u
,
p
v
p_u,p_v
pu,pv,并判断二者是否属于不匹配的图块,如果属于不匹配图块则将
p
u
,
p
v
p_u,p_v
pu,pv和标签
0
0
0保存到第
2
b
+
1
2b+1
2b+1个样本中,否则则继续随机抽选样本,直到抽选到两个不匹配的图块,或者达到上限抽取次数(1000次)。如果不匹配图块抽选失败了(1000次还没有选到不匹配的样本),则将先前采样得到的正向样本
p
i
,
p
j
p_i,p_j
pi,pj和标签
1
1
1保存到第
2
b
+
1
2b+1
2b+1个样本中。
算法评价
本文较早的采用了基于深度学习的方法进行了图像匹配,但也只是完成了判断两个采样好的图块之间是否属于匹配图块的作用,还不能从一整幅图像中寻找到图块对应的部分,所以还需要配合其他方法。但本文采用的孪生网络结构以及度量网络都是匹配算法中的典型做法,为后面的研究工作奠定了一个基础。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。