SupeGlue与LoFTR都是对图片间进行特征点匹配的方法,其目的是,找到图像A、图像B中同时存在的相同物体实例,并输出其位置信息、匹配关系。
在提取出特征点后,我们通过图神经网络生成匹配代价矩阵,并求解最优匹配矩阵,以获得全局最优的匹配结果。
在讨论 GNN 之前,让我们先了解一下什么是图 (Graph)。在计算机科学中,图是由两个部件组成的一种数据结构:顶点/节点 (vertices/nodes) 和边 (edges)。一个图 G 可以用它包含的顶点 V 和边 E 的集合来描述。边可以是有向的或无向的,这取决于顶点之间是否存在方向依赖关系。
现有的深度学习算法在处理图数据时面临着巨大的挑战。这是因为图数据是非欧式空间数据,复杂性很高,且图是不规则的,每个图可以有大小可变的无序节点,图中的每个节点可以有不同数量的相邻节点,导致一些重要的操作(例如卷积)不再适合直接用于图。此外,现有深度学习算法的一个核心假设是数据样本之间彼此独立。然而,对于图来说,情况并非如此,图中的每个数据样本(节点)都会有边与图中其他实数据样本(节点)相关,这些信息可被用于捕获实例之间的相互依赖关系。
近年来,人们对深度学习方法在图上的扩展越来越感兴趣。在多方因素的成功推动下,研究人员借鉴了卷积网络、循环网络和深度自动编码器的思想,定义和设计了用于处理图数据的神经网络结构。
SuperGlue模型中主要采用的是基于空间方法的图注意力网络,运用了类似Vision Transformer的方法,只不过样本空间并不是全图像的Patch Embedding,而是提取所得的特征点编码信息(位置+由传统方法或深度卷积方法获得的该像素及其邻域的特征+特征置信度)。图中的每个数据样本(节点)是特征点的编码信息,每条边是节点两两之间的Attention值,每个节点都有边与其他所有节点连通,构成了一个完全图。我们通过下式计算完全图的边信息。
这是一种类似于数据库检索的特征聚合方式,在图神经网络中也被称为“消息传递”。q表示Query,k表示Key,v表示Value,对于图像对{A, B},q由A产生,k、v由B产生。对于输入A,我们通过q进行查询,匹配到B的键k,通过Softmax函数计算这种查询与键匹配的相似度,然后与B的真值v相乘。通常这种Attention机制会循环多层,以使匹配达到紧密收敛。需要注意的是,对于每轮循环,我们首先对{A, A}、{B, B}计算Self-Attention,再对{A, B}计算Cross-Attention。
现在我们成功的编码表示了特征点,并计算出特征点间的互相关性。我们将这两者相加融合,这相当于将完全图中所有的边近似去除,使所有节点之间互相独立,此时我们简单计算节点间的内积(欧氏距离)即可进行后续的匹配流程。
下图表示了SuperGlue处理一对图像对的主干逻辑。
输入: 包含特征点位置信息、特征描述子,可通过手工特征或深度学习提取。 手工:SIFT算法 深度:SuperPoint模型 |
|
输出: 2张图的特征点间的最优匹配关系。 设定阈值输出结果。 阈值包括:可作为特征点的置信度阈值、是否输出该匹配的匹配得分阈值。 |
模型训练阶段:
属于监督训练,无需手工标注,方法是输入1张真实图片,提取特征点,通过随机单应变换生成1张特征点对应的新图片、以及深度图,形成一对图像对。
深度图生成的方法是:使用COLMAP/MVS方法,对一些具有多视角多图的场景进行稀疏-稠密重建,然后对生成图进行深度估计。
原文给出的预训练模型采用Oxford、Paris数据集做单应估计训练(https://github.com/filipradenovic/revisitop)。 分别采用百万级的两个数据集Scannet数据集(室内)、YFCC100M数据集(室外)做姿态估计训练。
模型中的几个具体细节:
流程图如下图所示。
Keypoint Encoder模块对每个特征点进行编码,将特征描述子d与位置信息p合成为一个向量。
图像A含有N个特征点,表示为一个N长度序列。图像B含有M个特征点,表示为一个M长度序列。接下来构建含N+M个节点的完全图,每个节点表示一个特征点,每条边表示两个特征点之间的关系,这种关系是通过Attention机制实现的。这里有两个符合人类认知本质的逻辑:
①人类在找图片A、B相似之处时,首先会从图A中挑选出一些格外显著的点,这对应于在N序列内做Self-Attention操作,对于图像B我们也选出这么一些显著的点。其次,对于图A中的每个显著点,我们会遍历图B的所有显著点,检索是否两两相似,这对应于在N序列、M序列间做Cross-Attention。
②这种Self-Attention + Cross-Attention称为一轮注意力。每轮注意力的结果与本轮初始特征向量的合成方法是直接相加。考虑人类对图像的注意力感知,我们并不会在眼球聚焦之后丢弃掉眼前的景象,我们仍可以感光,但是由于眼球聚焦的调节,景象的一些部分被削弱了,导致我们只能用“余光”感受这些部分;而另一些部分被增强了,导致我们可以仔细观察这些部分。所以这种加和操作看似可解释性较差(因为将不同维度的特征相加),实则符合视觉感知的生理逻辑。
经过多轮Attention之后,每个特征点有了一个聚合表示。通过对聚合表示两两内积,我们可得N*M尺寸的代价矩阵,这表示了将特征点两两匹配所需付出的代价。如果两个点非常不相似,而我们强行把他们匹配,则会付出很大的代价。
基于代价矩阵,我们需要线性规划解算一个最优分配矩阵,其目标是,以最小的全局代价两两匹配图像A与图像B中的特征点,但其计算复杂度随数据量增长而变大。所以我们采用SinkHorn算法,添加熵正则化约束以近似求解。这里需要注意,对于无法越过阈值成功匹配的点,使用额外的垃圾桶空间来存储这些点,为最优化过程添加约束,从而滤除错误点。SinkHorn算法在保证按需分配的同时,由于熵正则化的作用会使分配矩阵偏向均匀分布,因此结果会有一定的平滑。
模型中使用了许多简易的多层感知机,这减少了复杂计算,调节了通道尺寸,并添加了非线性以提高抽象表征能力。
损失函数为匹配代价矩阵的负对数似然损失。这相当于优化匹配的准召。
下图表示了LoFTR处理一对图像对的主干逻辑。
LoFTR基于SuperGlue做了诸多改进,最主要的改进是:
SuperGlue基于预先提取的部分特征点。而LoFTR则像传统的图像识别方法那样,预先对全图提取特征,并在将特征送入Transformer前,为每个点添加位置编码。
SuperGlue的特征描述子尺度是不变的,LoFTR先对较大的图像块之间做粗匹配,对于可信配对,再做进一步的精细高分辨率匹配。
相较于SuperGlue,这主要解决了两个关键问题:
LoFTR可以显著提升低/无纹理点的匹配准召。
如下图所示,LoFTR可以在无纹理的墙壁和地板上找到重复图案的对应,而这对于SuperGlue是不可实现的。
在处理具有近似纹理特征点时,LoFTR更为谨慎、准确,对于图像块所属的实例关系判断更准确。
如下图所示,这是从右侧、左侧匹配桌子场景的结果。显然SuperGlue对于墙壁上的点产生了误匹配,而LoFTR则谨慎的多。
模型推理阶段:
输入: 1个图像对。 由CNN逐像素自动提取的多尺度特征+位置编码。 |
|
输出: 2张图的特征点间的最优匹配关系。 |
模型训练阶段:
属于监督训练,无需手工标注,自标注生成方法采用类似SuperGlue的随机单应变换法,生成图像对及深度图。
不同之处在于,在选定标注时,为了避免出现一对多的情况,遵循互最近邻原则;对于粗标签,先由左向右变换,取右侧最近邻点作为右侧gt标签候选,再将该候选点由右向左变换,取左侧最近邻点,如果左侧最近邻点与初始锚点相同,则该左右点对作为一个gt点对。对于细标签,我们将左侧gt粗标签的中心点变换到右侧,取细尺度的最近邻点作为右侧候选点,对于一张变换生成的标签图像,粗标签的中心点必须落在对应生成的最近邻细标签的5*5单元窗口内,否则丢弃该粗标签。
原文给出的预训练模型使用ResNet-18作为backbone特征提取器, 分别采用百万级的两个数据集Scannet数据集(室内)、MegaDepth数据集(室外)做姿态估计训练。
模型流程:
局部特征提取网络从图像对{A, B}中提取粗特征图、精特征图。
将A, B的粗略特征图分别展平为一维序列,并分别融合位置编码;然后,对两序列计算图注意力(输入Transformer),通过SinkHorn算法或Dual Softmax法,得到粗特征块互匹配得分矩阵。根据置信度阈值、相互邻近标准,得到粗匹配预测。
对于粗匹配预测对应的A, B中的位置,我们分别将其对应的细特征图按5*5单元划分为网格图,并序列化,对于每个单元,都将其细特征与网格中心点粗特征融合,得到了每个单元的细特征表示。
对于A, B的细特征序列计算图注意力,对于两两配对,我们以A的单元中心点为一个最终特征点坐标,输出B的5*5单元中置信度的坐标。最终,我们选择置信度最高的top_K个匹配输出。
损失函数包含两部分:粗匹配互相关得分矩阵的负对数似然损失 + 细匹配坐标L2损失。这相当于优化粗匹配的准召,以及细匹配位置的准确率。
Paul-Edouard Sarlin and Daniel DeTone and Tomasz Malisiewicz and Andrew Rabinovich (2020). SuperGlue: Learning Feature Matching with Graph Neural Networks. In CVPR.
SuperGlue Git Repository.
Sun, J., Shen, Z., Wang, Y., Bao, H., & Zhou, X. (2021). LoFTR: Detector-Free Local Feature Matching with Transformers. CVPR.
LoFTR Git Repository.
知乎:图神经网络综述