HardNet 论文详解
HardNet
本文提供了相应的代码,是基于 pytorch。
主要思路
本文主要是提出了新的 loss 用于特征 metric 的学习。提出的 loss 可以最大化一个 training batch 中最近的正负样本之间的距离,而且对浅层以及深层的 CNN 网络都有作用。本文基于之前的 L2-Net 工作,把 loss 更换成本文提出的 loss,这里叫做 HardNet。
基本流程
采样和 loss
本文的目标函数模仿 SIFT 的匹配规则。采样过程如下图所示:
表示一个 training batch,其中有 个batches,有 个匹配 pair, 和 代表匹配的 patch pair。
其中 L2 距离矩阵为
对于匹配 patch pair 的描述符 和 ,距离它们各自最近的非匹配描述符,如上图所示分别为为 和 ,相关定义如下:
表示 anchor 描述符
表示 positive 描述符
表示距离 最近的非匹配描述符,其中
表示距离 最近的非匹配描述符,其中
这样对于每个匹配的 patch pair 在都可以生成一个四元组 ,然后根据情况生成相应三元组如下:
所以每个 training batch 都生成了 个三元组用于计算最后的 loss 函数,具体如下:
其中 在上面三元组构建中已经预先计算。
和 L2-Net 不同,本文没使用学习过程中间的 feature maps 进行额外的监督也没现在描述符各个维度直接的关联性,利用上面的 loss 函数没有导致 overfitting 情况。
网络架构
本文是直接采用的是L2-Net的网络结构,这里把它展开了,如下图所示:
其他关于网络结构更详细的内容,参考L2-Net
本文中实验发现使用 pooling 层降维会降低描述符性能。
输入是 灰度图,利用每个 patch 的 mean 和 标准差去归一化。
关于其他的训练超参参考论文。
试验
Brown
本文使用 Brown 数据集训练和测试。Brown 数据集包含 Liberty,Notre Dame 和 Yosemite 三个子集,每个子集包含 个 的 patches。每个子集包含 的匹配和非匹配 patch pairs 用于测试,然后在该测试集上比较 FPR95(false positive rate at 95% recall),结果如下图所示:
其中也比较了 FDR((false discovery rate),主要是被比较的文中给出该指标,这里为了公平,在该基础上计算了 FPR 进行统一比较。
其中都是在一个子集上训练然后在另外两个子集上测试,后面试验比较的话都是在 Liberty 集合上训练。
HPatches
和其他传统特征和学习特征在 HPatches 基准测试集上进行了比较,结果如下图所示:
其中上面从左到右三个分别表示 HPatches 提供的三个互补的测试任务,包括 patch verification,patch matching和patch retrieval。
其中 verification 任务分了 SAMESEQ 和 DIFFSEQ 两个子任务,表示负样本是不是来自于同一个 seq 图像序列。
其中 matching 任务分了 VIEW 和 ILLUM 两个子任务,表示视角和光线的变换因素,同时根据几何扰动的级别区分了 EASY,HARD 和 TOUGH 三个不同的 patch groups。
如果想深入了解 HPatches 基准测试集或者指标,可以参考 HPatches 工作。
还针对 patch retrieval 中的 distractors 数目(测试集中非匹配 patches 的数目)变化性能的变化实验,结果如下图所示:
上面测试用的训练集之前说明了都是在 Brown 的 Liberty 进行训练,下面更换训练集做了一些对比实验,结果如下图所示:
Wide baseline stereo
在 wide baseline stereo 数据集 W1BS 上测试,结果如下图所示:
其中 A 表示 appearance 变化,可能由于天气、季节或者遮挡引起的; G 表示 viewpoint/geometry 变化,可能由于 scale,camera 位置或者物体位置变化引起的; L 表示 illumination 的变话;S 表示 sensor 传感器的变换;map2photo 表示 satellite 图像 和 map 图像。
其中主要比较 HPatches matching 任务的性能。
但是在 patches 级别上验证并不能代表在实际使用中效果最佳,在不同的 wide baseline stereo 数据集继续对比,结果如下图所示:
其中对比的是匹配上的 image pairs 的数据和匹配上的 pairs 上平均 inliers 的数目。
关于这部分试验细节需要进一步看一下。
Image retrieval
在基于 local features 的 image retrieval 方法中验证提出的描述符的效果。
基于 Bow 方法 image retrieval 的结果如下图所示:
其中 Oxford5k 和 Paris6k 是标准 image retrieval 数据集,Oxford5k 包含 5062 张图像,Paris6k 包含 6300 张图像,两个数据集总共包含 11 个 landmarks(当然有一些负样本在),然后这 11 个 landmarks 每个包含 5 个不同的 query regions。
其中用 k-means 方法构建 1 million visual vocabulary,如果在 Oxford5k 数据集上测试,那么就在 Paris6k 数据集的描述符上学习这个 vocabulary。
其中比较的是 mAP 的精度,每个测试图像根据上面的 visual vocabulary 转成 BoW 进行 image retrieval,SV 表示空间验证,QE 表示 标注查询扩展,主要用于进一步优化 image retrieval 的查询结果。
其中 HardNet++ 版本是在所有的 Brown 和 HPatches 的数据集上进行训练,达到最优的效果。
同时还对比了基于其他方法的 image retrieval 结果如下图所示:
关于这部分试验细节需要进一步看一下。
实用指南
Batch 大小的影响
这里探讨一下 batch 大小对最终描述符性能的影响,文中提测更小的 batch 大小会使训练更好收敛以及使模型泛化性能更高。不同 batch 大小下 FPR 性能对比结果如下图所示:
采样和 loss 作用
为了进一步验证本文提出的采样方法和 loss 函数的作用,进行了一些对比实验,结果如下图所示:
其中上面的结果是在 HPatches matching 任务上测试的。
其中 Hard negative mining 在一个 epoch 上选择最近的那个非匹配负样本。
其中 CPR 表示描述符各个维度之间关联度的惩罚项。
对于 loss,从中可以看出 softmin 对所有的采用策略都能得到稳定的结果,但是在本文提出的采用策略上效果不如后面的两个 loss。主要是因为 triplet margin loss 和 contrastive loss with a large margin 在正样本和负样本上都有非零导数值。从下图可以看出 contrastive loss with a small margin,很多负样本对优化并没有起作用(导数为0,绿色区域块)。而正样本的距离小于负样本距离时,softmin 的导数也会变的很小。具体比较