当前位置: 首页 > news >正文

深度学习论文: 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是线程不安全的&#xff0c…...

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…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

如何在网页里填写 PDF 表格?

有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据&#xff…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...