hardnet****论文解释
本人刚接触这方面的时间不长若有什么理解不到位的地方欢迎指出更正。
代码部分:https://github.com/DagnyT/hardnet
摘要
受到sift的启发,引入了度量学习层。表明了去最大化两个最邻近的正样本和负样本的距离会取得很好的效果。在L2Net中使用全新的损失函数,并将其命名为HardNet。同样也是输出的128维的描述符。
引言
尽管端到端的学习模式很厉害(图像匹配、相机定位、传统的检测器和局部的图块描述符),但是无法完全代替复杂经典的方法。LIFT、MatchNet、DeepCompare作为第一批使用端到端学习模式的算法,在图块验证任务中表现良好,但却并未流行起来。就目前的研究显示,SIFT及其变形体在图像匹配和小尺度图像检索以及三维重建方面比基于学习的方法更好。这主要是因为目前的数据集不够丰富,无法训练出很屌的描述符。
接下来就来证明文章中提出的方法很牛逼。
采样策略和损失函数
上图为大致的采样流程:
(注:接下来的内容都将围绕着上面那副图展开)
X=(A1,P1,……,An,Pn),为一个batch,训练时将这将这个batch中的2n个patch送入HardNet的网络结构中,通过网络的patch会变为128维的描述符,通过描述符我们可以计算出他们距离矩阵(类似于L2Net)。
其中的Ai和Pi就代表有着相同特征点互相匹配的patch。
第一步,ai和pi分别代表patch Ai和Pi的描述符,根据描述符来构建距离矩阵𝐷 = 𝑝𝑑𝑖𝑠𝑡(𝑎, 𝑝)。
其中距离矩阵中的元素按照上式计算。
其距离矩阵D的对角线上代表互相匹配的patch中的距离。
第二步,d(a1,p1)就代表互相匹配的描述符a1和p1之间的距离,我们要去找到距离a1描述符距离最近的负样本和距离p1描述符距离最近的负样本,图上显示分别为p4和a2(即d(a1,p4)和d(a2,p1))并将其标为红色。
上面这坨话我们可以用公式来表达:
pjmin为最接近ai的负样本,其计算公式为:(对应上面的p4)
akmin为最接近pi的负样本,其计算公式为:(对应上面的a2)
注:这两个参数后面计算损失函数时会用到。
这样的话我们就可以得到四组描述符:
第三步,然后我们比较d(a1,p4)和d(a2,p1)的大小,选出较小的那个,如图所示,较小的那个是d(a2,p1),所以,距离a1和p1这对正样本最近的负样本就是a2。
上面这坨话我们仍然可以用公式来表达:
就是如果
这个式子成立,那么就得到:
反之,就得到:
上面这三个东西就是我们在一个batch中采样
总结:
我们的目标是:我们想要匹配对之间的距离小于跟非匹配patch之间的距离(也就是让一对情侣间的距离很近,使得让第三者没法插足)。
基于此,结合上面的参数,我们就可以计算损失函数:
网络结构
hardnet的网络结构跟L2net的网络结构差不多,在所有的卷积层用padding去补充一圈0(最后一层卷积除外),以保证图像尺寸不变。这里我们没有设置池化层,因为我们发现它会降低描述符的性能。除去最后一层外,每层后面都要添加ReLU函数和BN层。在最后一个卷积层之前应该使用应该使用丢弃率为0.1的丢弃正则化。对网络的最后输出的值进行L2标准化,用以生成具有128维的单位长度的描述符。输入的32*32大小的灰度图像要进行减去均值除以标准差的操作。优化损失函数时,我们把学习速率设置为0.1,动量为0.9,权重衰减为0.0001。
模型训练
我们使用Brown数据集进行训练,这玩意由三个子集构成:Liberty、Notre Dame、Yosemite。每个子集中有40万个标准化处理后的64*64的图像块。用DOG(高斯差分金字塔)来检测每个图像块的特征点,并且通过3D模型进行验证。测试集的每一个序列有100000个匹配对和非匹配对组成。一般是在一个子集上训练描述符,另外两个子集用来测试。衡量指标是0.95召回率下的FPR(False Positive Rate)(预测错的比上所有的预测情况)。为了去说明在Brown上训练的性能,我们用FPR和FDR(False Discouvery Rate)来评价本文的描述符和其他的描述符之前的优劣,事实证明本文的方法很牛逼。
下表就是对比结果:"+"代表数据增强
Batch大小对训练结果的影响:
小batch有利于更快的收敛和更好的泛化,大batch可以更好地利用GPU。接下来以Brown数据集中的Liberty子集为训练集,使用本文的网络结构对batch分别为16、64、128、512、1024、2048的时候进行测试。结果如下,模型的性能随着batch的增加而有所提高。
描述符的评估:
以下内容均为实验,其目的只有一个就是验证本文的描述符很牛逼,具体的实验细节和指标啥的可以阅读原文中给出的参考文献,这里不再一一赘述。
在HPatches进行各描述符的对比, HPatches 上有三个互补的测试任务: patch verification,patch matching、patch retrieval,如下如所示:
其中patch verification 任务分了 SAMESEQ 和 DIFFSEQ 两个子任务。
(参与此项对比的描述符都是在Brown数据集的Liberty子集上进行的)
Ablation study(就是一种控制变量的实验方法。这部分实验内容我也不是很理解,但总之,还是在表达本文的采样策略和损失函数很牛逼)
在HPatches上,主要比较了“Hard in Batch”与“随机”、“Hard negative mining(每个epoch中的最近负样本)”,在损失Softmin、m=1时的Triplet margin loss、m=1和m=2时的Contrastive loss,上的mpv(预测样本在P-R曲线下的面积)
CPR代表描述符通道间相关性的正则项。
…………………
…………………
…………………
…………………
…………………
…………………
…………………
后面的内容基本上都是通过实验来说明本文方法的可行性,在此就不多赘述了,而且有些东西我也不是很理解,先把他的相关的参考文献看完再说吧。