SuperGlue网络+FPN+SIFT(特征匹配)

@默然 2024-09-12 16:31:02 阅读 83

SuperGlue网络+FPN+SIFT(特征匹配)

摘要1. FPNFPN具体实现思路

2. SIFT2.1 尺度空间极值检测2.1.1 尺度空间2.1.2 高斯金字塔2.1.4 局部极值检测

2.2 精确的关键点定位2.2.1 消除边缘响应2.2.2 确定关键点(极值点)方向

2.3 关键点描述2.4 关键点匹配2.5 SIFT代码实现2.6 SIFT的特性

3. SuperGlue3.1 背景3.2 思路3.3 注意力图卷积神经网络3.4 注意力聚合3.5 最优匹配层3.5.1 分数预测3.5.2 遮挡和可见性3.5.3 Sinkhorn算法

3.6 Loss3.7 实施细节3.8 实验3.8.1 Homography estimation3.8.2 Indoor pose estimation

3.9 总结

4. 特征匹配常用数据集4.1 HPatches4.2 Roto -3604.3 ZEB4.4 ScanNet4.5 YFCC100M4.6 MegaDepth

5. 特征匹配评估指标5.1 Homography estimation(单应性估算)5.2 Relative pose estimation(相对姿态估计)5.3 Visual localization

摘要

本文主要讲解了FPN特征金字塔、SuperGlue网络、SIFT检测器的具体思路与方法。

1. FPN

文献来源:Feature Pyramid Networks for Object Detection

特征金字塔是识别系统中用于检测不同尺度的对象的基本组件。

在本文中,我们利用深度卷积网络固有的多尺度金字塔层次结构来构建具有边际额外成本的特征金字塔。一个自上而下的架构与横向连接的开发,以建立高层次的语义特征地图在所有尺度。这种架构,称为特征金字塔网络(FPN),在几个应用中作为通用特征提取器显示出显着的改进。

传统的图像金字塔采用输入多尺度图像的方式构建多尺度的特征。简单来说,就是我们输入一张图像后,我们可以通过一些手段获得多张不同尺度的图像,我们将这些不同尺度的图像的4个顶点连接起来,就可以构造出一个类似真实金字塔的一个图像金字塔。整个过程有点像是我们看一个物品由远及近的过程(近大远小原理)。 其中,中间的图像是原始图像,尺寸越来越小的图片是经过下采样处理后的结果,而尺寸越来越大的图片是经过上采样处理后的结果。这样我们可以提取到更多的有用的信息。

FPN具体实现思路

在这里插入图片描述

图a:先对原始图像构造图像金字塔,然后在图像金字塔的每一层提出不同的特征,然后进行相应的预测。优点:精度不错;缺点:计算量大得恐怖,占用内存大。

图b:通过对原始图像进行卷积和池化操作来获得不同尺寸的feature map,在图像的特征空间中构造出金字塔。因为浅层的网络更关注于细节信息,高层的网络更关注于语义信息,更有利于准确检测出目标,因此利用最后一个卷积层上的feature map来进行预测分类。优点:速度快、内存少。缺点:仅关注深层网络中最后一层的特征,却忽略了其它层的特征。

图c:同时利用低层特征和高层特征。就是首先在原始图像上面进行深度卷积,然后分别在不同的特征层上面进行预测。优点:在不同的层上面输出对应的目标,不需要经过所有的层才输出对应的目标(即对于有些目标来说,不用进行多余的前向操作),速度更快,又提高了算法的检测性能。缺点:获得的特征不鲁棒,都是一些弱特征(因为很多的特征都是从较浅的层获得的)。

图d:自下而上,自上而下,横向连接和卷积融合。(有些类似ResNet残差连接的思想)

整体过程

自下而上:先把预处理好的图片送进预训练的网络,比如像ResNet这些,这一步就是构建自下而上的网络,就是对应下图中的(1,2,3)这一组金字塔。自上而下:将层3进行一个复制变成层4,对层4进行上采样操作(就是2 * up),再用1 * 1卷积对层2进行降维处理,然后将两者对应元素相加(这里就是高低层特征的一个汇总),这样我们就得到了层5,层6以此类推,是由层5和层1进行上述操作得来的。这样就构成了自上而下网络,对应下图(4,5,6)金字塔。(其中的层2与上采样后的层4进行相加,就是横向连接的操作)卷积融合:最后我们对层4,5,6分别来一个3 * 3卷积操作得到最终的预测(对应下图的predict)。

在这里插入图片描述

2. SIFT

文献来源:Distinctive Image Features from Scale-Invariant Keypoints

本文提出了一种从图像中提取独特的不变特征(不管图像如何扭曲、旋转、模糊,特征均不会发生改变)的方法,这些特征可用于在对象或场景的不同视图之间执行可靠的匹配。并提供强大的匹配在相当大的范围内的仿射失真,在3D视点的变化,除了噪声,和照明的变化。这些特征是高度独特的,在这个意义上,单个特征可以以高概率与来自许多图像的大型特征数据库正确匹配。

本文介绍了图像特征,具有许多属性,使它们适合于匹配不同的图像的对象或场景。该特征对图像的缩放和旋转具有不变性,对光照和3D摄像机视点的变化具有部分不变性。它们在空间和频率域都有很好的局部化,降低了被遮挡、杂波或噪声破坏的可能性。 通过有效的算法可以从典型图像中提取大量的特征。此外,这些特征具有高度的独特性,这使得单个特征能够以高概率与大型特征数据库正确匹配,为对象和场景识别提供了基础。

提取这些特征的成本通过采用 级联过滤方法 来最小化,在该方法中,仅在通过初始测试的位置处应用更昂贵的操作。以下是用于生成图像特征集的主要计算阶段:

尺度空间极值检测:计算的第一阶段 搜索所有尺度和图像位置。它是通过使用高斯差分函数来有效地实现的,以识别对尺度和方向不变的潜在兴趣点。关键点定位:在每个 候选位置(对尺度和方向不变的潜在兴趣点),一个详细的模型是适合确定位置和规模,关键点的选择基于其稳定性的度量。方向分配:基于局部图像梯度方向将一个或多个方向分配给每个关键点位置。所有未来的操作都是在已经相对于每个特征的指定方向、比例和位置进行了变换的图像数据上执行的,从而为这些变换提供了不变性。关键点描述符:局部图像梯度在每个关键点周围的区域中以选定的尺度测量。这些被转换成一个表示,允许显着水平的局部形状失真和照明的变化。

这种方法的一个重要方面是,它生成了大量的特征,这些特征密集地覆盖了图像的所有尺度和位置。一个典型的500×500像素的图像将产生大约2000个稳定的特征(尽管这个数字取决于图像内容和各种参数的选择)。特征的数量对于目标识别来说特别重要,其中在杂乱背景中检测小目标的能力要求每个目标至少3个特征被正确匹配以进行可靠的识别。

关键点描述符是高度独特的,这允许单个特征在大型特征数据库中以良好的概率找到其正确的匹配。然而,在杂乱的图像中,来自背景的许多特征在数据库中将没有任何正确的匹配,从而除了正确的匹配之外还产生许多错误的匹配。通过识别在新图像中与对象及其位置、尺度和方向一致的关键点子集,可以从完整的匹配集中过滤出正确的匹配。

2.1 尺度空间极值检测

使用级联过滤方法检测关键点, 关键点检测的第一阶段是识别可以在同一对象的不同视图下重复分配的位置和尺度。可以通过使用称为尺度空间的 连续尺度函数 在所有可能的尺度上搜索稳定特征来检测对图像尺度变化不变的位置。

2.1.1 尺度空间

尺度空间(Scale Space)是图像处理和计算机视觉中的一个概念,它指的是在不同尺度或分辨率上表示同一图像的集合。 尺度空间理论提供了一种系统的方法来分析图像在不同尺度上的特征,这在许多视觉任务中非常有用,如边缘检测、特征提取、图像分割和物体识别等。

图像的尺度是指图像内容的粗细程度。 尺度的概念是用来模拟观察者距离物体的远近的程度。 具体来说,观察者距离物体远,看到物体可能只有大概的轮廓;观察者距离物体近,更可能看到物体的细节,比如纹理,表面的粗糙等等。从频域的角度来说,图像的粗细程度代表的频域信息的低频成分和高频成分。 粗质图像代表信息大部分都集中在低频段,仅有少量的高频信息。细致图像代表信息成分丰富,高低频段的信息都有。

尺度空间的主要特点:

多尺度表示:尺度空间中的每个图像都是原始图像在不同尺度上的版本。这些尺度通常是通过图像的高斯模糊来实现的,其中模糊的程度决定了尺度的大小。连续性:理想情况下,尺度空间是连续的,意味着可以在任意尺度上观察图像。 在实际应用中,由于计算限制,尺度空间通常是离散的,即在一系列固定的尺度上进行分析。高斯金字塔:尺度空间通常通过构建 高斯金字塔 来实现,这是一种多尺度图像表示,其中每一层都是上一层的高斯模糊版本。尺度不变性:尺度空间理论允许在不同尺度上检测和分析图像特征,这有助于实现尺度不变性,即特征检测不受图像尺度变化的影响。多尺度特征:在尺度空间中,可以在多个尺度上提取特征,这有助于捕捉不同大小的物体或模式。应用:尺度空间在许多计算机视觉任务中都有应用,包括但不限于:

边缘检测:在尺度空间中检测图像的边缘。特征提取:如SIFT(尺度不变特征变换)和SURF(加速稳健特征)算法。物体识别:在不同尺度上搜索和识别物体。运动估计:在视频序列中估计运动。

2.1.2 高斯金字塔

参考:高斯金字塔、 图像金字塔、高斯金字塔、拉普拉斯金字塔是怎么回事?附利用拉普拉斯金字塔和高斯金字塔重构原图的Python-OpenCV代码

高斯金字塔模仿的是图像的不同的尺度

那么尺度应该怎样理解?

对于一副图像,你近距离观察图像,与你在一米之外观察,看到的图像效果是不同的,前者比较清晰,后者比较模糊,前者比较大,后者比较小,通过前者能看到图像的一些细节信息,通过后者能看到图像的一些轮廓的信息,这就是图像的尺度,图像的尺度是自然存在的,并不是人为创造的。

其实以前对一幅图像的处理还是比较单调的,因为我们的关注点只落在二维空间,并没有考虑到“图像的纵深”这样一个概念,如果将这些内容考虑进去我们是不是会得到更多以前在二维空间中没有得到的信息呢?于是高斯金字塔横空出世了,它就是为了在二维图像的基础之上,榨取出图像中自然存在的另一个维度:尺度。因为高斯核是唯一的线性核,也就是说使用高斯核对图像模糊不会引入其他噪声,因此就选用了高斯核来构建图像的尺度。

高斯金字塔的构建步骤

首先将图像扩大一倍,在扩大的图像的基础之上构建高斯金字塔对该尺寸下图像进行高斯模糊,几幅模糊之后的图像集合构成了一个八度对该八度下的最模糊的一幅图像进行下采样的过程,长和宽分别缩短一倍,图像面积变为原来四分之一。这幅图像就是下一个八度的初始图像,在初始图像图像的基础上完成属于这个八度的高斯模糊处理,以此类推完成整个算法所需要的所有八度(octave)构建,这样这个高斯金字塔就构建出来了

构建出的金字塔如下图所示:

在这里插入图片描述

在这里插入图片描述

一般情况下,高斯金字塔的最底层为原图像,每向上一层就会通过高斯模糊滤波+下采样缩小一次图像的尺寸。通常情况下,图像的长与宽会缩小为原来的一半,由于每次图像的长与宽都缩小为原来的一半,图像的缩小速度非常快,因此常见的高斯金字塔的层数为3~6。

因此,该论文中图像的尺度空间被定义为函数 L(x, y,σ),它是由可变尺度高斯函数 G(x, y,σ) 与输入图像的卷积产生的, I(x,y):

在这里插入图片描述

其中 ∗ 是 x 和 y 中的卷积运算,并且

在这里插入图片描述

在二维空间中,这个公式生成的曲面的等高线是从中心开始呈正态分布的同心圆,如图所示。分布不为零的像素组成的卷积矩阵与原始图像做变换。每个像素的值都是周围相邻像素值的加权平均。原始像素的值有最大的高斯分布值,所以有最大的权重,相邻像素随着距离原始像素越来越远,其权重也越来越小。这样进行模糊处理比其它的均衡模糊滤波器更高地保留了边缘效果。

其中 σ 是尺度空间因子,值越小表示图像被平滑的越少,相应的尺度也就越小。大尺度对应于图像的概貌特征,小尺度对应于图像的细节特征。

在这里插入图片描述

为了有效地检测尺度空间中的稳定关键点位置,作者提出在与图像卷积的高斯差分函数中使用尺度空间极值,D(x, y,σ),可以根据差异计算,由常数乘法因子 k 分隔的两个邻近尺度的:

在这里插入图片描述

选择此方法的原因有很多。 首先,它是一个计算特别高效的函数,因为在任何情况下都需要计算平滑图像 L 以进行尺度空间特征描述,因此可以通过简单的图像减法来计算 D。

在这里插入图片描述

2.1.4 局部极值检测

通过对不同尺度之间的差分后,得到如下尺度差分空间:

在这里插入图片描述

为了检测 D(x, y,σ) 的局部最大值和最小值,每个样本点与其当前图像中的八个邻居以及上下比例中的九个邻居进行比较(见上图)。 仅当它大于所有这些邻居或小于所有这些邻居时才选择它

这可以通过考虑黑色背景上的白色圆圈来看出,该圆圈将具有单个尺度空间最大值,其中高斯差函数的圆形正中心区域与圆圈的大小和位置相匹配。 对于拉长的椭圆,在椭圆的每一端附近都会有两个最大值。 由于最大值的位置是图像的连续函数,因此对于某些具有中间伸长率的椭圆,将会出现从单个最大值到两个最大值的过渡,并且最大值在过渡附近彼此任意接近。

在这里插入图片描述

事实证明,不存在能够检测所有极值的最小样本间距,因为极值可以任意靠近

因此,作者寻求了一种在效率和完整性之间进行权衡的解决方案:规模抽样频率

使极值稳定性最大化的采样频率的实验确定如图 3 和 4。这些图(以及本文中的大多数其他模拟)基于匹配任务,使用从不同范围绘制的 32 张真实图像的集合,包括户外场景、人脸、航空照片和工业图像(图像 发现域对任何结果几乎没有影响)。 然后对每个图像进行一系列变换,包括旋转、缩放、仿射拉伸、亮度和对比度的变化以及图像噪声的添加。 由于这些变化是合成的,因此可以精确预测原始图像中的每个特征应出现在变换后的图像中的位置,从而可以测量每个特征的正确重复性和位置精度。

在这里插入图片描述

上图显示了这些模拟结果,用于检查在极值检测之前改变图像函数采样的每倍频程的尺度数量的影响。 在这种情况下,每个图像在旋转随机角度并按原始尺寸 0.2 到 0.9 倍之间的随机量缩放后重新采样。 将降低分辨率的图像中的关键点与原始图像中的关键点进行匹配,以便所有关键点的比例都将出现在匹配的图像中。 此外,还添加了 1% 的图像噪声,这意味着每个像素都有一个从统一区间 [−0.01, 0.01] 添加的随机数,其中像素值在 [0, 1] 范围内(相当于提供略小于 6 位的 图像像素的准确性)。

第一张图的顶行显示了在变换图像中相同位置和尺度处可重复检测到的关键点的百分比,作为每倍频程采样的尺度数量的函数。 下面的线显示其描述符与大型数据库正确匹配的关键点的百分比。 第二张图显示了典型图像中检测到的关键点总数与比例样本数量的函数关系。

第二张图显示了这一点,该图显示了每幅图像中检测到并正确匹配的关键点的平均数量。 随着尺度采样的增加,关键点的数量增加,正确匹配的总数也增加。 由于对象识别的成功通常更多地取决于正确匹配的关键点的数量,而不是正确匹配的百分比,因此对于许多应用来说,使用更大数量的尺度样本将是最佳的。

2.2 精确的关键点定位

一旦通过将像素与其相邻像素进行比较找到了关键点候选者,下一步就是对附近的数据进行详细的拟合,以获得位置、尺度和主曲率比。允许舍弃具有低对比度(并且因此对噪声敏感)或沿边缘沿着定位不良的点。 但当我们检测到候选关键点之后,会发现一个问题,这个点并不一定是极值点,高斯差分金字塔是离散的(因为尺度空间和像素点都是离散的),所以找到的极值点不太准确的,很大可能在真正极值点附近,如下图所示:

在这里插入图片描述

这种方法的最初实现只是将关键点定位在中心样本点的位置和规模上。

更正极值点

Brown开发了一种方法,用于将3D二次函数拟合到局部样本点以确定最大值的内插位置,并且他的实验表明,这提供了对匹配和稳定性的实质性改进。为了找到更高亚像素位置精度的极值点,他的方法使用了尺度空间函数D(x,y,σ)的泰勒展开(直到二次项)

在这里插入图片描述

其中,D及其导数在采样点处进行评估,

x

=

(

x

y

σ

)

T

x =(x,y,σ)^T

x=(x,y,σ)T是从该点的偏移。极值的位置该函数导数为0的点

在这里插入图片描述

通过使用相邻样本点的差来近似D的Hessian和导数。由此产生的3×3线性系统可以以最小的代价求解。如果在任何维度上,偏移

x

^

\hat{x}

x^ 大于0.5,则意味着极值更靠近不同的采样点。

在这种情况下,采样点被改变,并且替代地关于该点执行插值。将最终偏移

x

^

\hat{x}

x^ 添加到其样本点的位置,以获得极值位置的内插估计。在极值处的函数值

D

(

x

^

)

D(\hat{x})

D(x^)对于拒绝具有低对比度的不稳定极值是有用的。

在这里插入图片描述

将过小的极值舍弃掉(如前所述,我们假设图像像素值在[0,1]范围内)。 下图显示了在自然图像上选择关键点的效果。为了避免太多的混乱,使用低分辨率的233 × 189像素图像,并且关键点被示出为给出每个关键点的位置、比例和方向的矢量(下面描述方向分配)。

下图(a)示出了原始图像,其在随后的图后面以降低的对比度示出。

下图(b)示出了在高斯差分函数的所有检测到的最大值和最小值处的832个关键点,

而(c)示出了在去除具有小于0.03的

D

(

x

^

)

D(\hat{x})

D(x^)值的那些关键点之后剩余的729个关键点。

在这里插入图片描述

2.2.1 消除边缘响应

本质上要去掉DoG局部曲率非常不对称的像素。

为了稳定性,仅仅舍弃低对比度的关键点是不够的。 即使沿边缘的位置很难确定,高斯差分函数也会沿边缘产生强烈的响应。 高斯差分函数中定义不明确的峰值将在边缘上具有较大的主曲率,但在垂直方向上具有较小的主曲率。 主曲率可以根据 2×2 Hessian 矩阵 H 计算,该矩阵在关键点的位置和比例处计算:

在这里插入图片描述

通过相邻样本点的差异来估计导数。 H 的特征值与 D 的主曲率成正比。我们可以避免显式计算特征值,因为我们只关心它们的比率。 设 α 为幅值最大的特征值,β 为较小的特征值。 然后,我们可以计算 H 迹的特征值之和及其行列式的乘积:

令 r 为最大幅值特征值与较小特征值之比,因此 α = rβ。

在这里插入图片描述

要检查主曲率之比是否低于某个阈值 r,我们只需要检查。这计算起来非常高效,测试每个关键点所需的浮点运算少于 20 次。 本文的实验使用 r = 10 的值,它消除了主曲率之比大于10的关键点。

2.2.2 确定关键点(极值点)方向

通过尺度不变性求极值点,需要利用图像的局部特征为给每一个关键点分配一个基准方向,使描述子对图像旋转具有不变性。对于在DOG金字塔中检测出的关键点,采集其所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。梯度的模值和方向如下:其中m(x,y)表示梯度幅度和θ(x,y)表示方向:

在这里插入图片描述

本算法采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点确定关键点方向。 在完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向。梯度直方图将0~360度的方向范围分为36个柱,其中每柱10度。如下图所示,直方图的峰值方向代表了关键点的主方向,方向直方图的峰值则代表了该特征点处邻域梯度的方向,以直方图中最大值作为该关键点的主方向。 为了增强匹配的鲁棒性,只保留峰值大于主方向峰值80%的方向作为该关键点的辅方向。

在这里插入图片描述

统计以特征点为圆心,以该特征点所在的高斯图像的尺度的1.5倍为半径的圆内的所有的像素的梯度方向及其梯度幅值,并做1.5σ的高斯滤波(高斯加权,离圆心也就是关键点近的幅值所占权重较高).

2.3 关键点描述

前面的操作已经为每个关键点指定了图像位置、比例和方向。这些参数施加了可重复的局部2D坐标系,在该坐标系中描述局部图像区域,并且因此为这些参数提供了不变性。下一步是计算局部图像区域的描述符,该描述符是高度独特的,但对于剩余的变化(例如照明或3D视点的变化)尽可能不变。

一种明显的方法是以适当的尺度对关键点周围的局部图像强度进行采样,并使用归一化的相关性度量来匹配这些强度。然而,图像块的简单相关性对引起样本配准不良的变化(诸如仿射或3D视点变化或非刚性变形)高度敏感。

Edelman等人(1997年)证明了一种更好的方法。他们提出的表示是 基于生物视觉模型,特别是初级视觉皮层中的复杂神经元。这些复杂的神经元对特定方向和空间频率的梯度做出反应,但视网膜上梯度的位置可以在小的感受野上移动,而不是精确定位。

Edelman等人假设这些复杂神经元的功能是允许从一系列视角匹配和识别3D对象。他们使用物体和动物形状的3D计算机模型进行了详细的实验,这些实验表明,在3D旋转下,匹配梯度同时允许其位置偏移会导致更好的分类。例如,对于深度旋转20度的3D对象,识别准确率从梯度相关的35%提高到使用复杂细胞模型的94%。

关键点描述符的计算

在关键点位置周围对图像梯度幅度和方向进行采样,使用关键点的比例来选择图像的高斯模糊级别。为了实现方向不变性,描述符的坐标和梯度方向相对于关键点方向旋转。为了提高效率,预先计算金字塔所有级别的梯度。这些在下图的左侧的每个采样位置处用小箭头示出。右侧则表示每个箭头的长度对应于区域内该方向附近的梯度幅度之和。如下图所示:

在这里插入图片描述

关键点描述符显示在上图的右侧。它允许通过在4 × 4样本区域上创建方向直方图来显著移动梯度位置。该图显示了每个方向直方图的八个方向,每个箭头的长度对应于该直方图条目的大小。左边的梯度样本可以移动多达4个样本位置,同时仍然对右边的相同直方图有贡献,从而实现允许更大的局部位置移动的目标。本文中的实验对每个关键点使用4 × 4 × 8 = 128个元素的特征向量。最后,修改特征向量以减少光照变化的影响。

2.4 关键点匹配

每个关键点的最佳候选匹配是通过从训练图像中识别关键点数据库中的最近邻居来找到的。最近邻被定义为具有 最小欧几里得距离 的不变描述符向量的关键点。

然而,来自图像的许多特征在训练数据库中将不具有任何正确的匹配,因为它们来自背景杂波或者在训练图像中未被检测到。

通过比较最近邻居与次最近邻居的距离来获得更有效的度量。如果同一个物体有多个训练图像,那么我们将第二个最近的邻居定义为已知来自不同物体的最近邻居

最近邻索引

分别对模板图(参考图,reference image)和实时图(观测图,observation image)建立关键点描述子集合。目标的识别是通过两点集内关键点描述子的比对来完成。具有128维的关键点描述子的相似性度量采用欧式距离。匹配可采取穷举法完成,但所花费的时间太多。所以一般采用kd树的数据结构来完成搜索。搜索的内容是以目标图像的关键点为基准,搜索与目标图像的特征点最邻近的原图像特征点和次邻近的原图像特征点。Kd树是个平衡二叉树。

2.5 SIFT代码实现

import cv2

import numpy as np

import matplotlib.pyplot as plt

#1、读取图像

img=cv2.imread('cat.jpg')

cat=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#2、sift关键点检测

#sift实例化对象

sift=cv2.xfeatures2d.SIFT_create()

# 2.2关键点检测:kp关键点信息包括方向,尺度,位置信息,des是关键点的描述符

kp,des=sift.detectAndCompute(cat,None)

# 2.3在图像上绘制关键点的检测结果

cv2.drawKeypoints(img,kp,img,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

#3图像显示

plt.figure(figsize=(8,6),dpi=100)

plt.imshow(img[:,:,::-1]),plt.title('sift')

plt.xticks([]),plt.yticks([])

plt.show()

在这里插入图片描述

2.6 SIFT的特性

旋转、缩放、平移不变性解决图像仿射变换,投影变换的关键的匹配光照影响小目标遮挡影响小噪声景物影响小

3. SuperGlue

文献来源:SuperGlue: Learning Feature Matching with Graph Neural Networks

本文提出了一种能够同时进行特征匹配以及滤除外点的网络。其中特征匹配是通过求解可微分最优化转移问题( optimal transport problem)来解决,损失函数由GNN来构建;本文基于注意力机制提出了一种灵活的内容聚合机制,这使得SuperGlue能够同时感知潜在的3D场景以及进行特征匹配。

在本文中,作者使用一种名为 SuperGlue 的新型神经架构从预先存在的局部特征中学习匹配过程。

在这里插入图片描述

从现成的局部特征建立逐点对应:它充当手工制作或学习的前端和后端之间的中间端。 SuperGlue 使用图神经网络和注意力来解决分配优化问题,并有效地处理部分点可见性和遮挡,产生部分分配。

3.1 背景

图像匹配问题中,可以利用世界的一些规律:3D 世界很大程度上是平滑的,有时是平面的,如果场景是静态的,则给定图像对的所有对应都源自单个对极变换。 此外,2D 关键点通常是显着 3D 点的投影,例如角点或斑点,因此图像之间的对应关系必须遵守某些物理约束:

一个关键点在另一张图像中最多只能有一个对应关系由于探测器的遮挡和故障,一些关键点将无法匹配。 有效的特征匹配模型应旨在找到相同 3D 点的重投影之间的所有对应关系并识别没有匹配的关键点。

3.2 思路

考虑两个图像 A 和 B,每个图像都有一组关键点位置 p 和相关的视觉描述符 d ,我们将它们联合 (p, d) 称为局部特征。 位置由 x 和 y 图像坐标以及检测置信度 c,

p

i

:

=

(

x

,

y

,

c

)

i

p_i := (x, y, c)_i

pi​:=(x,y,c)i​ 组成。 视觉描述符

d

i

R

D

d_i ∈ R^D

di​∈RD 可以由像 SuperPoint 这样的 CNN 提取或传统描述符(如 SIFT)提取的描述符。

3.3 注意力图卷积神经网络

除了关键点的位置及其视觉外观之外,整合其他上下文线索可以直观地增加其独特性。 例如,我们可以 考虑它与其他共同可见的关键点的空间和视觉关系。 另一方面,第二图像中关键点的知识可以通过 比较候选匹配或根据全局和明确的线索估计相对光度或几何变换来帮助解决歧义。

当被要求匹配给定的模糊关键点时,人类会来回查看两个图像:他们筛选试探性匹配的关键点,检查每个关键点,并寻找有助于区分真正匹配与其他自相似性的上下文线索。 这暗示着一个迭代过程,可以将注意力集中在特定位置。 因此,SuperGlue 的第一个主要模块设计为注意力图神经网络(如下图)。

在这里插入图片描述

每个关键点

i

i

i 的初始表示

x

i

x_i

xi​ 结合了其视觉外观和位置。 我们使用多层感知器(MLP)将关键点位置嵌入到高维向量中,如下所示:

在这里插入图片描述

在这里插入图片描述

考虑到一个完整的图,其节点是两个图像的关键点。 该图有两种类型的无向边——它是一个多重图,如下图所示。

在这里插入图片描述

self 图内的边将关键点 i 连接到同一图内的所有其他关键点。 cross图将关键点 i 连接到其他图像中的所有关键点。 我们使用消息传递公式沿着两种类型的边传播信息。 由此产生的多重图神经网络从每个节点的高维状态开始,并通过同时聚合所有节点的所有给定边上的消息来在每一层计算更新的表示。

在这里插入图片描述

图像 A 中第 l 层元素 i 的表示。 消息

m

ε

i

m_{\varepsilon\longrightarrow i}

mε⟶i​ 是所有关键点 {j : (i, j) ∈

ε

\varepsilon

ε} 聚合的结果,其中

ε

\varepsilon

ε ∈ {

ε

s

e

l

f

\varepsilon_{self}

εself​,

ε

c

r

o

s

s

\varepsilon_{cross}

εcross​}。 A 中所有 i 的剩余消息传递更新为:

在这里插入图片描述

其中 [· || ·]表示串联。 可以 图像 B 中的所有关键点同时执行类似的更新。具有不同参数的固定数量的层 L 被链接起来,并且沿着自边缘和交叉边缘交替聚合。 因此,从

l

l

l = 1 开始,如果

l

l

l 为奇数,则

ε

=

ε

s

e

l

f

\varepsilon = \varepsilon_{self}

ε=εself​;如果

l

l

l 为偶数,则

ε

=

ε

c

r

o

s

s

\varepsilon = \varepsilon_{cross}

ε=εcross​。

3.4 注意力聚合

注意力聚合:注意力机制执行聚合并计算消息

m

ε

i

m_\varepsilon→i

mε​→i。 自边缘基于自注意力,交叉边缘基于交叉注意力。 类似于数据库检索,i 的表示形式(查询

q

i

q_i

qi​)根据元素的属性(键

k

j

k_j

kj​)检索某些元素的值

v

j

v_j

vj​。 该消息被计算为值的加权平均值:

在这里插入图片描述

其中:

在这里插入图片描述

考虑到查询关键点 i 在图像 Q 中并且所有源关键点在图像 S 中,

(

Q

,

S

)

A

,

B

2

(Q,S) ∈ {A,B}^2

(Q,S)∈A,B2,我们可以写:

在这里插入图片描述

每层

l

l

l 都有自己的投影参数,为两个图像的所有关键点学习和共享。SuperGlue 可以根据外观和关键点位置进行检索或参与,因为它们被编码在表示

x

i

x_i

xi​ 中。 这包括关注附近的关键点并检索相似或显着关键点的相对位置。

在这里插入图片描述

自注意力(顶部)可以出现在同一图像中的任何位置,例如 独特的位置,因此不限于附近的位置。 交叉注意力(底部)关注另一张图像中的位置,例如具有相似外观的潜在匹配项。

在这里插入图片描述

3.5 最优匹配层

SuperGlue 的第二个主要块是最佳匹配层,它生成部分分配矩阵。 与标准图匹配公式一样,可以通过计算所有可能匹配的得分矩阵

S

R

M

×

N

S ∈ R^{M×N}

S∈RM×N 并最大化总得分来获得分配P。这等价于解决一个线性分配问题。

3.5.1 分数预测

为所有 M×N 潜在匹配建立单独的表示是令人望而却步的。 相反,我们将成对分数表示为匹配描述符的相似度,其中 <·,·> 是内积。:

在这里插入图片描述

与学习的视觉描述符相反,匹配描述符没有标准化,并且 它们的大小可以根据特征以及在训练期间改变以反映预测置信度

3.5.2 遮挡和可见性

为了让网络抑制某些关键点,我们用 “垃圾箱” 扩充每个集合,以便将不匹配的关键点显式分配给它。 这种技术在图形匹配中很常见,SuperPoint也使用 “垃圾箱” 来解释可能没有检测到的图像单元。 我们通过附加新的行和列(点到箱和箱到箱的得分)将得分

S

S

S 增加到

S

S^-

S−,并填充单个可学习参数:

在这里插入图片描述

3.5.3 Sinkhorn算法

上述优化问题的解决方案对应于具有得分 S¯ 的离散分布 a 和 b 之间的最优传输。其熵正则化公式自然地导致了所需的软分配,并可以在GPU上使用Sinkhorn算法高效地解决。它是匈牙利算法的一个可微版本,传统上用于二部匹配,该算法包括沿行和列迭代地标准化exp(S¯),与行和列Softmax类似。经过T次迭代后,我们删除垃圾桶并恢复P。

3.6 Loss

通过设计,图神经网络和最佳匹配层都是可区分的-这使得从匹配到视觉描述符的反向传播成为可能。SuperGlue以监督的方式从地面真实匹配

在这里插入图片描述

进行训练。这些是从地面实况相对变换估计的-使用姿势和深度图或单应性。这也允许我们将一些关键点

在这里插入图片描述

在这里插入图片描述

标记为不匹配,如果它们在其附近没有任何重投影。给定这些标签,我们最小化分配的负对数似然

在这里插入图片描述

在这里插入图片描述

这种监督的目的是同时最大化匹配的精确度和召回率。

3.7 实施细节

SuperGlue可以与任何局部特征检测器和描述符结合使用,但与SuperPoint 配合使用效果特别好,它可以产生可重复和稀疏的关键点-实现非常有效的匹配

所有中间表示(键、查询值、描述符)都具有与SuperPoint描述符相同的维度D = 256。我们使用L = 9层交替的多头自我和交叉注意力,每层4个头,并执行T = 100次Sinkhorn迭代。为了允许数据扩充,SuperPoint检测和描述步骤在训练期间作为批处理实时执行。为了有效的搜索和增加的鲁棒性,还添加了许多随机关键点。

3.8 实验

3.8.1 Homography estimation

作者使用真实的图像和具有鲁棒性(RANSAC)和非鲁棒性(DLT)估计器的合成单应性进行大规模单应性估计实验。

在这里插入图片描述

SuperGlue可恢复几乎所有可能的匹配,同时抑制大多数异常值。SuperGlue有足够的表现力来掌握单应性,达到98%的召回率和高精度。

3.8.2 Indoor pose estimation

使用ScanNet大型室内数据集

在这里插入图片描述

我们报告了姿势误差的AUC、匹配分数(MS)和精度(P),全部以百分比表示。SuperGlue在应用于SIFT和SuperPoint时优于所有手工制作和学习的匹配器。

SuperGlue使用SIFT或SuperPoint局部特征,并持续大幅提高OANet(一种最先进的离群值拒绝神经网络)的姿态精度。

在这里插入图片描述

SuperGlue可以实现更高的姿势准确度,并且与SIFT和SuperPoint都能很好地配合使用。它比其他学习匹配器具有更高的精度,证明了其更高的表示能力。

3.9 总结

本文展示了基于注意力的图神经网络在局部特征匹配方面的强大功能。SuperGlue的架构使用了两种注意力:

自我注意力,它增强了局部描述符的接受域;交叉注意力,它实现了跨图像通信,并受到人类在匹配图像时来回观看的方式的启发

作者的方法地处理部分分配和闭塞点,通过解决最优运输问题。我们的实验表明,SuperGlue实现了显着的改进。

4. 特征匹配常用数据集

4.1 HPatches

HPatches 基准测试是图像匹配工作的重要标准。它包括116个场景序列,通过视点和亮度的波动来区分。在每个场景中,有5对图像,其中首个图像用作参考点,并且序列中的后续图像的复杂性逐渐增强。该数据集被分为两个不同的域:视点,包括由实质性视点改变标记的59个序列;以及照明,包括由照明的实质性变化标记的57个序列,跨越自然和人工亮度条件。在每个测试序列中,一个参考图像与其余五个图像配对。值得注意的是,根据D2 Net的评测方法,通常采用视点变化显著的56个序列和光照变化显著的52个序列来评测网络的性能。从SuperPoint 开始,HPatches数据集也被用于评估单应性估计任务中的局部描述符的性能。

4.2 Roto -360

Roto −360 [113]是一个由360个图像对组成的评估数据集。这些对的特点是在一个平面内旋转,范围从0 °到350 °,间隔10 °。 该数据集是通过随机选择和旋转10个HPatches图像生成的,这使得它在旋转不变性方面对评估描述符性能很有价值。

4.3 ZEB

ZEB 推出了一个创新的零拍摄评估基准,精心设计,以解决跨不同领域的图像匹配泛化的挑战。 它协调了来自八个真实世界和四个模拟数据集的数据,封装了广泛的图像分辨率,环境条件和视角。这一融合最终形成了一个强大的基准测试,其中包含46,000个评估图像对,这些图像对涵盖了五个不同的图像重叠率,范围从10%到50%,通过可验证的地面真实姿势和深度图来确定。ZEB的全面和广泛的数据集在范围和多样性方面是无与伦比的,明显超过了流行方法中使用的传统1500个域内图像对,代表了图像匹配模型跨域泛化能力评估的巨大进步。凭借其严格的装配,ZEB不仅阐明了现有特定领域模型在不受控制的场景中的泛化差异,而且还建立了一个衡量图像匹配算法对现实世界逆境的弹性和通用性的新基准。

4.4 ScanNet

ScanNet 是一个大型室内数据集,具有明确定义的训练、验证和测试分割,包含来自 1613 个场景的约 2.3 亿个明确定义的图像对。 与 Hpatches 数据集相比,该数据集包含地面真实图像和深度图像,并且包含更多具有重复和弱纹理的区域,因此提出了更大的挑战。

4.5 YFCC100M

YFCC100M 是一个庞大的数据集,包含各种旅游地标的各种互联网图像。 它包含 1 亿个媒体对象,其中约 9920 万个照片和 80 万个视频,每个媒体对象由多个元数据片段表示,例如 Flickr 标识符、所有者姓名、相机信息、标题、标签、地理位置、 和媒体来源。 通常,YFCC100M 的子集用于评估,由四个流行的地标图像集组成,每个图像集有 1000 个图像对,测试集总共有 4000 对。

4.6 MegaDepth

MegaDepth 旨在解决极端视点变化和重复模式下匹配的挑战性任务。 它包含来自 196 个不同户外场景的 100 万个图像对,每个图像对都具有已知的姿态和深度信息,可用于验证户外场景中姿态估计的有效性。 作者还提供了使用 COLMAP [12] 通过稀疏重建和多视图立体计算生成的深度图。

5. 特征匹配评估指标

5.1 Homography estimation(单应性估算)

角度正确性度量通常用于评估特征匹配算法的性能。该度量涉及估计两个图像之间的单应性变换,并将变换后的角点与使用地面实况单应性计算的角点进行比较。为了确保在产生不同数量的匹配的方法之间进行公平的比较,正确性标识符是基于用双折射和双折射变形的图像之间的角误差来计算的。如果四个角的平均误差小于指定的像素阈值λ,通常范围从1到10个像素,则估计的单应性被认为是正确的。一旦建立了估计的单应性的正确性,就使用曲线下面积(AUC)度量来评估图像之间的角度误差。该指标计算各种阈值下的误差累积曲线下的面积,量化匹配的准确性和稳定性。AUC值表示总体匹配性能,值越高表示性能越好。

5.2 Relative pose estimation(相对姿态估计)

当评估估计的相机姿态时,典型的方法包括测量旋转和平移的角度偏差。在该方法中,如果角度偏差小于某个阈值,则旋转或平移被认为是正确估计的,并且报告该阈值处的平均精度。 帧之间的间隔由帧间隔表示,其中较大的值表示匹配的更具挑战性的图像对。𝑑𝑓𝑟𝑎𝑚𝑒对于不同阈值下的位姿误差。最常见的指标包括AUC,匹配准确度,匹配分数。其中,平移误差和角度误差的最大值通常被记为位姿误差。

5.3 Visual localization

评估过程通常遵循视觉定位基准中概述的一般评估协议。自定义功能用作系统的输入,然后使用COLMAP等框架执行图像配准过程。最后,计算在预定义公差范围内成功定位的图像的百分比。为了报告所评估的方法的性能,通常使用在不同阈值处的位姿误差的累积AUC。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。