news 2026/10/23 2:48:12

XFeat+LighterGlue 图像匹配实战:3分钟在 CPU 上跑通轻量级实时特征匹配

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
XFeat+LighterGlue 图像匹配实战:3分钟在 CPU 上跑通轻量级实时特征匹配

XFeat+LighterGlue 图像匹配实战:3分钟在 CPU 上跑通轻量级实时特征匹配

【免费下载链接】accelerated_featuresImplementation of XFeat (CVPR 2024). Do you need robust and fast local feature extraction? You are in the right place!项目地址: https://gitcode.com/GitHub_Trending/ac/accelerated_features

如果你也在为特征匹配发愁:SIFT/ORB 扛不住视角和光照变化,SuperPoint 这类深度学习方法在 CPU 上又慢得难以落地——XFeat 大概率就是你要的答案。它是 CVPR 2024 论文XFeat: Accelerated Features for Lightweight Image Matching的官方实现(仓库名accelerated_features):一个"加速型"学习式局部特征提取器,在 VGA 分辨率图像上能直接在 CPU 实时推理,再搭配更小的 LighterGlue 匹配器,几行代码就能搭起完整的图像匹配流水线。读完本文,你 3 分钟内会拿到第一组匹配结果,还能在自己的摄像头上跑起实时匹配演示。

3 分钟跑起来:克隆、装依赖、看到结果 🚀

最短路径只有 4 步,依赖核心只有 torch:

  1. 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ac/accelerated_features cd accelerated_features
  1. 安装依赖(想跑实时 demo 才需要 OpenCV):
pip install torch opencv-contrib-python tqdm
  1. 直接运行官方最小示例,终端会打印关键点、描述符和分数的 shape,并自动做压力测试:
python3 minimal_example.py
  1. 在自己的代码里调用也只要三行:
import torch from modules.xfeat import XFeat xfeat = XFeat() # 自动加载 weights/xfeat.pt out = xfeat.detectAndCompute(torch.randn(1, 3, 480, 640), top_k=4096)[0]

返回的 dict 里有三个东西:keypoints(N,2 坐标)、descriptors(N,64 已 L2 归一化)、scores(N, 可靠性分数)。

原理速览:XFeat 底层在跑什么

不用看源码也能理解它的思路,记住三点即可:

  • 一个网络,三份输出:输入图像 → 先 8 倍降采样 + 浅层卷积保速度 → 输出关键点热力图、64 维稠密描述符图、可靠性热力图;再用 NMS 选出关键点位置,最后在关键点处"采样"出描述符。
  • 检测与描述解耦:两个分支可以独立运行,所以既能做快的稀疏匹配,也能做稠密提取的半稠密匹配,两种模式按需切换。
  • 匹配有三档:稀疏模式用 MNN(互近邻)硬匹配,最快;match_xfeat_star是粗匹配 + 亚像素精化;LighterGlue 是轻量注意力匹配器,比原版 LightGlue 快约 3 倍。

场景实战:从单张图到实时匹配的 3 个任务

任务 1:给一张图提特征

灰度图或 RGB 都行,输入形状是 (B, C, H, W):

img = torch.randn(1, 3, 480, 640) out = xfeat.detectAndCompute(img, top_k=1000)[0] print(out['keypoints'].shape) # torch.Size([N, 2]) print(out['descriptors'].shape) # torch.Size([N, 64])

top_k控制保留多少个最强关键点,默认 4096。

任务 2:匹配两张图,3 种模式任选

稀疏模式(MNN 匹配,最快,适合大多数场景):

img1 = torch.randn(1, 3, 480, 640) img2 = torch.randn(1, 3, 480, 640) mkpts_0, mkpts_1 = xfeat.match_xfeat(img1, img2)

半稠密模式(支持批量,返回 (x1,y1,x2,y2) 四元组):

im1 = torch.randn(4, 3, 480, 640) im2 = torch.randn(4, 3, 480, 640) matches = xfeat.match_xfeat_star(im1, im2)

LighterGlue 模式(注意力匹配,更稳,需要pip install kornia):

d0 = xfeat.detectAndCompute(img1, top_k=4096)[0] d1 = xfeat.detectAndCompute(img2, top_k=4096)[0] d0.update({'image_size': (img1.shape[3], img1.shape[2])}) # 注意是 (W, H) d1.update({'image_size': (img2.shape[3], img2.shape[2])}) mkpts_0, mkpts_1, _ = xfeat.match_lighterglue(d0, d1)

LighterGlue 靠的是全局注意力而不是硬比对,跨视角、跨光照下召回更多正确匹配,官方在 MegaDepth-1500 上验证过这套组合与 SuperPoint+LightGlue 精度非常接近。

任务 3:跑一个实时匹配演示

python3 realtime_demo.py --method XFeat # 也可换成 SIFT / ORB 对比

按s设置参考帧,q退出,窗口里会实时画出匹配线并显示 FPS,同时做单应注册。

性能与取舍:多快、多准、用在哪 📈

  • 速度:普通 i5 笔记本 CPU 上,VGA(640×480)稀疏推理即可实时;GPU 单图 150+ FPS,RTX 4090 上批量推理可达约 1400 FPS。
  • 精度:MegaDepth-1500 位姿误差 AUC@5/10/20,XFeat+LighterGlue(fast 档,640 分辨率)为 0.444 / 0.610 / 0.746,对比 SuperPoint+LightGlue 官方版 0.469 / 0.633 / 0.762,差距很小而速度快得多。
  • 适合:移动机器人、AR、嵌入式设备(jetson、树莓派)、CPU-only 的匹配流水线、需要批量推理的场景。
  • 不适合:超高分辨率单张处理(请上 GPU);实时 demo 基于单应模型,只对平面场景和纯旋转运动有效,别拿它测复杂三维场景。

常见报错与解法 + 下一步 ⚠️

四个新手最常踩的坑,现象 → 原因 → 一句话解法:

  1. RuntimeError: Input tensor needs to be in (B,C,H,W) format:detectAndCompute只收 (B,C,H,W) 张量,你传了 (H,W,C) 的 numpy 图 → 用torch.tensor(img).permute(2,0,1)[None]包一层,或直接调match_xfeat(它内置转换)。
  2. LighterGlue 报 kornia 缺失:LighterGlue 基于 kornia 实现 →pip install kornia;同时记得给特征 dict 补image_size字段(W, H 顺序)。
  3. 实时 demo 匹配乱跳、稳不住:demo 用单应矩阵,只对平面场景成立 → 用海报、书本封面这类平面物体测试。
  4. CPU 上高分辨率太慢:示例代码默认强制 CPU(os.environ['CUDA_VISIBLE_DEVICES'] = '')→ 注释掉该行启用 GPU,或调低top_k与输入分辨率。

下一步可以去哪:

  • 官方示例笔记本都在 notebooks/ 目录:xfeat_matching.ipynb(匹配与注册)、xfeat+lg_torch_hub.ipynb(XFeat+LighterGlue)
  • 提取/匹配/训练源码在 modules/ 目录,预训练权重在weights/
  • 想复现论文训练流程,看 minimal_example.py 和modules/training/下的脚本

跑通之后,把top_k、min_cossim、detection_threshold这几个旋钮按自己的场景调一调,基本就能直接上线了。

【免费下载链接】accelerated_featuresImplementation of XFeat (CVPR 2024). Do you need robust and fast local feature extraction? You are in the right place!项目地址: https://gitcode.com/GitHub_Trending/ac/accelerated_features

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 2:47:02

【CUDA编程入门①】CUDA编程体系全景:线程模型、内存层次与Warp执行机制

【CUDA编程入门①】CUDA编程体系全景:线程模型、内存层次与Warp执行机制本文是「CUDA编程与HPC高性能计算」系列的第一篇。从这篇开始,我们正式进入GPU内核编程的世界。CUDA难吗?说难也难——它有一套全新的编程模型。说简单也简单——只要你…

作者头像 李华
网站建设 2026/10/23 2:46:03

6.3.11 证书链的根 CA 没装在设备上

设备信任哪些 CA,是配置出来的。对端拿来的证书如果是由一个设备不认识的 CA 签发的,那这条链就验不下去。 这条测的就是这种情形。设备收到一张引用未知 CA 的证书,要报 Alarm: certificate validation: CA certificate not available&#…

作者头像 李华
网站建设 2026/10/23 2:44:32

机器学习数学基础──第 2 章 函数 机器学习的积木

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华