一、概述
这是图像匹配领域中一篇比较经典的论文,由斯坦福AI lab发表于2016年CVPR。本文提出了一种利用全卷积网络直接预测dense descriptor的思路,对近两年的很多文章都有比较大的影响。
本文的贡献:
1.提出一种基于全卷积网络的密集特征提取与关联预测结构,对任意图像关联任务均适用
2.提出一种在特征空间上最近邻搜索以在线挖掘困难负例的训练方法,加快了网络收敛
3.提出一个convolutional spatial transformer模块(层)来模拟patch normalization过程
4.刷新了稀疏SFM、密集匹配、语义匹配等多个数据集的SOTA指标,并对常见的variation具有鲁棒性
本文值得关注的地方:
1.本文作者直接用caffe手撸了三个新的网络模块:convolution spatial transformer、KNN layer和channel-wise L2Norm layer(即tf.nn.l2_normalize),动手能力非常强
2.Convolution spatial transformer是针对我们目前关心的patch normalization提出一种解决方案。虽然感觉要一次学习所有patch的变换归一化,可能比ST难学很多,但也是目前所了解到的唯一一种在非patch-based方法中能对patch进行操作的解决方案了。能把一个对全图apply的operation改成convolution风格,来实现对多个图像patch apply,这一点就感觉真的很强了。
3.KNN的灵活使用:训练中通过比较某个位置(xi,yi)的特征与其在另一张图像上的最近邻之间的距离,来挖掘困难样本;预测阶段对两个dense feature提取匹配关系时,也是在特征空间上利用KNN搜索来达到O(N)的复杂度
另外需要加以区分的是,本文和之前读的一些基于特征检测和描述的方法有些区别:本文并不涉及特征检测,甚至提取的特征也并不解释为描述子。本文解决的是输入两张图像然后直接提取其各自特征,在特征空间上进行逐像素的最近邻搜索,得到预测的correspondences。这种任务就是所谓的dense correspondence。
二、方法
2015年前后出现了一些基于相似度的方法(以patch-CNN为例),这类方法旨在利用CNN直接学习一个相似度函数。其模式如下图,缺点在于对包含N个关键点的图像对,需要进行O(N^2)次两两比较。这是本文要解决的一个主要问题。
2.1整体系统设计
本文旨在设计一个通用的图像关联预测器,来同时处理不同类型的图像关联任务:稀疏特征匹配、稠密关联、语义关联等。整体流程比较清晰,用孪生网络(两个网络各层权重完全共享)接收输入图像对(A,B),分别提取出特征图,然后在特征空间找到A特征每个像素位置在特征B中的最近邻,进而实现两图像关联的预测。
具体网络结构:特征提取部分主体使用GoogLeNet(conv1 - inception_4a),然后送入convolutional spatial transformer layer,在特征空间上进行逐像素的patch normalization操作,最后将特征送入L2 norm layer,将每个像素位置的特征归一化到norm为1,便于后续比较。
下面是convolutional spatial transformer的结构示意,该模块的物理意义是模仿patch normalization环节。
2.2 训练
相比基于检测和描述的方法,本文的训练目标还算简单,直接用了contrast loss:让正对在特征空间相似,而负对远离且要大于一个margin。由于负对比较多且大多数负对的特征距离都很远,对优化没有贡献,故作者认为困难负例挖掘非常重要。作者提出了一个直观的方式:对输入图像对(A,B),对图像A特征上某个位置,在图像特征B上挖掘其对应的难负例时,可以直接找到该位置特征在图像B特征上的最近邻即可。
训练loss如下:
测试阶段也是依靠特征空间上的最近邻搜索预测出关联的。对输入图像对(A,B)分别预测得到特征,然后A的每一个特征位置只需要和B的特征计算一次最近邻即可,故测试阶段的复杂度是O(N)而不是O(N^2)。
三、实验结果
由于主要关注系统设计中的idea,对具体的任务(包括其测度)还不是很熟悉,这里就简单放几张示意图。
对于几何匹配任务:(注意图(a)中有两种关键点:FAST关键点和密集关键点,即逐像素)
对于语义关联任务:
四、问题记录:
1.论文实验部分说利用全卷积网络得到分辨率是原图1/4的特征,然后再利用插值得到密集预测的特征(这里指的是上采样回原图分辨率?)以避免稀疏匹配中存在的量化误差问题。这部分在补充材料的网络结构图并没有体现?
2.感觉还是对sparse和dense的区别没有搞得特别清楚。Dense方法是把原图每一个像素都当做关键点,然后找到其在另一张图上的最近邻吗?