【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…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
