【特征匹配】OmniGlue in CVPR 2024

一、引言

论文: OmniGlue: Generalizable Feature Matching with Foundation Model Guidance
作者: Google Research
代码: OmniGlue
注意: 该方法使用SuperPoint和DINOv2获取关键点、描述符、特征图,在学习该方法前建议掌握关键点检测方法SuperPoint和自监督学习方法DINOiBOT
特点: 使用冻结的SuperPoint和经DINOv2预训练的ViT-B/16获取关键点、描述符、特征图;以特征图为指导构建图像内、图像间的连接图;以连接图为依据进行mask并依次执行自注意力、交叉注意力来优化描述符;对优化后的描述符计算两两之间的相似度确认特征匹配。

二、框架

OmniGlue的整体流程包括如下四个部分:

2.1 提取关键点、描述符、特征图

该部分流程图如下:

可见,对于两张同物体不同视角的待匹配图片 I A I_A IA I B I_B IB,OmniGlue使用冻结的SuperPoint和经DINOv2预训练的ViT-B/16提取关键点、描述符、特征图。

SuperPoint被用来提取关键点和描述符,详情请参考我之前的博客SuperPoint

关键点以归一化的坐标形式呈现,即 ( x , y ) (x,y) (x,y) 待匹配的两张图片中所提取的关键点坐标集被分别定义为 A = { A 1 , A 2 , ⋯   , A N } \mathbf{A}=\{A_1,A_2,\cdots,A_N\} A={A1,A2,,AN} B = { B 1 , B 2 , ⋯   , B M } \mathbf{B}=\{B_1,B_2,\cdots,B_M\} B={B1,B2,,BM} N N N M M M通常不等。归一化的关键点坐标经过位置编码形成坐标向量,再经过一个 MLP \text{MLP} MLP形成位置特征,定义为 p ∈ R C \mathbf{p}\in\mathbb{R}^C pRC

描述符是从两张图片经SuperPoint得到的预测特征图中按照关键点坐标抽取出的特征。 可以直接定义为 d ∈ R C \mathbf{d}\in\mathbb{R}^C dRC

经DINOv2预训练的ViT-B/16被用来提取特征图,DINOv2是一种自监督学习预训练方法,是在DINO和iBOT的改进,详情请参考我之前的博客DINOiBOT。ViT是经典的视觉backbone,详情也可参考我之前的博客ViT-B/16

所提取的特征图同样按照关键点坐标抽取出特征,我们称其为DINO特征,定义为 g ∈ R C ′ \mathbf{g}\in\mathbb{R}^{C^{\prime}} gRC。可见ViT和SuperPoint输出的特征维度可以不同。

于是,两张待匹配的图片 I A I_A IA I B I_B IB经上述操作得到关键点坐标 A \mathbf{A} A B \mathbf{B} B、位置特征 p A \mathbf{p}^A pA p B \mathbf{p}^B pB、描述符 d A \mathbf{d}^A dA d B \mathbf{d}^B dB、DINO特征 g A \mathbf{g}^A gA g B \mathbf{g}^B gB,分别有 N N N M M M个。

2.2 构建图像内、图像间的连接关系图

该部分流程图如下:

可见,SuperPoint的描述符被用来构建两张图像内的连接关系图和两张图像间的连接关系图。其中图像间的关系连接图是以DINO特征为指导构建的。

两个描述符是否有连接影响的是后面更新描述符时注意力机制的执行过程,无连接时输入注意力模块中的mask对应值应该为1,从而阻挡信息的传递。

图像内的关系连接图其实就是图片中SuperPoint的所有描述符两两相连,连接是双向的。 于是,可以形成两张图像内的关系连接图,定义为 G A \mathbf{G}_A GA G B \mathbf{G}_B GB

图像间的关系连接图表达的是两张图片间描述符的连接关系,连接是单向的。 下图为图 I A I_A IA中关键点 A i A_i Ai处的描述符 d i A \mathbf{d}_i^A diA I B I_B IB中所有描述符的连接关系:

可见,经过修剪后图 I B I_B IB中只有半数的描述符会保留与描述符 d i A \mathbf{d}_i^A diA的连接关系。

修剪是以DINO特征相似度为指导进行的。 例如,对于图 I A I_A IA中关键点 A i A_i Ai来说,该处的DINO特征为 g i A \mathbf{g}_i^A giA g i A \mathbf{g}_i^A giA会与图 I B I_B IB中所有DINO特征 g B \mathbf{g}^B gB计算相似度,相似度排名在前50%的DINO特征所对应的描述符会保留与 d i A \mathbf{d}_i^A diA的连接,该连接记作 G B → A i \mathbf{G}_{B\rightarrow A_i} GBAi

⚠️ DINO特征仅用作相似度计算,并不参与后续其它过程。

I A I_A IA和图 I B I_B IB中所有描述符 d A \mathbf{d}^A dA d B \mathbf{d}^B dB均经过上述修剪过程即可形成完整的图像间的关系连接图,即 G B → A \mathbf{G}_{B\rightarrow A} GBA G A → B \mathbf{G}_{A\rightarrow B} GAB

2.3 描述符更新

该部分流程图如下:

可见,更新过程主要是 N N N次双分支的自注意力与交叉注意力的堆叠。两个分支中注意力模块的权重共享。

G A \mathbf{G}_A GA G B \mathbf{G}_B GB首先各自经过自注意力,然后分别送入交叉注意力(每个交叉注意力的输入都有两个,即 G A \mathbf{G}_A GA G B \mathbf{G}_B GB经自注意力后的输出)。自注意力与交叉注意力的详情请参考我之前的博客注意力机制

下式为OmniGlue所使用的注意力公式,以 G B → A i \mathbf{G}_{B\rightarrow A_i} GBAi为例:

其中,
(5)与标准的注意力公式一样,都是对 V V V进行一次全连接映射,不过这里被映射的只有 G B → A i \mathbf{G}_{B\rightarrow A_i} GBAi中保留的描述符;
(3)-(4)分别表示对 Q Q Q K K K的全连接映射, Q Q Q d i A \mathbf{d}_i^A diA K K K V V V一样,不过映射前 Q Q Q K K K都加上了位置特征(关键点坐标经位置编码和MLP映射后所得)。
(2)与标准的注意力公式一样,根据 Q Q Q K K K的相似度加权 V V V
(1)通过(2)得到新的描述符 Δ d i A \Delta\mathbf{d}_i^A ΔdiA Δ d i A \Delta\mathbf{d}_i^A ΔdiA与输入的 d i A \mathbf{d}_i^A diA拼接在一起后经MLP映射回原长度再与 d i A \mathbf{d}_i^A diA相加得到最新的描述符。

Δ d i A \Delta\mathbf{d}_i^A ΔdiA的注意力计算过程如下图所示:

可见,该部分就是堆叠自注意力和交叉注意力来更新描述符。

⚠️ 自注意力是对图内所有描述符进行计算,但交叉注意力计算时会输入mask,仅对2.2节中保留的描述符进行交互计算。

2.4 描述符匹配

该部分流程图如下:

可见,匹配过程会根据相似度最终确定相互匹配的关键点,输出相互匹配的关键点坐标和相似度。

更新后的描述符两两之间计算相似度,然后取出同时为最佳匹配的结果作为最终输出。计算相似度之前需要将描述符归一化

最佳匹配的确定过程如下:

表格为图片 I A I_A IA I B I_B IB中描述符两两之间的相似度矩阵,分别取行列的最大单元,如果该单元同时为所在行和列的最大值,则它所对应的两个描述符是最佳匹配,对应的关键点应该被匹配,对应的值为匹配置信度。

### CVPR 2024 中关于 Matching 的研究进展 CVPR(Computer Vision and Pattern Recognition)作为计算机视觉领域的重要会议之一,在每年都会发布大量前沿的研究成果。对于即将召开的 CVPR 2024,虽然具体的技术细节尚未完全公开,但可以基于以往的趋势预测可能涉及的内容。 #### 图像特征匹配技术 图像特征匹配一直是计算机视觉中的核心课题之一。近年来,深度学习方法显著提升了这一领域的性能。预计 CVPR 2024 将继续关注如何通过神经网络改进传统的方法来实现更鲁棒的匹配效果[^1]。例如,一些工作可能会探索新的损失函数设计或者引入自监督机制以减少对标记数据的需求。 #### 跨模态匹配算法 随着多模态数据分析变得越来越重要,跨模态之间的匹配也成为了一个热点方向。这方面的研究通常涉及到不同类型的传感器输入(如RGB-D相机、LiDAR等),以及它们之间的一致性和互补性的建模。未来的工作很可能是进一步增强模型处理复杂场景的能力,并提高计算效率以便于实际应用部署[^2]。 #### 实时高效的大规模检索系统构建 为了支持大规模数据库上的快速查询操作, 高效索引结构的设计至关重要。最新的研究表明利用局部敏感哈希(LSH)及其变种能够有效加速近似最近邻搜索过程而不牺牲太多准确性。此外,还有其他几种压缩表示形式也被广泛讨论用于降低存储成本的同时保持良好的召回率表现[^3]。 ```python import numpy as np from sklearn.neighbors import NearestNeighbors def lsh_approximate_search(data_points, query_point): nbrs = NearestNeighbors(n_neighbors=5, algorithm='lsh', metric='euclidean').fit(data_points) distances, indices = nbrs.kneighbors([query_point]) return indices.flatten() data = np.random.rand(1000, 128) # Example dataset with 1k points each having dimensionality of 128. query = np.random.rand(128,) # A single point to be queried against the data set. results = lsh_approximate_search(data, query) print(results) ``` 上述代码片段展示了一种简单的LSH近似最近邻居查找方式,它可以帮助理解这类技术的实际运用情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fulin_Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值