XFeat:速度精度远超superpoint的轻量级图像匹配算法

代码地址:https://github.com/verlab/accelerated_features?tab=readme-ov-file

论文地址:2404.19174 (arxiv.org)

XFeat (Accelerated Features)重新审视了卷积神经网络中用于检测、提取和匹配局部特征的基本设计选择。该模型满足了对适用于资源有限设备的快速和鲁棒算法的迫切需求。由于准确的图像匹配需要足够大的图像分辨率,算法在限制网络中通道数量的同时保持尽可能大的分辨率。

该模型提供稀疏或半密集级别的匹配选择,每种匹配可能更适合不同的下游应用,例如视觉导航和增强现实。并且是第一个提供有效半稠密匹配的模型,它利用了一个依赖于粗略局部描述符(coarse local descriptors)的新型匹配细化模块。

XFeat是全面的并且不依赖于硬件,在速度上超越了当前基于深度学习的局部特征模型(速度提高了 5 倍),具有相当或更好的准确性,在姿势估计和视觉定位方面得到了验证。


1.Introduction

图像特征提取在移动机器人、增强现实等领域起着至关重要的作用,而在计算资源受限的平台上提取特征点需要对现有架构进行硬件级优化。而本工作致力于通过设计高效特征提取的架构,实现在资源有限的设备中快速和鲁棒的特征匹配算法。本文提出XFeat,被设计为与硬件无关,使用精心设计的策略执行关键点检测和局部特征提取,以尽可能减少计算占用空间,同时保持鲁棒性和准确性。

本文的主要贡献如下:

1、一种新颖的轻量级 CNN 架构,可以部署在资源受限的平台和需要高吞吐量或计算效率的下游任务上,而无需耗时的硬件特定优化

2、设计了一种极简、可学习的关键点检测分支,该分支速度快,适用于小型特征提取骨干网络,展示了其在视觉定位、相机姿态估计和单调配准方面的有效性

3、提出了一种用于从粗半稠密匹配中获得像素级偏移的匹配细化模块。与现有技术相比,该新策略除了局部描述子本身外,不需要高分辨率特征,大大减少了计算量


匹配效果如下:

2.XFeat: Accelerated Features

局部特征提取精度很大程度上取决于输入图像分辨率。例如,在相机姿势、视觉定位和 SfM 任务中,对应关系应该足够细粒度,以允许像素级匹配。然而,将高分辨率图像输入网络主干网会将计算要求提高到不希望的水平,即使对于简单的小型网络主干,如类似SuperPoint VGG-like的架构。在本节中,介绍如何使用最小化计算预算的策略来显着降低计算成本,同时减轻由于更小的 CNN backbone而导致的鲁棒性损失。

2.1. Featherweight Network Backbone

I\in \mathbb{R}^{H\times W\times C}表示一张灰度图,其中H是高度,W是宽度(以像素为单位),C=1表示通道数。为了降低CNN的处理成本,一种常见的方法是从浅层卷积开始,逐渐将空间维度(H,W)减半,同时将第i个卷积块中的通道数C加倍。假设卷积层具有单位步幅、填充、无偏置项和k\times k大小的核,则第i层的浮点运算(F_{ops}) 的卷积计算成本可以表示为:

在整个网络中修剪通道C会损害其处理照明和视角变化等挑战的能力。

在一些使用深度可分离卷积的高效网络中,在3*3卷积的情况下将F_{ops}减少了9倍之多,但是在局部特征提取中,在较浅的网络处理较大分辨率图像的情况下,与分类和目标检测等低分辨率输入场景相比,使用深度可分离卷积这种方法的效果较差。这导致浅层网络的表示能力有限,局部特征提取的速度增益很小。

在上式(1)中,H_{i} *W_{i}成为影响CNN的主要计算瓶颈。SuperPoint和 ALIKE均匀地减小通道深度和层数以缓解该问题。本文深入研究了问题的核心,制定了一种策略来最小化早期层深度并重新配置通道分布,从而显着改善了精度计算的权衡(accuracy-compute trade-of)。由于空间分辨率高,该策略尽可能减少初始卷积层中的通道数。为了平衡参数减少,随着空间分辨率的降低,将通道数增加两倍,而不是坚持传统的类似VGG的方法,直到达到足够数量的通道(通常为128个局部特征主干)。

这种策略的特点是随着分辨率减半,卷积深度增加了三倍,有效地重新分配了网络的卷积深度。它确保了早期层的最小深度,同时补偿了整个网络主干参数量的减少。这种方法不仅显著降低了早期阶段的计算负载,特别是对于高分辨率图像,而且还通过更有效地管理卷积深度来优化网络的整体容量。从C=4通道开始,到最终编码器模块中的C=128结束,实现了H/32\times W/32的空间分辨率,在精度和加速增益之间有很好的权衡。

网络的简单性体现在称为基本层的块中,一个卷积核大小从 1 到 3 的 2D 卷积,ReLU + BatchNorm,以及用于分辨率降低的步幅为2 ,形成卷积块,每个卷积块都是基本层的复合体。主干具有六个块,分辨率减半并依次增加深度:{4、8、24、64、64、128},以及一个用于多分辨率特征的融合块。

2.2. Local Feature Extraction

在本节中,将介绍如何使用backbone来提取局部特征并执行密集匹配。

Descriptor head.Descriptor head提取密集的特征图F\in \mathbb{R}^{H/8\times W/8\times 64},通过合并来自编码器的多尺度特征而获得。通过使用特征金字塔策略,并通过应用连续卷积块来廉价地增加网络的感受野,直到达到原始分辨率的1/32,这种策略在局部特征提取方面取得了成功,提高了对视点变化的鲁棒性,并且是小型网络backbones在实践中良好工作的关键因素。合并了三个不同尺度级别的中间表示:{1/8,1/16,1/32},通过双向上采样将所有中间表示投影到 H/8 × W/8 × 64,然后进行元素求和。最后,利用由三个基本层组成的卷积融合块,将表示组合成最终的特征表示F。使用额外的卷积模块对可靠性映射R\in \mathbb{R}^{H/8\times W/8}进行回归,该映射对给定局部特征F_{i,j}可以可靠匹配的无条件概率R_{i,j}进行建模。如图3所示

Keypoint head. 一般来说,局部特征提取的主干依赖于UNet、VGG和ResNets。SuperPoint中使用的策略提供了提取像素级关键点的最快方法。它使用最终编码器中具有原始图像分辨率 1/8 的特征,并通过从特征嵌入中对 8×8 网格中的关键点坐标进行分类来提取像素级关键点。本文采用类似于 SuperPoint 的策略,区别在于本文引入了一种新的方法,该方法采用专用的并行分支进行关键点检测,专注于low-level图像结构。如消融实验(第 4.4 节)所示,通过在单个神经网络主干中联合训练描述子和关键点回归器,显着降低紧凑 CNN 架构的半稠密匹配性能。

通过极简卷积分支有效地利用低级特征。为了在不牺牲速度的情况下保持空间分辨率,将输入图像表示为每个网格单元上由8×8个像素组成的2D网格,并将每个单元重塑为64维特征。这种表示保留了单个网格单元内的空间粒度,同时利用快速的 1 × 1 卷积来回归关键点坐标。在四个卷积层之后,获得了一个关键点嵌入K\in \mathbb{R}^{H/8\times W/8\times (64+1)},编码单元k_{i,j} \in K内的关键点分布的logits,并将该关键点分类为k_{i,j} \in \mathbb{R}^{65}内的64个可能位置之一,加上一个dustbin以考虑没有发现关键点的情况。在推理过程中,dustbin被丢弃,热图被重新解释为 8 × 8 单元格。如图3所示。

Dense matching. 最近的一些研究证明了密集图像区域匹配的好处,提高了覆盖范围和鲁棒性。本文提出了一种用于密集特征匹配的轻量级模块,与其他detector-free方法在两个方面有所不同。首先,通过根据可靠性得分R_{i,j}选择top-K个图像区域来控制内存和计算占用空间,并将它们缓存以备将来匹配。其次,提出了一种简单轻量级的多层感知器(MLP),可以在没有高分辨率特征图的情况下进行coarse-to-fine匹配,使我们能够在资源受限的环境中进行半稠密匹配。

给定密集的局部特征图F,输入空间分辨率的 1/8或子集F_{s} \in F,本文提出了一种简单的细化策略来恢复像素级偏移。设f_{a} \in F_{1}f_{b} \in F_{2}两个匹配特征,通过从图像对(I_{1},I_{2})的传统最近邻匹配获得。预测偏移量o =MLP(concat(f_{a},f_{b})),对偏移量(x,y)进行分类,从而在原始图像分辨率下实现正确的像素级匹配:

其中 o\in \mathbb{R}^{8\times 8}是可能偏移量上概率分布的对数。

匹配细化模块与网络backbone一起以端到端的方式进行训练,确保中间特征表示在紧凑的嵌入空间中保留细粒度的空间细节。偏移预测以粗略匹配的特征对(f_{a},f_{b})为条件,从而减少了搜索空间。图 4 展示了轻量级匹配细化模块。


3. Experiments

作者在相对相机姿态估计、视觉定位和单应性估计(homography estimation)方面评估了XFeat。通过消融实验证明本文设计的决策是合理的,并在无 GPU 设置中进行了全面的耗时分析。

3.1. Relative pose estimation

Setup. Megadepth和 ScanNet测试集的使用与之前的工作相同,在与本文的训练集不重叠的场景中提供相机姿势。这些场景同时包含显着的视点和照明变化,并呈现重复的结构。LO-RANSAC用于估计essential matrix。作者搜索每种方法的最佳阈值,并调整图像大小,在Megadepth使最大尺寸变为 1,200 像素,并在ScanNet使用默认 (VGA) 分辨率。

Metrics. 使用阈值为 {5, 10, 20}的曲线下面积(AUC)。此外,本文还报告了Acc@10°,即最大角度误差低于 10 度的姿势比例、平均内点比 (MIR),即符合 RANSAC 后估计模型的匹配点的比率,以及内点的数量 (#inliers)。最后,在没有 GPU 和 Intel(R) i5-1135G7 @ 2.40GHz CPU 的预算友好型笔记本电脑上测量每种方法的每秒帧数 (FPS)。还指出描述子是浮点(用 f 表示)还是基于二进制(用 b 表示)并报告描述子维数 (dim)。

Results. 表 1 显示了 Megadepth-1500 上相对相机姿态估计任务的指标。

本文的方法比最快的基于学习的解决方案(ALIKE)快得多(5×),并且在稀疏设置中在几个指标上取得了有竞争力的结果。此外,考虑到相同数量的描述子,它可以在 AUC@20°、Acc@10° 和 MIR 上使用 10000 个描述子为密集匹配配置提供最先进的结果,与DISK*相比,DISK*是一个更大的模型。图 5 显示了 XFeat 在现有解决方案中脱颖而出的示例。

与 DISK 和 SuperPoint 相比,本文的方法还允许与低维描述子 (64-f) 进行更有效的匹配。补充材料中提供了详细的时间分析,并与最近流行的学习匹配器进行了额外的定量比较。值得一提的是,由于需要对描述子进行插值并在更粗的分辨率下预测偏移量,因此本文在更宽松的阈值中获得了最先进的结果。表 2 显示了 ScanNet-1500 室内影像中最具竞争力的方法的 AUC 值。请注意,没有重新训练任何方法。DISK和ALIKE显示出偏向地标数据集的迹象,而本文的方法则表现出卓越的泛化性。补充材料中提供了有关ScanNet和Megadepth的更详细的讨论和定性结果。


3.2. Homography estimation

Setup.本文使用了广泛采用的HPatches数据集,其中包含来自平面场景的图像序列,具有中等到强烈的视角和照明变化。与相对姿态估计类似,本文使用 MAGSAC++在给定每种方法的对应关系的情况下稳健估计单应性变换。

Metrics. 遵循ALIKE协议并估计平均单应性准确度(MHA)。使用预定义的阈值为 {3, 5, 7} 像素。通过使用GT单应性和估计值将四个参考图像角变形到目标图像,考虑了以像素为单位的平均角误差来计算精度。

Results. 表 3 显示本文的方法与最准确的描述符相当,加强了本文提出的关键点和描述符头的鲁棒性。相比之下,ORB 和 SiLK 等其他轻量级解决方案的性能在照明和视点分割方面受到严重影响,因为它们在处理难例图像对中存在的激进视点和照明变化方面的能力有限。本文的方法也适用于不太严格的阈值。


3.3. Visual localization

Setup.HLoc用于定位来自Aachen数据集的昼夜场景图像。给定提供的关键点对应关系,HLoc 使用可用的GT相机姿势对 SfM 地图进行三角测量。然后,使用关键点匹配在 3D 地图中定位一组单独的查询图像。为了公平地进行比较,作者调整了图像的大小,使最大尺寸保持在 1024 像素,并提取了所有方法的前 4096 个关键点。

Metrics. 使用 HLoc 提供的标准指标,即在位置误差 {0.25m, 0.5m, 5m} 和旋转误差 {2°, 5°, 10°} 的阈值内正确估计的相机姿势的准确性。

Results. 表4显示了视觉定位实验的结果。本文的方法表现出与SuperPoint和DISK等领先方法相似的性能,同时实现了显着的速度优势,速度至少快了9倍,描述子也更紧凑。这些发现挑战了文献中的普遍趋势,即为下游任务采用更大、更复杂的模型。相反,它们强调了更简单模型的功效,这些模型不仅与精度相匹配,而且还提供了在资源受限系统上高效运行的好处。


3.4. Ablation

在表 5 中列出了几种配置来消融对比本文的架构。

评估了使用额外的synthetic warps(i) 进行训练是否有助于模型对具有挑战性的图像对变得更加鲁棒。真实变形和合成变形数据集上训练都是有益的,尤其是对于密集匹配设置。

其次,评估是否可以进一步减少网络中的通道数(ii)。作者将最后三个卷积块的通道减半为 32 个,而不是 64 个,但对于稀疏和密集设置,性能都会显著下降。作者还演示了为关键点检测设计并行分支背后的基本原理。

如果没有本文提出的keypoint head (iii),在类似于SuperPoint的输出描述子嵌入之上使用额外的卷积块。如表 5 所示,在这种特定设置下训练时,XFeat*的性能会下降,因为有限的网络大小限制了中间嵌入的容量,使它们在不可重复区域中的半稠密匹配效率降低,从而对匹配细化任务产生不利影响。因此,作者选择设计一个并行分支,在稀疏匹配和稠密匹配之间提供很好的权衡,如表 5 – Default和 (iii) 所示。

最后,作者评估了所提出的匹配细化模块的好处。对于XFeat*来说,匹配细化步骤对于提高准确性至关重要。在作者的基准测试中,与平均 10,000 个描述子的 MNN 匹配相比,该模块仅会产生额外的 11% 推理成本。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在table中获取每一行scope的值

目的 当前有一份如下数据需要展示在表格中&#xff0c;表格的页面元素套了一个折叠面板&#xff0c;需要循环page_elements中的数据展示出来 错误实践 将template放在了折叠面板中&#xff0c;获取到的scope是空数组 <el-table-column label"页面元素" show-o…

【并发程序设计】15.信号灯(信号量)

15.信号灯(信号量) Linux中的信号灯即信号量是一种用于进程间同步或互斥的机制&#xff0c;它主要用于控制对共享资源的访问。 在Linux系统中&#xff0c;信号灯作为一种进程间通信&#xff08;IPC&#xff09;的方式&#xff0c;与其他如管道、FIFO或共享内存等IPC方式不同&…

分析和设计算法

目录 前言 循环不变式 n位二进制整数相加问题 RAM模型 使用RAM模型分析 代码的最坏情况和平均情况分析 插入排序最坏情况分析 插入排序平均情况分析 设计算法 分治法 总结 前言 循环迭代&#xff0c;分析算法和设计算法作为算法中的三个重要的角色&#xff0c;下面…

Java——二进制原码、反码和补码

一、简要介绍 原码、反码和补码只是三种二进制不同的表示形式&#xff0c;每个二进制数都有这三个形式。 1、原码 原码是将一个数的符号位和数值位分别表示的方法。 最高位为符号位&#xff0c;0表示正&#xff0c;1表示负&#xff0c;其余位表示数值的绝对值。 例如&…

如何解决游戏行业DDOS攻击问题

随着网络游戏行业的迅速发展&#xff0c;网络游戏问题也不可忽视&#xff0c;特别是目前网络攻击频发&#xff0c;DDoS攻击的简单化以及普及化&#xff0c;对游戏来说存在非常大的安全威胁。 随着受攻击对象的范围在不断地拓展&#xff0c;网络游戏这种这种新型并且有着丰厚利…

Scala编程基础3 数组、映射、元组、集合

Scala编程基础3 数组、映射、元组、集合 小白的Scala学习笔记 2024/5/23 14:20 文章目录 Scala编程基础3 数组、映射、元组、集合apply方法数组yield 数组的一些方法映射元组数据类型转换求和示例拉链集合flatMap方法 SetHashMap apply方法 可以new&#xff0c;也可以不new&am…

flink Jobmanager metaspace oom 分析

文章目录 现象作业背景分析现象分析类卸载条件MAT 分析 解决办法flink 官方提示 现象 通过flink 页面提交程序&#xff0c;多次提交后&#xff0c;jobmanager 报metaspace oom 作业背景 用户代码是flink 代码Spring nacos 分析 现象分析 从现象来看肯定是因为有的类没有被…

Linux系统-前台任务组,后台任务组

文章目录 前台进程后台进程新命令jobsfg 【后台进程组序号】ctrlz组合键信号 和 bg命令ctrlz组合键信号bg 【后台进程组序号】 session会话此时我们关闭本次的会话&#xff0c;我们的后台进程是否也会退出呢&#xff1f; 总结 前台进程 在我们远程登录Linux服务器后&#xff0…

创建__init__()方法

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在创建类后&#xff0c;可以手动创建一个__init__()方法。该方法是一个特殊的方法&#xff0c;类似Java语言中的构造方法。每当创建一个类的新实例时…

【AI界的狼人杀】人工智能“反图灵测试”实验

5月28日&#xff0c; AI Power Users、Unity 独立开发者&#xff1a;Tore Knabe 在其社交平台发布了一则名为《Reverse Turing Test Experiment with AIs》的视频&#xff0c;立马引发了热议。 视频中共出现了五位主要角色&#xff0c;“他们”分别是&#xff1a;亚里士多德&am…

961操作系统知识总结

部分图片可能无法显示&#xff0c;参考这里&#xff1a;https://zhuanlan.zhihu.com/p/701247894 961操作系统知识总结 一 操作系统概述 1. 操作系统的基本概念 重要操作系统类型&#xff1a;批处理操作系统(批量处理作业&#xff0c;单道批处理/多道批处理系统&#xff0c;用…

RabbitMQ-直连交换机(direct)使用方法

RabbitMQ-默认读、写方式介绍 RabbitMQ-发布/订阅模式 目录 1、概述 2、直连交换机 3、多重绑定 4、具体代码实现 4.1 生产者部分 4.2 消费者部分 5、运行代码 6、总结 1、概述 直连交换机&#xff0c;可以实现类似路由的功能&#xff0c;消息从交换机发送到哪个队列…

夜天之书 #98 Rust 程序库生态合作的例子

近期主要时间都在适应产品市场&#xff08;Product Marketing&#xff09;的新角色&#xff0c;不少想法还在酝酿和斟酌当中&#xff0c;于是文章输出没有太多时间来推敲和选题&#xff0c;只能保持每月发布相关的进展或一些零碎的思考。或许我可以恢复最早的模式&#xff0c;多…

YOLOv8改进(一)-- 轻量化模型ShuffleNetV2

文章目录 1、前言2、ShuffleNetV2代码实现2.1、创建ShuffleNet类2.2、修改tasks.py2.3、创建shufflenetv2.yaml文件2.4、跑通示例 3、碰到的问题4、目标检测系列文章 1、前言 移动端设备也需要既准确又快的小模型。为了满足这些需求&#xff0c;一些轻量级的CNN网络如MobileNe…

十_信号4-SIGCHLD信号

SIGCHLD信号 在学习进程控制的时候&#xff0c;使用wait和waitpid系统调用何以回收僵尸进程&#xff0c;父进程可以阻塞等待&#xff0c;也可以非阻塞等待&#xff0c;采用轮询的方式不停查询子进程是否退出。 采用阻塞式等待&#xff0c;父进程就被阻塞了&#xff0c;什么都干…

力扣83. 删除排序链表中的重复元素

Problem: 83. 删除排序链表中的重复元素 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义快慢指针fast、slow均指向head&#xff1b; 2.每次fast后移一位&#xff0c;当fast和slow指向的节点值不一样时&#xff0c;将slow.next指向fast同时使slow指向fast&#xff1b; 3…

MyBatis框架-开发方式+参数传递+#{}、${}+返回值处理+查询结果封装为对象+resultType

一、开发方式 MyBatis-Dao层Mapper接口化开发 二、注意事项 1、Mapper接口与Mapper.xml映射文件要满足4个对应 &#xff08;1&#xff09;Mapper接口的全类名必须与Mapper映射文件中的namespace相同 &#xff08;2&#xff09;Mapper接口中的每一个方法名在Mapper映射文件…

回溯算法之电话号码字母组合

题目&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "2…

Java web应用性能分析之【jvisualvm远程连接云服务器】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 前面整理了java进程问题分析和分析工具&#xff0c;现在可以详细看看jvisualvm的使用&#xff0c;一般java进程都是部署云服务器&#xff0c;或者托管IDC机…

每周统计-20240531

用于测试程序的稳定性&#xff1a; 龙虎榜&#xff1a; 成交额&#xff1a; 封成比&#xff1a; 收盘前放量&#xff1a; 开盘抢筹&#xff1a; 封单额&#xff1a;