Learning of descriptor detection

评估方式

特征点评估指标

精度

在角点明显的简单图形上,测试检出率,计算RMSE(均方根误差)在xy两方向上值

速度

在同样实验平台,参数阈值都手动调至最佳状态来测试

适应性(主要考察重复率)

适应性主要是针对旋转、尺度变化、视角变化(最难)、亮度、对比度、噪声等

对两张图片进行提取,以较少特征点的图片为基准,计算在另一张图片上的重复率

重复率=两张图重复点数/基准图片特征点数

均匀程度

一般的从兴趣算子提取特征点往往都集中在纹理密集的区域
基于局部信息熵的网格选择法会优化空间分布

描述子评估

在不同观察条件下对同一场景或目标进行匹配和识别,可匹配的点数(两幅图的重复率)及召回精度(匹配精度)作为评估标准

Brown数据集 [2010 PAMI]

利用三维重建的的方法获得特征点位置和匹配关系
一共包含三个数据集
指标:FPR95—— 95% 的匹配关系都正确的情况下,其中非匹配关系错误的比例。
对求出来每组patch对之间的距离从小到大排序,选取95%的匹配关系都包含在内的值作为匹配与非匹配的阈值,这阈值内的数据中会有错误的匹配对(FP),阈值外会有正确的匹配对(TN),最终的FPR=FP/(FP+TN)

ETH local features [2017 CVPR]

利用三维重建的方法来评估,主要是会在数据集的一些显著的特性上设置真值,如轨道长度、深度点个数、深度等,与真值作比较获得平均的误差比率

HPatches数据集 [2017 CVPR]

给出单应矩阵真值,反验证匹配的正确性,以此得出召回率和准确性
侧重于对局部描述子的评估,但也包括真值,成对几何变换,也可以对特征点检测进行评估

SuperPoint [CVPRW18]、SuperGlue [CVPR20]、Key.Net [ICCV19]、D2-Net [CVPR19]、R2D2 [NIPS19]等近两年成果均以此数据集测试结果作为评估标准

以pose作为评价指标

室外:YFCC100M
室内:SUN3D、ScanNet
综合:FM-Benchmark(TUM(室内、KITTI(街道)、T&T(室外)、CPC(景点))

近年来典型工作

LIFT: Learned Invariant Feature Points [ECCV16]

该文介绍了一种深度学习框架,并实现了图像特征点检测、方向估计和描述符提取,其中每一个部分都是基于卷积神经网络CNNs实现,采用了空间转换层来修正图像块得到特征点检测和方向估计。同时,使用argmax function代替传统的非极大值抑制方法,其性能由于其他在这之前已知的方法。总体结构如下:
在这里插入图片描述
SIFT提取特征点包括三个步骤: 关键点检测器检测候选特征点、方向赋值、计算128维描述子向量. 在LIFT之前的工作中, 有很多使用CNN来学习这三个步骤的算法, 然而LIFT是第一个提出将这三个网络整合到一起并提出成功的训练方法.由于从零开始训练整个网络是不可能的, 因为这三个神经网络的目的不同. 因此, 他们提出分别训练这三个网络来解决这个问题: 首先训练描述子(Descriptor), 然后是方向估计子(Orientation Estimator), 最后是特征点检测器(detector)

训练方法:
1.建立Siamese网络,训练所使用的特征点事来之SFM算法的结果,输入的是特征点所在的图像块;
2.首先训练描述符,然后用来训练方向估计,最后训练特征点检测;
3.训练是使用的图像块,并且是不同尺度。

运行时的pipeline
在这里插入图片描述
实验结果:
在这里插入图片描述
在这里插入图片描述

SuperPoint: Self-Supervised Interest Point Detection and Description [CVPRW18]

SuperPoint 是基于自监督训练的特征点检测和描述符提取方法,是2018年MagicLeap发表的一篇文章中提出的。作者还在16、17年分别发了一篇文章,三篇论文基本上可以看清作者在使用深度学习进行位姿估计这一方法上的思路演变过程。

16年Deep Image Homography Estimation:是通过端到端的方式估计一对图像的单应矩阵。训练数据集是从MS-COCO上选取图片,然后把这张图片进行单应性变换得到图象对的方式生成的。为了得到矩阵变换的置信度(比如slam中设置方差需要这些东西),作者把网络分成两部分,分别对应两种输出,一种输出单一变换结果,另一种输出多个可能的变换结果,并给出每种变换结果的置信度,实际使用时,选择置信度最高的那个。

17年Toward Geometric Deep SLAM:是针对SLAM设计的基于深度学习的特征提取方法,主要包括两部分,一是特征点提取网络MagicPoint,二是基于提取的特征点进行位姿估计的网络MagicWarp。特别指出的是,改方法不需要学习描述子,而只提取特征点位置。由于训练网络需要图片之间真实的位姿,作者设计了一个虚拟三维物体的库,通过模拟不同视角并截取相应的图片,得到了所需要的数据集。最终的结果显示MagicPoint在提取特征方面相比于传统方法更具鲁棒性,MagicWarp在位姿估计方面具有更高精度。

SuperPoint是作者经过前面两篇文章的工作,经过总结和改进得来的,方向上都是通过深度学习网络提取特征,但是思想上发生了很大转变,就是不再端到端学习位姿了,而只学习特征点和描述子。
本文一共设计了两个网络,一个是BaseDetector,用于检测角点(可以理解为候选的特征点),另一个是SuperPoint网络,输出特征点和描述子。

网络的训练共分为三个步骤:

1)第一步是采用虚拟的三维物体作为数据集,训练网络去提取角点
这里使用的就是网络Base Detector,也就是上面提到的MagicPoint,虚拟结构的角点是已知的,所以可以直接作为标注的数据集去训练网络提取角点的能力。
2)使用真实场景图片,用第一步训练出来的网络提取角点,这一步称作兴趣点自标注(Interest Point Self-Labeling)
作者使用的数据集是MS-COCO,为了使网络的泛化能力更强,在这一步,作者不仅使用原始了原始图片,而且对每张图片进行随机的旋转和缩放形成新的图片,新的图片也被用来进行识别。这一步其实就类似于目标检测的训练里常用的数据增强。
3)对第二步使用的图片进行几何变换得到新的图片,这样就有了已知位姿关系的图片对,把这两张图片输入网络,提取特征点和描述子。
这一步就是以姿态误差构建损失函数,损失函数的具体内容在网络结构那一节已经讲述了。在此多说一点,就是为了使提取的特征点能够更适合于进行位姿解算(也就是稳定性和精度更好),往往在设计网络时都会用位姿的误差去构建损失函数,这就是想要得到啥,就以啥为直接目标进行训练的意思。之前解读的GCN网络就是采用了这种方法。

SuperPoint网络结构

在这里插入图片描述
网络共分为四部分,下面分别介绍

1)编码网络
从上面的SuperPoint网络的图片我们可以看出,这本质上就是两个网络,只不过在前半部分有一些相同的结构,所以把这些相同的结构提取出来共用,合并之后就看起来像是一个网络了。这个共用的网络就是编码网络,作者选用的是一个类似于VGG的网络结构,它的作用是是对图片降维,提取特征,以减小后续网络的计算量。

2)特征点检测网络

此处的网络实际就是一个解码器,上面有编码,此处自然就需要解码。作用就是对图片的每个像素都计算一个概率,这个概率表示的就是其为特征点的可能性大小。对于一般的解码操作运算量过大的问题,作者也提出了采用子像素卷积(sub-pixel convolution)的方法降低计算量。

3)描述子检测网络

同样的,此处也是一个解码器。先学习半稠密的描述子(不使用稠密的方式是为了减少计算量和内存),然后进行双三次插值算法(bicubic interpolation)得到完整描述子,最后再使用L2标准化(L2-normalizes)得到单位长度的描述。

4)损失函数

网络分为两个分支,损失函数自然也就分为两个分支。不过为了统一进行训练,作者把两个分支的损失函数加和作为最终的损失函数来用。最终的损失函数为
在这里插入图片描述

实验结果

在这里插入图片描述
在这里插入图片描述

Key.Net: Keypoint Detection by Handcrafted and Learned CNN Filters [ICCV19]

文章介绍了一种新的关键点检测任务方法,它将手工制作和学习的CNN滤波器结合在一个浅的多尺度结构中,进行关键点检测。

贡献点:

1、提出了一个结合了手工制作和学习的CNN特征的关键点检测器。
2、提出一个新的多尺度损失和运算符,用于跨尺度检测和关键点排序稳定。
3、基于浅层架构的多尺度特征检测。
在这里插入图片描述
首先为了仿照金字塔,对原始图像降采样+高斯blur(3层scale),然后在每个scale上进行网络学习。
然后每个输入首先执行像素上的梯度的一阶导数,得到一个feature map层,然后执行像素的二阶导数得到一个feature map层。
再然后经过几层CNN层,最后上采样到原始image 大小。再然后每个scale层累加融合,得到最终的一层WH1的response map。
这个模型是在Image Net综合创建的数据上进行训练,并在Hpatch基准测试上进行评估。
loss是基于IP(索引建议)层提取的点与Ia和Ib相应窗口中实际最大坐标(NMS)之间的平方差。
在这里插入图片描述
最后的匹配结果显示,ket-net在视点变化上有很好的匹配结果,而LF-Net+HardNet在光照变化上有很好的匹配结果。

R2D2: Repeatable and Reliable Detector and Descriptor [NIPS19]

之前想的是能否只在感兴趣的区域进行特征点的提取和描述,但是这篇论文认为,显著的区域不一定是易区分的,可能带来难以描述的情况。而且描述符应该只在高置信度的区域进行匹配,所以作者的网络,在输出description和具有可重复性的kp_map的同时,还输出了每个像素的可靠度(0~1)(为描述符准备的),结构如下:
在这里插入图片描述
网络如上图所示,输出密集的本地描述子(每个像素一个)以及两个相关的可重复性和可靠性置信度Maps。 两张Maps,一个估计关键点是可重复的,另一个则估计其描述子是可分别的。 最后,关键点取自这两张图响应最大化的位置。
训练关键点检测器,采用了一种新的无监督损失函数,它鼓励了图像的重复性、稀疏性以及在图像的均匀分布。 对于局部描述子训练,它用listwise ranking loss训练,其利用基于近似平均精度(AP)的度量学习最新进展,而不是使用标准triplet or contrastive loss。我们学习一个可靠性置信度值,以预测哪些像素将具有高AP的描述子–既具有鉴别性,又具有鲁棒性,最终可以精确匹配。

举例说明一个给定图像的可重复性(第二列)和可靠性(第三列)之间的关键区别。第一幅图像中可重复的区域只位于黑色三角形附近,然而,所有包含它的patch都是同样可靠的。相比之下,棋盘格图案中的所有方块都是显著的,因此是可重复的,但由于自相似性,没有一个方块是有区别的。这两个置信度图都是由我们的网络估计的。总之,可重复性是指要确保条件改变后能够再一次检测到,可靠性偏向于易于区分,即偏向于根据描述子匹配。
在这里插入图片描述

实验:

在这里插入图片描述
MMA显示超过了Superpoint,但是如果严格按照低精度(threshold在3像素及以内)的要求来看,光照条件下并没超过superpoint。

D2-Net: A Trainable CNN for Joint Description and Detection of Local Features [CVPR19]

这篇文章借用了传统的特征点检测的思路。
之前的大多数网络,比如lift,都是先进行关键点的检测,然后确定了关键点的位置以后再进一步生成描述子,也就是detect-then-describe。而在Superpoint和GCNv2中,是将检测和描述分成了两个分支,Superpoint是用一个mask来标注匹配和未匹配的描述子,而GCNv2中,是直接构建三元组损失,就是需要根据特征点的位置挑出其对应的描述子。
而这篇文章,也是认为检测和描述应该同时进行,并且不像之前采用两个网络分支,这里只用了一个网络。具体讲,就是对一个图像通过网络以后生成HWC的特征图,那么1×1×C的特征会对应原图一个区域,也就是说这个特征是原图中的局部描述。我们可以将该特征图看作类似于SIFT等传统检测器中的DoG,也就是图像的梯度差分层。然后按照传统检测器的流程去提取特征点,此时该1×1×C的特征就是该点的描述子,然后构建loss进行训练。
在这里插入图片描述
特征点定位精度不高,速度也很慢,不过对光照等鲁棒性非常高。

创新点:

跳出了传统特征检测的范式,直接得到了det和des,从此以后很多工作都不会再专门学习一个keypoint detection去检测关键点位置尺度角度等等内容。

AdaLAM: Revisiting Handcrafted Outlier Detection [CVPR2020]

创新点:

1.基于目前已有的外点滤除算法(spatial matching),提出了现有的鲁棒快速的图像一致性空域验证算法;
2.基于一种几何假设(局部仿射),场景实用性较强;经实验验证,该算法目前达到了SOTA。

主要框架以及关键技术点:

在这里插入图片描述

总共分四步:

1.首先根据特征匹配得到密集的匹配对(所有的匹配都取top1);
2.找到置信度高且分布较好的点作为seed,并圈出一个邻域;
3.在初始匹配中通过ransac选择与该种子点在同一个区域的匹配点;
4.保留局部一致较好的匹配。

seed选择:

为每个匹配赋值一个score(score可以从ratio test的到,置信度越高score越高),然后使用类似sift提取的时候的在一定范围内使用非极大值抑制的到score最高的match point即选取为seed点。

邻域选取和filter:

令Si=(xSi1,xSi2),其中xSi1,xSi2分别表示两张图上的第i个种子匹配对,它们之间符合相似变换(即旋转+缩放,其中旋转αSi=αSi2−αSi1, 缩放为σSi=σSi2/σSi1)。那么对于任意匹配(p1,p2)=((x1,d1,σ1,α1),(x2,d2,σ2,α2))∈M,其中d表示描述子,如果上述匹配满足如下约束关系,就能够被纳入到支持种子点的匹配集合Ni⊆M中,该约束关系为:
在这里插入图片描述
上式中αp=α2−α1,σp=σ2/σ1表示两个匹配点之间的角度与尺度差异;R1与R2分别表示图像I1与I2的种子点扩散半径;λ表示邻域圈圈的覆盖程度的正则项。
上面的第一个式子表示:初始匹配中与种子点相对位置差不多且在半径在λR的匹配会加入到Ni;第二个式子告诉我们:上面加入的这些匹配对需要满足角度以及尺度一致性才能够被加入,否则免谈。上面的两个条件需要同时满足才能得到Ni。

自适应仿射校验:

假设匹配对之间符合局部仿射变换,即上述的每个Ni都满足该假设,那么接下来可利用该假设去滤除一些错误的匹配对:使用RANSAC的思想找到最小解集去拟合仿射矩阵,然后滤除置信度低的匹配对。
由于仅使用2对匹配点就可以得到仿射矩阵,那么即使对每个圈圈求仿射也并不耗时。对于第j次迭代,我们可以得到匹配关系k,对于集合Ni,我们可以从中随机选择一对匹配xk1,xk2,进而得到二者之间的仿射矩阵Aji,然后我们就可以得到匹配关系对两个匹配对产生的残差,如下式:
在这里插入图片描述
设置置信度
在这里插入图片描述

当置信度大于某个阈值,表示该模型对该匹配关系拟合的较好,视该匹配被视为内点;否则为外点。

实验:在这里插入图片描述

在这里插入图片描述

SuperGlue: Learning Feature Matching with Graph Neural Networks [CVPR20]

整个框架由两个主要模块组成:注意力GNN以及最优匹配层。其中注意力GNN将特征点以及描述子编码成为一个向量(该向量可以理解为特征匹配向量),随后利用自我注意力以及交叉注意力来回增强(重复L次)这个向量f的特征匹配性能;随后进入最优匹配层,通过计算特征匹配向量的内积得到匹配度得分矩阵,然后通过Sinkhorn算法(迭代T次)解算出最优特征分配矩阵。

注意力GNN:

作者首先从人类视觉的角度做了一些思考。我们在找匹配的时候,首先需要确立一个点的特殊性,显而易见的,需要这个点的位置和像素信息;其次,我们还可以从一个点与另一个点的相对位置关系来确定其特殊性;最后,在另一张图中的信息也可以用于判别一些难以区分的情况(人为定义信息之间的拓扑结构)。同时,我们往往会在两张图片中来回对比(迭代),将注意力集中在某些点与点的关系上(attention)。
基于以上几点,作者提出了如下图所示的网络结构。首先,作者设计了一个encoder,用于将之前提取出的点的位置和描述整合到一起,然后用图的形式将图内和图间的特征点连接起来(相当于一种信息流向的先验知识),并且在图的边上增加了可学习的权重作为attention机制,通过图网络的迭代,最后得到特征点的匹配描述子(f)。

最优匹配层:

然后作者根据这个描述子对各点的匹配进行打分(用描述子的内积,来衡量相似度),得到一个匹配得分矩阵,而由于遮挡等因素,可能会出现无匹配的情况,作者就在这个得分矩阵的最后增加了一行一列(dustbin),用于放置无匹配的特征点。
从得分矩阵到最后的分配矩阵,可以看作是一个OT问题,作者用传统的可微的Sinkhorn算法来解决。最后drop dustbin后得到分配矩阵P。

Loss:

GNN网络以及最优匹配层都是可微的,这使得反向传播训练成为可能。网络训练使用了一种监督学习的方式,即有了匹配的真值M={(i,j)}⊂A×B(如,由真值相对位姿变换得到的匹配关系),当然也可以获得一些没有匹配的特征点I⊆A以及J⊆B。当给定真值标签,就可以去最小化分配矩阵P¯¯¯¯ 负对数似然函数:
在这里插入图片描述
这个监督学习的目标是同时最大化精度以及匹配的召回率。

实验:

单应矩阵估计:
在这里插入图片描述

室内外位姿估计:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Online Invariance Selectionfor Local Feature Descriptors [ECCV20]

LISRD - Local Invariance Selection at Runtime for Descriptors
本文主要侧重点在于通过神经网络的方式在线选择不变性的局部特征。通过很少的计算量增加,该方法可以比较通用地扩展到各种检测和描述子中,极大地提升实际场景的匹配效果。

创新点:

1.使用一个网络通过多任务学习的方式学习出适应多种变化组合的描述子
2.提出了一种基于 meta descriptor 的轻量级在线选择不变性描述子的方式
3.本文提出的多任务学习变化描述子以及在线选择不变性描述子的方式,可以拓展到任何传统或者基于 learning 的描述子上,具有很强的通用性。

选择最佳不变性

在这里插入图片描述
如上图所示,在纯旋转情况下 SIFT 可以有很好的表现,但是在没有旋转时, Upright SIFT (主方向固定为 (0, 1)) 又比 SIFT 表现好。这样我们显然地希望有一个自动的机制能够选择用哪一种描述子匹配。右侧就是本算法自动选择的结果,可以看出在两种不同情况下,都取得了很好的匹配效果。

网络结构

在这里插入图片描述
网络设计参考了 SuperPoint 做了很多改进,从共享的 CNN backbone 生成 Semi dense features 后,划分成 4 个 heads 分别对应对描述子影响最大的两个因素旋转和光照的4种不同的变化组合。有了上面的方法训练4种不同的 descriptor 后,本文提出一种更好的在线选择机制使得获得更好的匹配。
Meta descriptors
首先我们将图像划分成 c × c的网格(本文中使用的是3×3),每个网格中的 descriptors 通过 NetVLAD 获得一个聚类中心作为 meta descriptors。这样对于每个划分的网格,最终获得4个 meta descriptors,这些 meta descriptors 同样也经过了 L2 normalized。
其次用软决策代替了硬决策,权重由 meta descriptors 进行计算得到,也就是相当于用 meta descriptors 作为所有 descriptors 的代表。通过 softmax 分别给每个 descriptor 设置了权重,最终的距离由4个加权和得到。
在这里插入图片描述

实验

在HPatches数据集
在这里插入图片描述
在这里插入图片描述
在DNIM数据集在这里插入图片描述

Online talk

[ECCV20] MLAD Workshop
https://www.youtube.com/watch?v=4ii0ALys6cY
https://www.youtube.com/watch?v=M-X6HX1JxYk

[CVPR20] Image Matching Workshop
https://www.youtube.com/watch?v=UQ4uJX7UDB8

[CVPR20] CVPR2020 tutorial: Local Features: From SIFT to Differentiable Methods
https://www.youtube.com/watch?v=ZscK5p9hZBI

[CVPR20] Deep Visual SLAM Frontends: SuperPoint, SuperGlue, and SuperMaps
https://www.youtube.com/watch?v=u7Yo5EtOATQ

分析总结

1.从16年的LIFT以来,深度学习在特征点提取匹配上应用已经有了大量的工作,尤其是近两年,差不多每个相关会议都能有十篇左右的相关工作。以应用的最多的评估数据集Hpatches来说,superpoint+superglue的作者团队在这一块做了很久,有多年沉淀和了解,已经可以把匹配精度做到90.7%,匹配召回率98.3%,这个指标太难超过了,后面的工作也只能在个别场景下有几个指标比过去,2D特征点这块已经比较成熟了。

2.评估测试集有,但是针对这个领域的训练集比较少,因为训练集对图片数量有比较高的要求,要包括尺度变换、光照变化、旋转等,一般有条件的团队会用自己采的数据,或者就是在各个开源数据集、workshop里面的benchmark数据各选择一部分来训,一般在论文里也都不会详细说明,普通实验室也没有条件做。

3.CVPR20的AdaLAM是一个传统的方案,但是可以超过一些深度学习的网络,传统方法的潜力还没有被完全开发。

4.大多数的工作都是将提取特征点、计算描述子、匹配用多个网络来做,减少网络数也是一个趋势。

猜你喜欢

转载自blog.csdn.net/weixin_43900210/article/details/109060183