【CVPR2024】Efficient LoFTR: 高效的 LoFTR:具有类似稀疏的速度的半密集局部特征匹配
Efficient LoFTR: 高效的 LoFTR:具有类似稀疏的速度的半密集局部特征匹配
Efficient LoFTR realtime_demo
0.摘要
\qquad 我们提出了一种新的方法来有效地产生跨图像的半密集匹配。以往的无探测器匹配器LoFTR在处理大视点变化和纹理差的场景下表现出了出色的匹配能力,但效率较低。我们重新审视了它的设计选择,并得出了效率和准确性的多重改进。一个关键的观察是,由于共享的局部信息,在整个特征映射上执行转换是冗余的,因此我们提出了一种具有自适应令牌选择的聚合注意力机制以提高效率。
此外,我们发现LoFTR的精细相关模块存在空间方差,这不利于匹配精度。提出了一种新的两级相关层,以实现精确的亚像素对应,从而提高精度。 我们的效率优化模型比LoFTR快2.5倍,甚至可以超过最先进的高效稀疏匹配管道SuperPoint + LightGlue。此外,大量的实验表明,与竞争对手的半密集匹配器相比,我们的方法可以达到更高的精度,并具有可观的效率优势。这为大规模或延迟敏感的应用(如图像检索和3D重建)开辟了令人兴奋的前景。
项目地址:https://zju3dv.github.io/efficientloftr/。
1.简介
\qquad 最近,LoFTR 引入了一种带有transformer的无检测器匹配范式,可以在不检测关键点的情况下直接在两个图像之间建立半密集对应关系。借助Transformer机制来捕获全局图像环境和无检测器设计,LoFTR表现出强大的匹配具有挑战性的对的能力,特别是在纹理较差的场景中。为了减轻计算负担,LoFTR采用从粗到细的流水线,首先在下采样的粗大特征图上进行密集匹配,其中应用了Transformer。然后,通过裁剪基于粗匹配的特征块,执行特征相关性,并计算相关性块的期望值,固定粗匹配在一张图像上的特征位置,同时在另一幅图像上搜索它们的子像素对应关系。
\qquad 尽管LoFTR的匹配性能令人印象深刻,但由于在整个粗糙特征图上执行Transformer的令牌大小较大,因此效率有限,这严重阻碍了图像检索和SfM 等实际的大规模使用。LoFTR的大量后续工作都试图提高其匹配精度。然而,很少有方法专注于无检测器匹配的匹配效率。QuadTree Attention 将多尺度变换与逐渐缩小的注意力跨度相结合,以避免在大型特征图上执行注意力。这种策略可以降低计算成本,但它也会将单个粗略的注意力过程划分为多个步骤,从而导致延迟增加。
\qquad 在本文中,我们重新审视了无探测器匹配器LoFTR的设计决策,并提出了一种新的匹配算法,该算法在进一步提高精度的同时,挤出冗余计算以显著提高效率。如图 1 所示,与最近的图像匹配方法相比,我们的方法实现了最佳的推理速度,同时在准确性方面具有竞争力。我们的主要创新在于引入令牌聚合机制进行有效的特征转换,并引入两阶段关联层进行对应细化。具体来说,我们发现像在LoFTR中那样在整个粗糙特征图上密集执行全局注意力是不必要的,因为注意力信息在局部区域是相似和共享的。因此,我们设计了一种聚合注意力机制,用于对自适应选择的标记进行特征转换,该机制明显紧凑,有效降低了局部特征转换的成本。
\qquad 此外,我们观察到LoFTR的匹配细化阶段可能存在空间差异,这是由于存在噪声特征相关性时对整个相关性补丁的期望引起的。为了解决这个问题,我们的方法设计了一个两阶段关联层,首先在精细的特征斑块上定位像素级匹配和准确的互近邻匹配,然后通过在微小斑块内进行局部相关性和期望来进一步细化亚像素级的匹配。
\qquad 在单调估计、相对姿态恢复以及视觉定位等多个任务上进行了广泛的实验,以证明我们的方法的有效性。我们的管道将无探测器匹配推向了前所未有的效率,比 LoFTR 快约 2.5 倍,甚至可以超过目前最先进的高效稀疏匹配器 LightGlue [30]。此外,与竞争性的无检测器基线[7,14,15]相比,我们的框架可以达到相当甚至更好的匹配精度,效率相当高。
\qquad 综上所述,本文有以下贡献:
• 基于对精度的全面回访,具有多个im改进的新的无探测器匹配流水线。• 一种新型的聚合注意力网络,用于高效的局部特征转换。• Anovel两阶段相关细化层,用于准确和亚像素级的精细对应
2. 原理
- 想了一下还是不翻译论文了,简单说一下吧
图2.管道概述
(1)给定一对图像,CNN网络提取粗略的特征图̃FA和ƃFB,以及精细特征。
(2)然后,我们通过交错我们聚合的自我注意力和交叉注意力N次,将粗糙的特征转换为更具判别性的特征图,其中自适应地进行特征聚合以减小每次注意力之前的令牌大小以提高效率。
(3)将变换后的粗略特征与得分矩阵S相关联,然后进行互近邻(MNN)搜索,建立粗略匹配{Mc}。
(4)为了细化粗匹配,通过将变换后的粗特征̃ Ft A, ̃ Ft B与骨干特征融合,在全分辨率下得到判别性精细特征ˆ Ft A, ˆ Ft B。然后,将特征块裁剪为每个粗匹配 Mc 的中心。经过两阶段细化以获得亚像素对应Mf。
- 详细的变压器模块比较。与LoFTR使用特征图的所有标记来计算注意力并诉诸线性注意力以降低计算成本不同,所提出的注意力模块首先聚合显著性标记的特征,这对于注意力的效率明显更高。然后,利用普通注意力来转换聚合特征,其中插入相对位置编码以捕获空间信息。转换后的特征被上采样并与原始特征融合,形成最终特征。
3. 效果
demo_comparison
相关文章:

【CVPR2024】Efficient LoFTR: 高效的 LoFTR:具有类似稀疏的速度的半密集局部特征匹配
Efficient LoFTR: 高效的 LoFTR:具有类似稀疏的速度的半密集局部特征匹配 Efficient LoFTR realtime_demo 0.摘要 \qquad 我们提出了一种新的方法来有效地产生跨图像的半密集匹配。以往的无探测器匹配器LoFTR在处理大视点变化和纹理差的场景下表现出了出色的匹配能力…...

【Golang 面试 - 基础题】每日 5 题(九)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...

《程序猿入职必会(4) · Vue 完成 CURD 案例 》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...

编程技巧:如何优雅地合并两个有序数组?
目录 题目引用描述1.直接合并 排序2.指针3.后逆向双指针进阶:你可以设计实现一个时间复杂度为 O(m n) 的算法解决此问题吗?总结 题目 来自力扣 引用 合并两个有序数组 给你两个按 **非递减顺序 **排列的整数数组 nums1 和 nums2,另有两个整…...

Vue组件库移动端预览实现原理
引言 大家如果使用过移动端组件库(比如:Vant),会发现在网站右侧有一个手机端的预览效果。 而且这个手机端预览的内容和外面的组件代码演示是同步的,切换组件的时候,移动端预览的内容也会发生相应的变化。 …...

FastAPI(七十五)实战开发《在线课程学习系统》接口开发-- 创建课程
源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 上次我们分享了,FastAPI(七十四)实战开发《在线课程学习系统》接口开发-- 删除留言 从本篇文章开始,…...
【C++】 条件变量实现线程同步示例
在做一些比较大的项目的时候,需要实现线程同步, 这里结合一个小示例,进行线程同步的讲解 问题定义 以下是一个使用 C 多线程和条件变量的示例,展示了线程 A 接收一个 enable 信号并通知线程 B 开始工作。线程 B 在开始工作之前…...
linux下载redis安装并指定配置文件启动
linux下载redis并安装启动: cd /usr/local/src 下载redis压缩包 wget http://download.redis.io/releases/redis-6.2.6.tar.gz 解压 tar -xzf redis-6.2.6.tar.gz 编译和安装redis make make install 安装完成后进入 redis 安装目录 cd /usr/local/bin 修改…...

线性结构、线性表、顺序表、链表、头插法、尾插法、中间插入或删除一个节点
梳理几个名词: 逻辑地址:就是说是第几个元素。 物理地址:也就是存储地址,在计算机里具体存放的位置。 线性表的存储结构分为: (1)顺序存储结构:将数据依次存储在连续的整块物理空…...

C# Task.WaitAll 的用法
目录 简介 1.WaitAll(Task[], Int32, CancellationToken) 2.WaitAll(Task[]) 3.WaitAll(Task[], Int32) 4.WaitAll(Task[], CancellationToken) 5.WaitAll(Task[], TimeSpan) 结束 简介 Task.WaitAll 是 C# 中用于并行编程的一个的方法,它属于 System.Threa…...
vue2 前端实现pdf在线预览(无插件版)
toFielDetail()是点击预览的方法,getOfficialFile是获取文件流的接口正常定义即可: export function getOfficialFile(query) {return request({url: /dataAsset/projectassess/getOfficialFile,method: get,params: query,}); } 调用接口的页面需要引用…...

排序XXXXXXXXX
信息学奥赛|常见排序算法总结(C+) - 腾讯云开发者社区-腾讯云 (tencent.com) https://cloud.tencent.com/developer/news/975232 常用序号层级排序 一、序号 序号Sequence Number,有顺序的号码,如数字序号…...

【文件解析漏洞】实战详解!
漏洞描述: 文件解析漏洞是由于中间件错误的将任意格式的文件解析成网页可执行文件,配合文件上传漏洞进行GetShell的漏洞! IIS解析漏洞: IIS6.X: 方式一:目录解析 在网站下建立文件夹的名字为.asp/.asa 的文件夹,其目…...

【杂谈】学会让你节省三秒钟——Dev-c++的缺省源
【杂谈】学会让你节省三秒钟——Dev-c的缺省源 1.前言2.缺省源的介绍3.注意 1.前言 你是否在为每次写程序都要自己手打一遍框架而感到苦恼?为什么大佬的Dev-C一新建文件就会自动出现程序框架?看完这篇文章,让你也能成为大佬,不用再…...

推荐一款前端滑动验证码插件(Vue、uniapp)
uniapp版本:滑块拼图验证码,有后端,简单几步即可实现,小程序、h5都可以用 - DCloud 插件市场 Vue版本及cdn版本可以查阅文档: 行为验证 | Poster 文档 示例代码: <template><view id"app&…...
【Git】git stash
目录 基本概念参数详解listshowsavepushpop|applydropclearbranch 参考文章 Git的stash命令是一个非常实用的功能,它允许开发者临时保存工作目录和暂存区的更改,以便能够切换到其他分支或进行其他操作,而不会丢失当前的修改。以下是git stash…...

不得不安利的程序员开发神器,太赞了!!
作为一名程序员,你是否常常为繁琐的后端服务而感到头疼?是否希望有一种工具可以帮你简化开发流程,让你专注于创意和功能开发?今天,我要向大家隆重推荐一款绝佳的开发神器——MemFire Cloud。它专为懒人开发者准备&…...
吴恩达机器学习C1W2Lab06-使用Scikit-Learn进行线性回归
前言 有一个开源的、商业上可用的机器学习工具包,叫做scikit-learn。这个工具包包含了你将在本课程中使用的许多算法的实现。 目标 在本实验室你可以: 利用scikit-learn实现基于正态方程的近似解线性回归 工具 您将使用scikit-learn中的函数以及ma…...

CSS实现表格无限轮播
<div className{styles.tableTh}><div className{styles.thItem} style{{ width: 40% }}>报警名称</div><div className{styles.thItem} style{{ width: 35% }}>开始时间</div><div className{styles.thItem} style{{ width: 25% }}>状态&…...
编程小白如何从迷茫走出
针对新生们常常感到的迷茫,以下是如何选择适合自己的编程语言、如何制定有效的学习计划以及如何避免常见的学习陷阱的详细建议: 一、如何选择适合自己的编程语言 明确需求和目标:不同的编程语言有不同的特点和适用场景。例如,Py…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...