深度学习论文: XFeat: Accelerated Features for Lightweight Image Matching
深度学习论文: XFeat: Accelerated Features for Lightweight Image Matching
XFeat: Accelerated Features for Lightweight Image Matching
PDF: https://arxiv.org/pdf/2404.19174
PyTorch代码: https://github.com/shanglianlm0525/CvPytorch
PyTorch代码: https://github.com/shanglianlm0525/PyTorch-Networks
1 概述
为了降低计算成本并保持竞争性的准确性,本项工作带来了以下三大核心贡献:
(1)提出了一种创新的轻量级卷积神经网络(CNN)架构,这种架构能在资源有限的平台上高效运行,并且适用于要求高吞吐量或计算效率的下游任务。其特点在于无需进行耗时的硬件特定优化。此外,XFeat作为一种灵活的解决方案,能够轻松替换现有的轻量级手工解决方案、昂贵的深度模型以及轻量级深度模型,特别在视觉定位和相机姿态估计等下游任务中展现出显著优势。
(2)设计了一个简洁而可学习的关键点检测分支,该分支不仅速度快,而且特别适用于小型特征提取器骨干网络。通过视觉定位、相机姿态估计和单应性注册等应用场景,我们验证了其高效性和实用性。
(3)还提出了一种独特的匹配细化模块,该模块能够从粗略的半密集匹配中精准地获取像素级偏移。与现有技术相比,XFeat不仅依赖局部描述符本身,而且无需高分辨率特征,从而显著降低了计算成本。
2 XFeat: Accelerated Features
XFeat提取一个关键点热图K,一个紧凑的64-D密集描述符映射F,和一个可靠性热图R。它通过早期下采样和浅层卷积,然后在后续编码器中进行更深的卷积以实现无与伦比的速度。与典型方法相反,它将关键点检测分离成一个独立的分支,使用1×1的卷积在一个8×8的张量块变换图像上进行快速处理。
2-1 Featherweight Network Backbone
在卷积神经网络中,为了减少计算成本,一种常见策略是在初始卷积层使用较少的通道数,然后随着层数增加逐步加倍通道数。然而,在局部特征提取任务中,这种策略的效果并不如在低分辨率任务(例如图像分类和目标检测)中那么有效。这是因为在局部特征提取中,网络需要处理更大的图像分辨率,因此这种增加通道数的方法会导致计算瓶颈。
为了解决这个问题,提出了一种新的策略:在初始卷积层尽可能减少通道数,并随着空间分辨率的降低,不是加倍而是增加三倍的通道数,直到达到足够的通道数(如128)。这种策略有效地重新分配了网络的卷积深度,减少了早期层的计算负载,并优化了网络的整体容量。
网络结构由称为基本层的块组成,每个块包含2D卷积、ReLU激活函数、批量归一化和步长为2的卷积层。backbone包含六个这样的块,按顺序减半分辨率并增加深度:{4, 8, 24, 64, 64, 128},并包含一个融合块以整合多分辨率特征。通过从C=4通道开始,在最终编码器块中增加到C=128通道,实现了在H/32×W/32空间分辨率下的良好的精度和速度平衡。
2-2 Local Feature Extraction
利用骨干网络提取局部特征并执行密集匹配。
Descriptor head: 使用特征金字塔策略,通过连续卷积块逐步降低分辨率,增加感受野,同时合并不同尺度的特征到H/8×W/8×64,然后进行逐元素求和。最后,使用由三个基本层组成的卷积融合块将表示结合成最终的特征表示 F,另外使用一个卷积块来回归可靠性图 R。
Keypoint head: SuperPoint 中使用的策略提供了一种最快的提取像素级关键点的方法。它使用最终编码器中的特征,以原始图像分辨率的1/8,并通过从特征嵌入中对关键点的坐标在展平的8×8网格中进行分类,来提取像素级关键点。XFeat采用了类似于SuperPoint的方法,但引入了一个专门的并行分支来专注于低级图像结构的关键点检测。通过在单个神经网络骨干内联合训练描述符和关键点回归器,显著降低了紧凑型CNN架构的半密集匹配性能。将输入图像表示为一个由8×8像素组成的2D网格,每个网格单元,我们将每个单元重塑为64维特征。这种表示在保持单个单元内的空间粒度的同时,利用快速的1×1卷积来回归关键点坐标。经过四层卷积,我们获得了一个关键点嵌入 K,它编码了单元内关键点分布的logits,并且将关键点分类为64个可能位置之一(训练过程增加一个dustbin用来表示找不到关键点的情况,推理过程中去除dustbin)。
Dense matching: 该模块学习通过仅考虑原始粗糙级别特征中原始空间分辨率的1/8处的最近邻对来预测像素级偏移,从而显着节省内存和计算。
- 首先,通过根据可靠性分数 R 选择前 K 个图像区域并将其缓存以供将来匹配,从而控制内存和计算占用。
- 其次,提出了一个简单轻量的多层感知器(MLP)来执行粗到细的匹配,而无需高分辨率特征图,使我们能够在资源受限的环境中进行半密集匹配。
- 给定两个匹配特征,MLP预测偏移,以在原始分辨率下实现正确的像素级匹配。
整个流程通过端到端训练,确保在紧凑的嵌入空间内保留细粒度的空间细节,同时优化匹配性能。
3 Experiments
相关文章:

深度学习论文: XFeat: Accelerated Features for Lightweight Image Matching
深度学习论文: XFeat: Accelerated Features for Lightweight Image Matching XFeat: Accelerated Features for Lightweight Image Matching PDF: https://arxiv.org/pdf/2404.19174 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.…...
C++之Eigen库基本使用
目录 1、矩阵的构造和初始化操作 2、矩阵的算术运算 3、矩阵的分解和求解 4、矩阵的变换 5、矩阵的访问和修改 6、矩阵遍历 7、线性方程组求解 8、其他操作 Eigen库是一个高级的C库,用于线性代数,矩阵和向量运算,数值分析和相关的数学…...

2024年 Java 面试八股文——SpringBoot篇
目录 1. 什么是 Spring Boot? 2. 为什么要用SpringBoot 3. SpringBoot与SpringCloud 区别 4. Spring Boot 有哪些优点? 5. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? 6. Spring Boot 支持哪些日志框架&#…...
C/C++的指针、万能指针、常量指针和指针常量
C/C的指针 1、 指针的概念: 指针是一个变量,它存储的是另一个变量的内存地址,而不是变量的值。 指针变量的声明:在C/C等语言中,我们通过使用星号*来声明一个指针变量。例如,int *ptr; 这行代码声明了一个…...

【讲解下如何解决一些常见的 Composer 错误】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...
qq空间:图片批量下载js脚本工具,javascript批量下载图片
qq空间:图片批量下载js脚本工具,javascript批量下载图片 QQ空间很多老照片想下载,但是腾讯没放开,只能一张张下载太麻烦。用前端js写了一个脚本支持批量下载。另外就是空间内的照片会被压缩,过几年再看,个…...

滑动验证码登陆测试编程示例
一、背景及原理 处理登录时的滑动验证码有两个难点,第一个是找到滑块需要移动的距离,第二个是模拟人手工拖动的轨迹。模拟轨迹在要求不是很严的情况下可以用先加速再减速拖动的方法,即路程的前半段加速度为正值,后半段为负值去模…...
爬取89ip代理、 爬取豆瓣电影
1 爬取89ip代理 2 爬取豆瓣电影 1 爬取89ip代理 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup from requests.exceptions import ProxyErrorclass SpiderIP:def __init__(self):# 定义目标地址哦self.tag_url "https://www.89i…...

XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台
XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台 摘要 随着信息技术的迅速发展,快速构建高质量、高可靠性的企业级应用成为了迫切需求。XBoot,作为一个基于Spring Boot 2.x的一站式前后端分离快速开发平台,通过整合微信…...

24年最新抖音、视频号0成本挂机,单号每天收益上百,可无限挂
详情介绍 这次给大家带来5月份最新的短视频挂机项目,简单易上手,而且不需要任何投入,经过测试收益非常可观,软件完全免费,特别适合没有时间但是想做副业的家人们...

Day31:单元测试、项目监控、项目部署、项目总结、常见面试题
单元测试 保证独立性。 Assert:断言,一般用来比较是否相等,比如 Assert.assertEquals 在JUnit测试框架中,BeforeClass,Before,After和AfterClass是四个常用的注解,它们的作用如下: …...

Flutter笔记:使用Flutter私有类涉及的授权协议问题
Flutter笔记 使用Flutter私有类涉及的授权协议问题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.cs…...
面试过程种遇到的面试题收集
文章目录 讲一讲这个项目是干什么的?需求规格说明书有哪些章节?职工部门层级如何显示在一张SQL表上?需求开发用到了哪些技术?HashMap 底层数据结构说一下?介绍一下红黑树?HashMap是线程不安全的,…...
Vue学习:21.mixins混入
在Vue中,mixins(混入)是一种用于分发Vue组件中可复用功能的灵活机制。它们允许你抽取组件中的共享功能,如数据、计算属性、方法、生命周期钩子等,并将其作为单独的模块复用到多个组件中。这种方式有助于保持代码的DRY&…...

上传文件到 linux
一、mac 法一:scp 先进入mac的 Node_exporter文件(要上传的文件)目录下 输入scp -P 端口号 文件名 rootIP:/存放路径 scp -P 22 node_exporter-1.8.0.linux-amd64.tar.gz root192.***.2:/root 法二、 rz mac 安装 lrzsz,然后…...

NEO 学习之session7
文章目录 选项 A:它涉及学习标记数据。 选项 B:它需要预定义的输出标签进行训练。 选项 C:它涉及在未标记的数据中寻找模式和关系。 选项 D:它专注于根据输入-输出对进行预测。 答案:选项 C 描述了无监督学习的本质&am…...

毕业设计uniapp+vue有机农产品商城系统 销售统计图 微信小程序
本人在网上找了一下这方面的数据发现农村中的信心普及率很是低农民们都不是怎么会用手机顶多就是打打电话发发短信,平时不太会上网更不会想到通过网络手段去卖出自己的劳作成果—农产品,这无疑大大浪费了农民的劳动成果和国家资源也大大打击了人们的生产…...

php使用Canal监听msyql
canal需要java8 去官网下载java8 安装JAVA #创建目录 mkdir -p /usr/local/java/ #解压到目录 tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/配置环境变量在 /etc/profile 最后加入 export JAVA_HOME/usr/local/java/jdk1.8.0_411 export CLASSPATH.:$JAVA_HOM…...

metabase部署与实践
1. 项目目标 (1)了解metabase特点 (2)熟练部署metabase工具 (3)掌握metabase基本使用 2. 项目准备 2.1. 规划节点 主机名 主机IP 节点规划 metabase 10.0.1.141 metabase 2.2. 基础准备 系统镜…...
nacos v2.2.3 docker简单安装使用
nacos v2.2.3 docker简单安装使用 Nacos 官方文档: https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html 控制台: http://127.0.0.1:8848/nacos/ 初始用户名、密码: 账号:nacos 密码:nacos 启动docker…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...