HardNet 论文详解

HardNet

本文提供了相应的代码,是基于 pytorch。

主要思路

本文主要是提出了新的 loss 用于特征 metric 的学习。提出的 loss 可以最大化一个 training batch 中最近的正负样本之间的距离,而且对浅层以及深层的 CNN 网络都有作用。本文基于之前的 L2-Net 工作,把 loss 更换成本文提出的 loss,这里叫做 HardNet。

基本流程

采样和 loss

本文的目标函数模仿 SIFT 的匹配规则。采样过程如下图所示:

HardNet 论文详解

X=(Ai,Pi)i=1..n\mathcal { X } = \left( A _ { i } , P _ { i } \right) _ { i = 1 . . n } 表示一个 training batch,其中有 2n2n 个batches,有 nn 个匹配 pair,AiA_iPiP_i 代表匹配的 patch pair。

其中 L2 距离矩阵为

D=pdist(a,p)d(ai,pj)=22aipj,i=1..n,j=1..n D = \operatorname { pdist } ( a , p ) \\ d \left( a _ { i } , p _ { j } \right) = \sqrt { 2 - 2 a _ { i } p _ { j } } , i = 1 . . n , j = 1 . . n

对于匹配 patch pair 的描述符 aia_ipip_i,距离它们各自最近的非匹配描述符,如上图所示分别为为 p4p_4a2a_2,相关定义如下:

aia_i 表示 anchor 描述符

pip_i 表示 positive 描述符

pjminp _ { j _ { m i n } } 表示距离 aia_i 最近的非匹配描述符,其中 jmin=argminj=1..n,jid(ai,pj)j _ { \min } = \arg \min _ { j = 1 . . n , j \neq i } d \left( a _ { i } , p _ { j } \right)

akmina _ { k _ { m i n } } 表示距离 pip_i 最近的非匹配描述符,其中 kmin=argmink=1..n,kid(ak,pi)k _ { \min } = \arg \min _ { k = 1 . . n , k \neq i } d \left( a _ { k } , p _ { i } \right)

这样对于每个匹配的 patch pair 在都可以生成一个四元组 (ai,pi,pjmin,akmin)(a_i,p_i,p _ { j _ { m i n } },a _ { k _ { m i n } })​,然后根据情况生成相应三元组如下:

  β={(ai,pi,pjmin)d(ai,pjmin)<d(akmin,pi)(pi,ai,akmin)otherwise \; \beta = \begin{cases} (a_i,p_i,p _ { j _ { m i n } }) & d \left( a _ { i } , p _ { j _ { m i n } } \right) < d \left( a _ { k _ { m i n } } , p _ { i } \right) \\ \left( p _ { i } , a _ { i } , a _ { k _ { m i n } } \right) & \text{otherwise} \end{cases}

所以每个 training batch 都生成了 nn 个三元组用于计算最后的 loss 函数,具体如下:

L=1ni=1,nmax(0,1+d(ai,pi)min(d(ai,pjmin),d(akmin,pi))) L = \frac { 1 } { n } \sum _ { i = 1 , n } \max \left( 0,1 + d \left( a _ { i } , p _ { i } \right) - \min \left( d \left( a _ { i } , p _ { j _ { m i n } } \right) , d \left( a _ { k _ { m i n } } , p _ { i } \right) \right) \right)

其中 min(d(ai,pjmin),d(akmin,pi)\min \left( d \left( a _ { i } , p _ { j _ { m i n } } \right) , d \left( a _ { k _ { m i n } } , p _ { i } \right)\right. 在上面三元组构建中已经预先计算。

和 L2-Net 不同,本文没使用学习过程中间的 feature maps 进行额外的监督也没现在描述符各个维度直接的关联性,利用上面的 loss 函数没有导致 overfitting 情况。

网络架构

本文是直接采用的是L2-Net的网络结构,这里把它展开了,如下图所示:

HardNet 论文详解

其他关于网络结构更详细的内容,参考L2-Net

本文中实验发现使用 pooling 层降维会降低描述符性能。

输入是 32×3232 \times 32 灰度图,利用每个 patch 的 mean 和 标准差去归一化。

关于其他的训练超参参考论文。

试验

Brown

本文使用 Brown 数据集训练和测试。Brown 数据集包含 Liberty,Notre Dame 和 Yosemite 三个子集,每个子集包含 400k400k64×6464 \times 64 的 patches。每个子集包含 100k100k 的匹配和非匹配 patch pairs 用于测试,然后在该测试集上比较 FPR95(false positive rate at 95% recall),结果如下图所示:

HardNet 论文详解

其中也比较了 FDR((false discovery rate),主要是被比较的文中给出该指标,这里为了公平,在该基础上计算了 FPR 进行统一比较。

其中都是在一个子集上训练然后在另外两个子集上测试,后面试验比较的话都是在 Liberty 集合上训练。

HPatches

和其他传统特征和学习特征在 HPatches 基准测试集上进行了比较,结果如下图所示:

HardNet 论文详解

其中上面从左到右三个分别表示 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 的数目)变化性能的变化实验,结果如下图所示:

HardNet 论文详解

上面测试用的训练集之前说明了都是在 Brown 的 Liberty 进行训练,下面更换训练集做了一些对比实验,结果如下图所示:

HardNet 论文详解

Wide baseline stereo

在 wide baseline stereo 数据集 W1BS 上测试,结果如下图所示:

HardNet 论文详解

其中 A 表示 appearance 变化,可能由于天气、季节或者遮挡引起的; G 表示 viewpoint/geometry 变化,可能由于 scale,camera 位置或者物体位置变化引起的; L 表示 illumination 的变话;S 表示 sensor 传感器的变换;map2photo 表示 satellite 图像 和 map 图像。

其中主要比较 HPatches matching 任务的性能。

但是在 patches 级别上验证并不能代表在实际使用中效果最佳,在不同的 wide baseline stereo 数据集继续对比,结果如下图所示:

HardNet 论文详解

其中对比的是匹配上的 image pairs 的数据和匹配上的 pairs 上平均 inliers 的数目。

关于这部分试验细节需要进一步看一下。

Image retrieval

在基于 local features 的 image retrieval 方法中验证提出的描述符的效果。

基于 Bow 方法 image retrieval 的结果如下图所示:

HardNet 论文详解

其中 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 结果如下图所示:

HardNet 论文详解

关于这部分试验细节需要进一步看一下。

实用指南

Batch 大小的影响

这里探讨一下 batch 大小对最终描述符性能的影响,文中提测更小的 batch 大小会使训练更好收敛以及使模型泛化性能更高。不同 batch 大小下 FPR 性能对比结果如下图所示:

HardNet 论文详解

采样和 loss 作用

为了进一步验证本文提出的采样方法和 loss 函数的作用,进行了一些对比实验,结果如下图所示:

HardNet 论文详解

其中上面的结果是在 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 的导数也会变的很小。具体比较

HardNet 论文详解