0%

📝笔记:SuperGlue:Learning Feature Matching with Graph Neural Networks论文阅读

ETHZ ASL与Magicleap联名之作,CVPR 2020 Oral(论文见文末),一作是来自ETHZ的实习生,二作是当年CVPR2018 SuperPoint的作者Daniel DeTone。

注:

  1. SuperPoint参见另外一篇文章《SuperPoint: Self-Supervised Interest Point Detection and Description》备用链接
  2. 后文中反复提到的self-attention/cross-attention,我暂时翻译成自我注意力/交叉注意力。
  3. 本人知识水平有限,如有错误请在评论区指出。当然,没有问题也可刷刷评论。

摘要

本文提出了一种能够同时进行特征匹配以及滤除外点的网络。其中特征匹配是通过求解可微分最优化转移问题( optimal transport problem)来解决,损失函数由GNN来构建;本文基于注意力机制提出了一种灵活的内容聚合机制,这使得SuperGlue能够同时感知潜在的3D场景以及进行特征匹配。该算法与传统的,手工设计的特征相比,能够在室内外环境中位姿估计任务中取得最好的结果,该网络能够在GPU上达到实时,预期能够集成到sfm以及slam算法中。

superglue_front

SuperGlue是一种特征匹配网络,它的输入是2张图像中特征点以及描述子(手工特征或者深度学习特征均可),输出是图像特征之间的匹配关系。

作者认为学习特征匹配可以被视为找到两簇点的局部分配关系。作者受到了Transformer的启发,同时将self-和cross-attention利用特征点位置以及其视觉外观进行匹配。

相关工作

局部特征匹配

传统的特征可分5步走:1)提取特征点;2)计算描述子;3)最近邻匹配;4)滤除外点;5)求解几何约束;其中滤除外点一步包括点方法有:计算最优次优比,RANSAC,交叉验证以及neighborhood consensus。

最近的一些工作主要集中在设计特异性更好的稀疏特征上,而它们的匹配算法仍然依赖于NN等策略:在做匹配时并没有考虑特征的结构相似性以及外观相似性。

图匹配

这类方法将特征的匹配问题描述成“quadratic assignment problems”,这是一个NP-hard问题,求解这类问题需要复杂不切实际的算子。后来的研究者将这个问题化简成“linear assignment problems”,但仅仅用了一个浅层模型,相比之下SuperGlue利用深度神经网络构建了一种合适的代价进行求解。此处需要说明的是图匹配问题可以认为是一种“optimal transport”问题,它是一种有效但简单的近似解的广义线性分配,即Sinkhorn算法

深度点云匹配

点云匹配的目的是通过在元素之间聚集信息来设计置换等价或不变函数。一些算法同等的对待这些元素,还有一些算法主要关注于元素的局部坐标或者特征空间。注意力机制可以通过关注特定的元素和属性来实现全局以及依赖于数据的局部聚合,因而更加全面和灵活。SuperGlue借鉴了这种注意力机制。

框架以及原理

特征匹配必须满足的硬性要求是:i)至多有1个匹配点;ii)有些点由于遮挡等原因并没有匹配点。一个成熟的特征匹配模型应该做到:既能够找到特征之间的正确匹配,又可以鉴别错误匹配。

superglue_arch

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

公式化

该部分对特征匹配问题建模。给定两张图片$A,B$,每张图片上都有特征点位置$\mathbf{p}$以及对应的描述子$\mathbf{d}$,所以我们经常用$(\mathbf{p},\mathbf{d})$来表示图像特征。第$i$个特征可以表示为$\mathbf{p}_i:=(x,y,c)$,其中$c$表示特征点提取置信度,$(x,y)$表示特征坐标;描述子可以表示为$\mathbf{d}_i \in \mathbb{R}^{D}$,其中$D$表示特征维度,这里的特征可以是CNN特征,如SuperPoint,或者是传统特征SIFT。假设图像$A,B$分别有$M,N$个特征,可以表示为$\mathcal{A}:=\{1, \ldots, M\}$以及$\mathcal{B}:=\{1, \ldots, N\}$。

部分分配矩阵:约束i)和ii)意味着对应关系来自两组关键点之间的部分分配。我们给出一个软分配矩阵$\mathbf{P} \in[0,1]^{M \times N}$,根据上述约束,我们有如下关系:

那我们设计网络的目标就是解算这个分配矩阵$\mathbf{P}$。

注意力GNN

这里有个有意思的说法:特征点的位置以及视觉外观能够提高其特异性。另外一个具有启发性的观点是人类在寻找匹配点过程是具有参考价值的。想一下人类是怎样进行特征匹配的,人类通过来回浏览两个图像试探性筛选匹配关键点,并进行来回检查(如果不是匹配的特征,观察一下周围有没有匹配的更好的点,直到找到匹配点/或没有匹配)。上述过程人们通过主动寻找上下文来增加特征点特异性,这样可以排除一些具有奇异性的匹配。本文的核心就是利用基于注意力机制的GNN实现上述过程,即模拟了人类进行特征匹配。

特征点Encode

首先根据上述说法,特征点位置+描述会获得更强的特征匹配特异性,所以这里将特征点的位置以及描述子合并成每个特征点$i$的初始表示$^{(0)} \mathbf{x}_{i}$,

其中MLP表示多层感知机(Multilayer Perceptron ,MLP)此处用于对低维特征升维,上式实际上是将视觉外观以及特征点位置进行了耦合,正因如此,这使得该Encode形式使得后续的注意力机制能够充分考虑到特征的外观以及位置相似度。

多层GNN

考虑一个单一的完全图,它的节点是图像中每个特征点,这个图包括两种不同的无向边:一种是“Intra-image edges”(self edge)$\mathcal{E}_{\text {self }}$,它连接了来自图像内部特征点;另外一种是“Inter-image edges”(cross edge)$\mathcal{E}_{\text {cross }}$,它连接本图特征点$i$与另外一张图所有特征点(构成了该边)。

令$^{(\ell)} \mathbf{x}_{i}^{A}$表示为图像$A$上第$i$个元素在第$\ell$层的中间表达形式。信息(message)$\mathbf{m}_{\mathcal{E} \rightarrow i}$是聚合了所有特征点$\{j:(i, j) \in \mathcal{E}\}$之后点结果(它的具体形式后面的Attentional Aggregation会介绍,一句话来说就是将自我注意力以及交叉注意力进行聚合),其中$\mathcal{E} \in \{\mathcal{E}_{\text {self }},\mathcal{E}_{\text {self }}\}$,所以图像$A$中所有特征$i$传递更新的残差信息(residual message?)是:

其中$[\cdot | \cdot]$表示串联操作。同样的,图像$B$上所有特征有类似的更新形式。可以看到self 以及cross edges绑在一起并交替进行更新,先self后cross,作者提到共有固定数量的$L$层。

需要说明的是,这里的self-/cross-attention实际上就是模拟了人类来回浏览匹配的过程,其中self-attention是为了使得特征更加具有匹配特异性,而cross-attention是为了用这些具有特异性的点做图像间特征的相似度比较。

Attentional Aggregation

文章的亮点之一就是将注意力机制用于特征匹配,这到底是如何实现的呢?作者提到,注意力机制将self以及cross信息聚合得到$\mathbf{m}_{\mathcal{E} \rightarrow i}$。其中self edge利用了self-attention[58],cross edge利用了cross-attention。类似于数据库检索,我们想要查询$\mathbf{q}_i$基于元素的属性即键$\mathbf{k}_i$,检索到了某些元素的值$\mathbf{v}_j$。

其中注意力权重${\alpha}_{ij}$是查询与检索到对象键值相似度的$\operatorname{Softmax}$即,$\alpha_{i j}=\operatorname{Softmax}_{j}\left(\mathbf{q}_{i}^{\top} \mathbf{k}_{j}\right)$。

这里需要解释一下键(key),query以及值(value)。令待查询点特征点$i$位于查询图像$Q$上,所有的源特征点位于图像$S$上,其中$(Q, S) \in\{A, B\}^{2}$,于是我们可以将key,query以及value写成下述形式:

每一层$\ell$都有其对应的一套投影参数,这些参数被所有的特征点共享。理解一下:此处的$\mathbf{q}_i$对应于待查询图像上某个特征点$i$的一种表示(self-attention映射),$\mathbf{k}_j$以及$\mathbf{v}_j$都是来自于召回的图像特征点$j$的一种表示(映射);$\alpha_{i j}$表示这两个特征相似度,它是由$\mathbf{q}_i$以及$\mathbf{k}_j$计算得到(在这里体现了cross-attention的思想?),越大就表示这两个特征越相似,然后利用该相似度对$\mathbf{v}_j$加权求和得到$\mathbf{m}_{\mathcal{E} \rightarrow i}$,这就是所谓的特征聚合

上面提到的这些概念有些难以理解,作者特意对上述过程进行了可视化,self-attention就是一张图像内部的边相连进行聚合,它能够更加关注具有特异性的所有点,且并不仅局限于其邻域位置特征(心心相依,何惧千里,逃…);cross-attention做的就是匹配那些外观相似的两张图像见的特征。

superglue_fig_4

superglue_fig_7

下图展示了每层self-attention以及across-attention中权重${\alpha_{i j}}$的结果。按照匹配从难到易,文中画出了3个不同的特征点作为演示,绿色特征点(容易),蓝色特征点(中等)以及红色特征点(困难)。对于self-attention,初始时它(某个特征)关联了图像上所有的点(首行),然后逐渐地关注在与该特征相邻近的特征点(尾行)。同样地,cross-attention主要关注去匹配可能的特征点,随着层的增加,它逐渐减少匹配点集直到收敛。绿色特征点在第9层就已经趋近收敛,而红色特征直到最后才能趋紧收敛(匹配)。可以看到无论是self还是cross,它们关注的区域都会随着网络层深度的增加而逐渐缩小。

superglue_fig_15

经过了$L$次self/cross-attention后就可以得到注意力GNN的输出,对于图像$A$我们有:

我们可以把$\mathbf{f}_{i}^{A}$理解为匹配描述子(类比特征描述子),专门为特征匹配服务,对于图像$B$具有类似的形式。

匹配层(Optimal matching layer)

接下来的任务就是去构建软分配矩阵$\mathbf{P}$。对于一般的图匹配流程,这个分配矩阵可以通过计算一个得分矩阵$\mathbf{S} \in \mathbb{R}^{M \times N}$(用来表示一些潜在的匹配)来实现。具体而言,通过最大化总体得分$\sum_{i, j} \mathbf{S}_{i, j} \mathbf{P}_{i, j}$即可得到这个分配矩阵$\mathbf{P}$,其中要注意的是$\mathbf{P}$是有约束的。

匹配得分预测

去计算$M\times N$个潜在匹配得分是不可取的,于是作者就用GNN聚合得到的$\mathbf{f}_{i}^{A}$以及$\mathbf{f}_{i}^{B}$计算内积得到得分:

遮挡以及可见性

类似于SuperPoint在提取特征点时增加了一层dustbin通道,专门为了应对图像中没有特征点情况。本文借鉴了该思想,在得分矩阵$\mathbf{S}$的最后一列/行设置为dustbins可以得到$\overline{\mathbf{S}}$,这样做的作用在于可以滤出错误的匹配点。

图像$A$上的特征点被分配到图像$B$上某个特征匹配或者被分配到dustbin,这就意味着每个dustbin有$N,M$个匹配,因此软分配矩阵有如下约束:

其中$\mathbf{a}=\left[\begin{array}{ll}\mathbf{1}_{M}^{\top} & N\end{array}\right]^{\top}$,$\mathbf{b}=\left[\begin{array}{ll}\mathbf{1}_{N}^{\top} & M\end{array}\right]^{\top}$。(此处不太理解,最后一维为何为N?
注意:此处可参考这篇文章的解释。

Sinkhorn Algorithm

求解最大化总体得分可由“Sinkhorn Algorithm”[52,12]进行求解,此处并不作为重点讲解。

Loss

GNN网络以及最优匹配层都是可微的,这使得反向传播训练成为可能。网络训练使用了一种监督学习的方式,即有了匹配的真值$\mathcal{M}=\{(i, j)\} \subset \mathcal{A} \times \mathcal{B}$(如,由真值相对位姿变换得到的匹配关系),当然也可以获得一些没有匹配的特征点$\mathcal{I} \subseteq \mathcal{A}$以及$ \mathcal{J} \subseteq \mathcal{B}$。当给定真值标签,就可以去最小化分配矩阵$\overline{\mathbf{P}}$ 负对数似然函数:

这个监督学习的目标是同时最大化精度以及匹配的召回率,接下来的训练过程略过,直接开始实验阶段的介绍。

实验

特征匹配的目的是为了解算出两帧之间的相对位姿,所以实验对比的一个指标就是单应矩阵估计,另外还有室内外的位姿估计。只能说SuperGlue的效果太好了,直接放结果吧(本来论文7页就写完了,作者放了10页附录大招)。

单应矩阵估计

能够获得非常高的匹配召回率(98.3%)同时获得超高的精度,比传统的暴力匹配都好了一大截。

superglue_tb_1

室内外位姿估计

下表看来,大基线室内位姿估计也是相当棒,完胜传统算法。

superglue_tb_2

superglue_tb_3

网络耗时

接下来放出大家比较关心的网络耗时,下图是在NVIDIA GeForce GTX 1080 GPU跑了500次的结果,512个点69ms(14.5fps),1024个点87ms(11.5fps)。

superglue_tb_3

更多匹配结果

第一列是SuperPoint+暴力匹配结果,第二列是SuperPoint+OAnet(ICCV 2019)结果,第三列是SuperPoint+SuperGlue结果。能看到SuperGlue惊人的特征匹配能力,尤其是在大视角变化时优势明显(红线表示错误匹配,绿线表示正确匹配)。

结论

本文展示了基于注意力的图神经网络对局部特征匹配的强大功能。 SuperGlue的框架使用两种注意力:(i)自我注意力,可以增强局部描述符的接受力;以及(ii)交叉注意力,可以实现跨图像交流,并受到人类来回观察方式的启发进行匹配图像。文中方法通过解决最优运输问题,优雅地处理了特征分配问题以及遮挡点。实验表明,SuperGlue与现有方法相比有了显着改进,可以在极宽的基线室内和室外图像对上进行高精度的相对姿势估计。此外,SuperGlue可以实时运行,并且可以同时使用经典和深度学习特征。

总而言之,论文提出的可学习的中后端(middle-end)算法以功能强大的神经网络模型替代了手工启发式技术,该模型同时在单个统一体系结构中执行上下文聚合,匹配和过滤外点。作者最后提到:若与深度学习前端结合使用,SuperGlue是迈向端到端深度学习SLAM的重要里程碑。(when combined with a deep front-end, SuperGlue is a major milestone towards end-to-end deep SLAM)

这真是鼓舞SLAM研究人员的士气!

参考