SuperGlue网络+FPN+SIFT(特征匹配)
- 摘要
- 1. FPN
-
- FPN具体实现思路
- 2. SIFT
-
- 2.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. SuperGlue
-
- 3.1 背景
- 3.2 思路
- 3.3 注意力图卷积神经网络
- 3.4 注意力聚合
- 3.5 最优匹配层
-
- 3.5.1 分数预测
- 3.5.2 遮挡和可见性
- 3.5.3 Sinkhorn算法
- 3.6 Loss
- 3.7 实施细节
- 3.8 实验
-
- 3.8.1 Homography estimation
- 3.8.2 Indoor pose estimation
- 3.9 总结
- 4. 特征匹配常用数据集
-
- 4.1 HPatches
- 4.2 Roto -360
- 4.3 ZEB
- 4.4 ScanNet
- 4.5 YFCC100M
- 4.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,