一、概述
本文由Naver Lab(Naver即社交软件Line的母公司,也是韩国市值最高的互联网公司)发表于2019 NIPS上。作者的核心观点在于,近期的一些研究在提取兴趣点时往往只考虑兴趣点的可重复性(如一对匹配点在两图像score map上的响应必须很接近),但是可重复的兴趣点未必有较高的区分性,因为图像上某些区域对于匹配来说不够可靠甚至是模棱两可的,如一些重复纹理区域:摩天楼的窗户、路面等。描述子的训练应该只发生在那些对于匹配而言置信度高的区域(descriptors should be learned only in regions for which matching can be performed with high confifidence),因此要兼顾特征检测的可重复性以及特征描述的可靠性。
根据上面的观点,本文提出的网络R2D2在对图像提取出backbone特征之后,除了正常预测描述子和kpt score map(即可重复性)两个分支之外,还加了一个额外的分支用于reliability map的预测,旨在表达每个像素的匹配置信度。最终提取兴趣点时会将兴趣点score map与reliability map每个位置的乘积作为当前位置是兴趣点的概率。
二、方法
What is a good keypoint?
注意:这里用到一个不太正式的reliabilty衡量方式:在descriptor space搜索与当前keypoint最接近的keypoint,取前者的最近邻并对patch做比较。如果patch可分辨则认为是reliable
在使用类似rand homograpy产生correspondence的方法时,一个常见的问题是变换后的图像中可能会出现空白区域,这种空白区域影响了图像的pixel关系,i.e., 如果想对变换前后的图像(或者对应dense pred结果)施加pixel-level监督,那这种位置上的不对应就会影响这种监督的效果。不同论文针对该问题,提出了不同的解决方法:
本文提出了一个重要概念,descriptor reliability。
通俗地讲,描述子的reliability map类似一个mask,将某些不可靠区域(比如树叶、海浪、摩天楼窗户等区域)的描述子屏蔽掉。
关于这个网络的细节,我还有几个疑问没解决:
①在生成两个概率图之前,作者先将backbone特征做了element-wise square操作,这是为了达到什么目的?
②在生成reliability map和repeatability map时,作者的做法并不是直接回归出HxWx1的dense map然后再送入sigmoid,而是先回归到HxWx2的dense logits map然后再对该map求通道维度的softmax,然后取softmax后的第二个通道(第一个通道是unrepeatable/unreliable class,第二个通道反之)作为可重复/可靠性的概率。
问题:这种预测概率图的方法相比前一种,有什么好处?
③另外,代码中对reliability分支的预测实际上并不是按上图,而是先将特征回归到1通道,然后送入softplus得到reliability map。
问题:为什么?注意到repo作者貌似也不理解这种做法,认为是错误的写法..
关于loss与训练实现:
2.1 学习可重复性(其实就是预测kpt prob map)
作者给了一个重要的观点:预测兴趣点时使用有监督学习,相当于在让当前模型模仿另一个兴趣点检测器,这样没有办法发现潜在的更佳兴趣点。
学习detector的可重复性:对于I变换得到的I',将I'预测的prob S'利用U warp回来得到S'_U,如果满足可重复性,那么S和S'_U的各个局部最大值出现的位置应该比较相似,即enforce all local maxima in S correspond to the ones in S'U。
作者将这一优化目标简化了下:使S和S'_U之间的相似度最高,那他们的局部极大值位置也会最大程度对应。
但是实际操作时,将S' warp之后得到的S'_U可能和S并不完全对应(由于局部遮挡、warp造成的伪影和边界效果等),作者将全局相似度评估改成了对重叠滑动窗口分别评估相似度再平均,以提高这一步的鲁棒性。
另外,上面的优化目标还存在漏洞:网络可以通过预测将S和S’U map预测为相同的constant map来使得Lcosim最小。这样其实两个图都提取不出局部最大值。为了避免这种情况,作者分别为I和I’加入约束L_peaky,对每个patch如果最大值与均值之差比较小,则给予较大惩罚:
最终的repeatability loss即用重叠邻域计算的kpt 概率图相似度加上I和I’各自的peaky约束。
注意:Lrep中的邻域size N实际上决定了预测的关键点的空间频率(进而决定了关键点的数目),因为该loss使得网络倾向于为每个邻域只预测一个local maxima(为什么?)。
答:因为peaky loss迫使每个patch都具有local maxima,这决定了当N很小时,兴趣点会很密。但是当N很大时一个邻域内出现多个local maxima好像并不会被loss惩罚?
2.2 学习reliability
reliability是和repeatability联合训练的。如前文所述,reliability是利用最近邻patch和当前patch之间的相似度衡量的,不过这是一种非正式的方式。本文使用一种更正式的方式来衡量描述子的reliability,或者distinctivity:对于图像I上的某个patch pij,其reliability定义为:pij对应的描述子Xij与图像I'上所有patch的描述子逐一比较并计算出的Average Precision。
网络的一个优化目标应该是希望每个描述子都足够可靠,因此reliability loss大体应该为:
然而实际上图像每个像素并不是同等重要的。对一些不重要的区域(比如平坦的路面、海浪、树叶纹理等重复区域)优化上述LAP可能会做无用功,甚至影响优化的效果。故作者提出可以预测一个distinctive map(文中的Rij)来表达各个像素位置的重要程度,并将该map的优化和LA,P联合进行:
注上面高亮的加号写错了,应该改成减号。式中的k代表AP阈值,即当前patch的AP大于k则认为patch是可靠的。作者对于这个损失函数的解释为:对于AP>k的可靠patch,该loss会push AP最大化;相反AP<k时,loss会push该patch的可靠性尽可能小。
![](https://upload-images.jianshu.io/upload_images/14755769-90af82df4ceb8c29.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
感觉这里的符号有点混乱,比如代表的reliability,也代表的reliability,上面的loss还写错了。
问题:本文提出学习描述子的可靠性,是仅仅为了提高描述子学习的效率(不可靠区域不需要传太多梯度)还是有实质性的区别?
另外该公式,即论文中的(5)是错误的,最后那个加号应该改成减号。当时看这里产生了很大疑惑,最终还是通过查看代码发现了这个错误:
问题:从L_rep来看,reliability和repeatability好像是完全独立进行优化的,看不出两者有什么关联?这样优化能否确保学出来的兴趣点有好的匹配效果(good for matching)?
答:对于像本文这种,同时预测dense kpt prob map和dense descriptors的结构,兴趣点和描述子的预测其实是相对独立的。兴趣点检测部分的优化目标在于,在HxW图像上预测出稀疏的局部最大值位置,且这些位置能够对视角、光照等条件的变化具有不变性(repeatability)。而描述子部分的优化目标是,让HxW的每一个像素所在邻域对应的特征描述都足够有区分性(即本文暂不考虑reliability map时L_AP的优化目标)。
与此形成对比的是诸如LIFT、LFNet等patch-based方法,其特征描述部分网络只对前面的检测器检测到的兴趣点提取描述子,非兴趣点的描述子并不需要考虑。这种优化方法可以认为是将detector和descriptor两部分网络联合训练。
2.3.Inference
测试时,首先输入图像构建金字塔,然后在各个尺度分别预测、提取local maxima(利用NMS,见下面code)得到关键点,并收集关键点对应的描述子。然后计算每个描述子Xij的得分SijRij,根据得分保留top-K最佳描述子。
注意:这样得到的关键点和描述子是来自多个尺度的,最后需要把不同尺度的兴趣点坐标映射回原始尺度。否则得到的兴趣点和描述子对原图没有意义。(右下图,详见extract.py中的extract_multiscale函数)
其他idea:
在dense prediction任务的backbone中,可以利用dilated conv代替下采样模块,维持空间分辨率避免特征图变得coarse。
reliability map训练之后的作用:(绿色十字代表得分最高的兴趣点)
问题:对于一些重复结构,如建筑的窗户,R2D2是不是会完全清除掉这些区域的关键点?
作者对该问题的回有点不清晰:这类结构虽然重复,但是整体来说还是有一些区分性的。实际上我们发现,如果不是像天空、路面那样完全重复的结构,网络对一般重复性结构预测的reliability还是“quite high”。另外作者提到其中有一个以建筑为主的benchmark就包含了很多这类情况。
另外,有两位观众提到关于多模态数据的匹配问题,可能更偏向实际应用一些。比如R2D2是否可以对RGB-IR或者热成像等更具挑战的场景进行匹配,作者简单回答说喂成对的数据,应该可以..
三.实验结果
首先可以看出R2D2在效率和指标上都达到最佳。
本文核心在于将reliability和repeatability独立进行优化。下面是消融实验,作者想表达的时,repeatability与reliability并非高度关联的,预测额外的reliability对结果提升有很大帮助。
presentation:
https://www.bilibili.com/video/av84172526/