OmniGlue: Generalizable Feature Matching with Foundation Model Guidance

引用格式】:Jiang H, Karpur A, Cao B, et al. OmniGlue: Generalizable Feature Matching with Foundation Model Guidance[J]. arXiv preprint arXiv:2405.12979, 2024.

网址https://arxiv.org/pdf/2405.12979

开源代码】:https://github.com/google-research/omniglue

一、瓶颈问题

        当前的可学习特征匹配技术虽然在传统基准测试中表现优异,但在面对新颖图像域时,泛化能力有限,难以应用于实际世界的多样场景。

二、本文贡献

        文中提出了一种名为OmniGlue的全新可学习图像匹配器,以泛化作为核心原则。首先,OmniGlue利用了视觉基础模型(DINOv2)的广泛知识来指导特征匹配过程,达到增强模型在训练时未见过的图像域上的泛化能力。另外,OmniGlue提出了一种新的关键点位置引导的注意力机制,通过解耦空间信息和外观信息(关键点位置特征p和局部描述符d),提高了匹配描述符的质量和泛化能力。

三、解决方案

        OmniGlue首先将输入图像通过SuperPoint进行处理,生成关键点和局部描述符。接着,DINOv2对输入图像进行处理,生成全局特征,与SuperPoint生成的局部描述符结合。然后,在融合的特征上应用关键点位置引导的注意力机制,生成最终的匹配描述符。最终,根据生成的描述符在不同图像之间进行特征匹配,得到匹配对。

1 特征提取

        对于输入的两张图像IA和IB,使用SuperPoint提取关键点和描述符,提取到的Superpoint关键点集表示为A:={A1, ... , ..., AN}和B:={B1, ..., ..., BM},N和M分别是IA和IB中识别到的关键点数量,每个关键点与其SuperPoint局部描述符关联。其中,归一化关键点位置使用位置嵌入进行编码,这里使用了MLP层来进一步细化,将关键点的结果位置特征表示为p。此外,对两幅图像提取密集的DINOv2特征图,通过SuperPoint提取到的关键点位置对特征图进行插值,得到每个关键点的DINOv2描述符,记为g。最终会得到集合A和集合B,集合A可表示为:d_{i}^{A}p_{i}^{A}g_{i}^{A}。OmniGlue模型则是为了估计两个关键点集A和B之间的对应关系

2 利用DINOv2构建图

        文中共构建了四个关键点关联图:两个图像间图和两个图像内图

        两个图像间图表示两幅图像关键点之间的连接。两个图像间图是有向的,其中信息从源节点传播到目标节点。这里利用DINOv2特征来指导图像间图的构建,以G_{B-->A_{i}}为例,对于关键点集A中的每个关键点Ai,计算其与集合B中所有关键点的DINOv2特征的相似性(在计算相似性之前对DINOv特征g_{Ai}g_{B}执行通道归一化)。文中选择具有最大DINOv2相似度的几何B中的上半部分关键点与Ai连接。

        图像内图表示属于同一图像的关键点之间的连接。这里它们是无向的,信息在连接的关键点之间双向传播,每个关键点都与同一图像中的所有其他关键点紧密相连。

3 具有新颖指导的信息传播

        这里基于关键点图执行信息传播,该模块包含多个块,每个块有两个注意力层。第一个基于图像内图更新关键点,执行自注意;第二个基于图像间图更新关键点,执行交叉注意。与之前工作不同的是,这里引入了两个新的元素:分别来自DINOv2和关键点位置的指导。

3.1 DINOv2指导

        在交叉注意期间,对于关键点Ai,它只聚合来自从B中选择的DINOv2-pruned潜在匹配集的信息,而不是所有关键点。DINO的广泛知识可以指导模型在训练时没有看到的域中的特征匹配过程,有助于广义图像匹配。通过这种方式,来自不相关关键点的信息不会融合到查询关键点特征中。其还鼓励交叉注意模块专注于区分较小潜在的匹配集中的匹配点【由于在某些情况下DINO也可能不正确,这里不会强制将匹配空间限制为潜在的匹配集】

3.2 关键点指导

        之前的方法在特征传播过程中,将关键点位置特征和局部描述符纠缠在一起,使得模型过于依赖学习到的位置相关先验。而对于在训练时没有看到的匹配模式的图像对下,学习到的先验很容易受到攻击,限制了泛化能力。针对这一问题,文中提出了一种新颖的位置引导注意力,它解开了关键点位置特征p和局部描述符d位置信息被用作该模块中的空间上下文,不包含在用于匹配的最终局部描述符中

有了以上的新颖的元素,文中的注意力层如上图所示,取关键点Ai为例,定义如下:

  • 如公式1所示:注意力有一个残差连接,它集成了注意力更新值\bigtriangleup d_{i}^{A}。<----更新操作;[·|·]:通道级联
  • 如公式2所示:计算图中关键点Ai与其源连接关键点之间的特征相似度,记为包含K个关键点的S。注意的查询、键和值分別是q_{i}^{A}k^{S}v^{S},计算如公式3-5所示。
  • 在自注意中,S是由所有关键点组成;在交叉注意中,S包含DINO识别的关键点。

4 匹配层和损失函数

        文中通过细化的关键点表示来生成成对相似矩阵S\in R^{N\times M},其中S_{i,j} = d_{i}^{A}\cdot (d_{j}^{B})^{T}。得到相似矩阵之后,使用Sinkhorn算法来细化相似度,产生匹配矩阵M\in [0, 1]^{N\times M},其中M_{i, j}表示关键点Ai和Bj之间的匹配概率。损失函数则是参考自SuperPoint与LoFTER,在训练中,将匹配矩阵的付对视似然与基本事实最小化。

四、实验结果

1 实验

        在SuperPoint和LightGlue之后,文中首先在SH100上训练OmniGlue来初始化OmniGlue,然后在SH200上进一步预训练OmniGlue,最后在MegaDepth上训练OmniGlue。文中在每个训练域的测试拆分上评估OmniGlue和所有基线方法,并测试它们对后续训练数据集或域外测试数据集的泛化。最后,文中尝试将OmniGlue适应具有有限目标域训练数据的域外图像。

1.1 数据集

实验中用到的数据集如下表所示:

1.2 从合成单应性到MegaDepth

        与基本方法 SuperGlue 相比,OmniGlue 不仅在域内数据上表现出卓越的性能,而且表现出稳健的泛化。即使数据分布从 SH100 转移到 SH200 最小,SuperGlue 的性能也会大幅下降,精度和召回率降低了 20%。这一结果表明,SuperGlue过度依赖于学习到的与位置相关的模式,无法处理进一步的图像扭曲失真。相比之下,OmniGlue 展示了强大的泛化能力,超过了 SuperGlue,精度提高了 12%,召回率提高了 14%。同样,在从SH200转移到Megadepth的过程中,OmniGlue优于SuperGlue,召回率提高了15%。

1.3 从MegaDepth到域外数据

        与所有其他方法相比,OmniGlue 不仅在 MegaDepth-1500 和最先进的稀疏匹配器 LightGlue 上实现了相当的性能,而且在 6 个新领域中的 5 个上表现出更好的泛化能力。具体来说,在MegaDepth-1500上,OmniGlue相对于基本方法SuperGlue表现出12.3%的相对增益(姿势AUC@5°)。在6个新领域中,OmniGlue分别比SuperGlue和LightGlue显示出20.9%和9.5%的平均相对增益(对于最紧阈值的姿态和配准精度)。此外,OmniGlue 在更难的新领域与 LightGlue 表现出更大的性能提升,即在 GSO-Hard、NAVI-Wild 和 DeepAerial 上。我们在图 5 和图 4 中展示了可视化,用于对新领域进行零样本泛化及其在源域上的性能。

        值得注意的是,密集匹配器在域内 MegaDepth 数据集上取得了更好的性能,泛化更差。而SuperGlue的性能接近甚至更差,域内 AUC@5° 降低了 10%。文中推测这可能是由于视觉描述符和匹配模块的联合学习,使它们更容易强烈地专门化到训练领域。

1.4 使用少数图像微调

        OmniGlue 更容易适应目标域。具体来说,当从 0 到 30 个实例进行缩放进行训练时,OmniGlue 在两个测试子集中都始终表现出增强的性能。仅使用 10 个实例进行训练,OmniGlue 在两个子集上将姿态估计准确率提高了 5.3% 和 4.0%。通过合并 10 个更多对象来扩展训练集可以进一步提高 2%。此外,OmniGlue 始终优于 SuperGlue,在所有实验中实现了大约 10% 的相对增益。结果共同证明了OmniGlue在现实场景中作为一种通用和可推广的方法的适用性。

2 消融实验

        表 5 (1) 中的结果突出了文中基础模型指导的有效性,增强了域外数据的泛化能力。此外,表 5 (2) 的第三行说明了位置引导注意力的影响,展示了域内和域外数据的改进。此外,文中使用不同的方法来解开关键点位置特征。表 5 (2) 的前两行表明,当不使用任何位置特征或仅在 selfattention 上应用位置引导时,性能会下降(没有交叉注意的位置引导)。这强调了文中的位置引导注意力在促进图像内和图像间上下文中的信息传播方面的有效性。此外,在去除位置嵌入后,即使域内性能下降,模型也显示出更好的泛化。这一结果表明,SuperGlue 使用位置信息的不合适方式限制了其泛化。

        如表 5 (3) 所示,文中探索了合并 DINOv2 的不同方法。第一个涉及合并 DINO 特征和 SuperPoint 局部描述符。这种集成是在使用 MLP 的信息传播模块之前执行的。实验表明性能下降,这表明这两个特征不兼容,这可能是由于 DINO 的粗粒度。这些特征可以有效合并的方式仍然是一个悬而未决的问题。第二种方法需要应用DINOv2指导来构建图像内图和图像间图,与(5)相比,性能下降。文中假设原因在于图像内信息传播(self-attention)需要一个全局上下文,特别是对于区分特征空间中的所有关键点。减少图像内图的连通性会对全局上下文产生不利影响,这与SuperGlue中注意力跨度研究的发现一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/694203.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[ue5]建模场景学习笔记(5)——必修内容可交互的地形,交互沙(3)

1.需求分析&#xff1a; 我们现在已经能够让这片地形出现在任意地方&#xff0c;只要角色走在这片地形上&#xff0c;就能够产生痕迹&#xff0c;但这片区域总是需要人工指定&#xff0c;又无法把这片区域无限扩大&#xff08;显存爆炸&#xff09;&#xff0c;因此尝试使角色无…

【数据结构】十二、八种常用的排序算法讲解及代码分享

目录 一、插入排序 1)算法思想 2&#xff09;代码 二、希尔排序 1&#xff09;算法思想 2&#xff09;代码 三、选择排序 1&#xff09;算法思想 2&#xff09;代码 四、堆排序 1&#xff09;什么是最大堆 2&#xff09;如何创建最大堆 3&#xff09;算法思想 4&a…

电脑回收站清空了怎么恢复回来?分享四个好用数据恢复方法

电脑回收站清空了还能恢复回来吗&#xff1f;在使用电脑过程中&#xff0c;很多小伙伴都不重视电脑的回收站,&#xff0c;有用的没用的文件都往里堆积。等空间不够的时候就去一股脑清空回收站。可有时候会发现自己还需要的文件在回收站里&#xff0c;可回收站已经被清空了……那…

单灯双控开关原理

什么是单灯双控&#xff1f;顾名思义&#xff0c;指的是一个灯具可以通过两个不同的开关或控制器进行控制。 例如客厅的主灯可能会设置成单灯双控&#xff0c;一个开关位于门口&#xff0c;另一个位于房间内的另一侧&#xff0c;这样无论你是从门口进入还是从房间内出来&#x…

Meta首席AI科学家Yann LeCun指出生成式AI的不足

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

sqli-labs 靶场 less-11~14 第十一关、第十二关、第十三关、第十四关详解:联合注入、错误注入

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它&#xff0c;我们可以学习如何识别和利用不同类型的SQL注入漏洞&#xff0c;并了解如何修复和防范这些漏洞。Less 11 SQLI DUMB SERIES-11判断注入点 尝试在用户名这个字段实施注入,且试出SQL语句闭合方式为单…

插卡式仪器模块:数字万用表模块(插卡式)

• 6 位数字表显示 • 24 位分辨率 • 250 KSPS 采样率 • 电源和数字 I/O 均采用隔离抗噪技术 • 电压、电流、电阻、电感、电容的高精度测量 • 二极管/三极管测试 通道122输入 阻抗 电压10 MΩHigh-Z, 10 MΩ电流10 Ω50 mΩ / 2 Ω / 2 KΩ输入范围电压 5 V0–60 V电流…

Java桥接模式

桥接模式 最重要的是 将 抽象 与 实现 解耦 , 通过组合 在 抽象 与 实现 之间搭建桥梁 ; 【设计模式】桥接模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )-CSDN博客 桥接模式&#xff08;Bridge Pattern&#xff09;-&#xff08;最通俗易懂的案例&#xff09;_桥接模式 例子-…

SpringAI(二)

大模型:具有大规模参数和复杂计算结构的机器学习模型.通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数.其设计目的在于提高模型的表达能力和预测性能,应对复杂的任务和数据. SpringAI是一个AI工程领域的应用程序框架 大概推出时间是2023年7月份(不确定) 目的是将S…

Java 期末复习 习题集

&#x1f496; 单选题 &#x1f496; 填空题 &#x1f496; 判断题 &#x1f496; 程序阅读题 1. 读代码写结果 class A {int m 5;void zengA(int x){m m x;}int jianA(int y){return m - y;} }class B extends A {int m 3;int jianA(int z){return super.jianA(z) m;} …

【阿里YYDS】通义千问正式开源 Qwen2

Qwen2–72B正式开源&#xff0c;性能全面超越开源模型Llama3-70B&#xff0c;也超过文心4.0、豆包pro、混元pro等众多中国闭源大模型。 在过去一段时间里&#xff0c;Qwen系列模型从Qwen1.5升级到Qwen2&#xff0c;Qwen2分5个尺寸&#xff0c;包括Qwen2-0.5B、Qwen2-1.5B、Qwen…

RabbitMQ-topic exchange使用方法

RabbitMQ-默认读、写方式介绍 RabbitMQ-发布/订阅模式 RabbitMQ-直连交换机(direct)使用方法 目录 1、概述 2、topic交换机使用方法 2.1 适用场景 2.2 解决方案 3、代码实现 3.1 源代码实现 3.2 运行记录 4、小结 1、概述 topic 交换机是比直连交换机功能更加强大的…

CopyOnWriteArrayList详解

目录 CopyOnWriteArrayList详解1、CopyOnWriteArrayList简介2、如何理解"写时复制"3、CopyOnWriteArrayList的继承体系4、CopyOnWriteArrayList的构造函数5、CopyOnWriteArrayList的使用示例6、CopyOnWriteArrayList 的 add方法7、CopyOnWriteArrayList弱一致性的体现…

【BUG】已解决:ModuleNotFoundError: No module named ‘transformers‘

已解决&#xff1a;ModuleNotFoundError: No module named ‘transformers‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司…

Element-UI入门

目录 1.什么是Element-UI 2.作用 3.版本历史 4.优缺点 4.1.优点 4.2.缺点 5.应用场景 6.代码示例 7.未来展望 8.总结 1.什么是Element-UI Element-UI 是由饿了么前端团队开发的一套基于 Vue.js 的桌面端组件库。提供了一整套 UI 组件&#xff0c;使开发者能够快速构…

非线性模型预测控制NMPC例子

NMPC概述 非线性模型预测控制(Nonlinear Model Predictive Control, NMPC)是一种用于控制非线性系统的高级控制策略。与线性MPC不同,NMPC需要处理系统的非线性特性,这使得优化问题更加复杂。NMPC通常使用迭代优化算法来求解非线性优化问题 NMPC基本原理 NMPC的目标是最小…

社交“学习伙伴”:Meta Llama助力对话升级

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

程序猿大战Python——pycharm软件的使用

基础配置 目标&#xff1a;了解PyCharm软件的基础配置处理。 修改背景颜色&#xff1a; Appearance -> Theme 修改字体大小&#xff1a; 搜索font -> Font 例如&#xff0c;一起完成背景、字体大小的修改。 总结&#xff1a; &#xff08;1&#xff09;如果要对PyChar…

MAX7219(模拟SPI)驱动灯环的简单应用

文章目录 一、MAX7219是什么&#xff1f;二、使用步骤1.硬件1.1 引脚说明1.2 应用电路1.2.1 驱动数码管1.2.2 驱动点阵 2.软件2.1 时序2.2 寄存器2.2.1 掉电寄存器2.2.2 译码模式寄存器2.2.3 亮度寄存器2.2.4 扫描寄存器2.2.5 显示测试寄存器 2.3 初始化2.4 控制左侧灯环特定位…

【数据结构】排序——插入排序,选择排序

前言 本篇博客我们正式开启数据结构中的排序&#xff0c;说到排序&#xff0c;我们能联想到我之前在C语言博客中的冒泡排序&#xff0c;它是排序中的一种&#xff0c;但实现效率太慢&#xff0c;这篇博客我们介绍两种新排序&#xff0c;并好好深入理解排序 &#x1f493; 个人主…