资讯动态

3分钟跑通 XFeat 轻量级图像匹配:CPU 上也能做到实时特征提取

发布时间:2026/10/23 2:47:28 来源:尧图企业网站定制
3分钟跑通 XFeat 轻量级图像匹配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_featuresXFeat 是 CVPR 2024 论文提出的轻量级局部特征提取与匹配方案一个紧凑的 CNN 同时输出关键点、64 维描述符和可靠性分数搭配更小的匹配器 LighterGlue整套流水线在普通笔记本 CPU 上就能实时跑动。什么时候你会需要它做 AR 或视觉定位但设备很有限手机、Jetson、树莓派这类算力紧张的环境跑不动重型深度特征网络而传统 SIFT/ORB 又扛不住视角和光照变化。需要同时支持稀疏与半稠密匹配视觉导航偏爱稀疏点快姿态估计又希望点多一些——XFeat 用一个模型覆盖两种模式不用维护两套代码。克隆仓库并安装依赖依赖只有torch加几个轻量库kornia、opencv等装完即可用# 克隆仓库并进入目录 git clone https://gitcode.com/GitHub_Trending/ac/accelerated_features cd accelerated_features # 安装 requirements.txt 里的全部依赖 pip install -r requirements.txt仓库根目录已经自带预训练权重weights/xfeat.pt不需要额外下载。三行代码完成一次特征提取最小可运行脚本只有下面几行输入是一个(B, 3, H, W)的张量import torch from modules.xfeat import XFeat # 实例化模型自动加载 weights/xfeat.pt 预训练权重 xfeat XFeat() # 随机生成一张 480x640 的 RGB 图像作为输入 x torch.randn(1, 3, 480, 640) # 提取前 top_k4096 个最可靠的特征点 out xfeat.detectAndCompute(x, top_k4096)[0] print(out[keypoints].shape) # 关键点坐标 (N, 2) print(out[descriptors].shape) # 描述符 (N, 64) print(out[scores].shape) # 可靠性分数 (N,)也可以直接运行仓库现成的 minimal_example.py它会额外演示批量推理和两种匹配模式python3 minimal_example.py输出里的三个 shape 各是什么keypoints (N, 2)图像中坐标系的像素坐标(x, y)数量 N 不超过top_k且按可靠性从高到低排列。descriptors (N, 64)每个点 64 维的 L2 归一化描述符用于后续匹配比 SuperPoint 的 256 维短得多这是它省内存的关键。scores (N,)关键点和可靠性热图分数相乘得到的置信度分数越低说明模型对该点越没把握可按需截断。核心机制一个网络三条输出头XFeat 的编码器先做早期下采样、保持低通道数换高速率然后在浅层分支上输出三样东西关键点热图K、稠密描述符图F64 维、可靠性热图R。关键点检测被拆成独立分支用1x1卷积处理8x8分块后的图像所以检测和描述可以各自独立加速。要点速览三条输出头一次前向全部得到推理时只需一次网络调用。关键点经 NMS 去重后按分数取 top-k描述符再从稠密图上双线性插值采样。match_xfeat是检测 最近邻互验MNN的稀疏匹配一行调用。match_xfeat_star是半稠密匹配粗匹配后用一个小型子像素修正模块fine matcher把匹配点精修到亚像素级。match_lighterglue调用参数更少的 LighterGlue 做图匹配精度更接近重型匹配器。CPU 上各步骤的耗时拆分如下检测和修正模块的开销都很小实战一稀疏匹配 单应性可视化仓库的assets/目录放了一对示例图可以直接复现 notebooks/xfeat_matching.ipynb 的完整流程。核心代码import cv2 from modules.xfeat import XFeat xfeat XFeat() # 读取仓库自带的一对示例图像 (H, W, 3) im1 cv2.imread(assets/ref.png) im2 cv2.imread(assets/tgt.png) # 稀疏匹配检测 MNN 互验一步完成 mkpts_0, mkpts_1 xfeat.match_xfeat(im1, im2, top_k4096) print(len(mkpts_0)) # 互验通过的匹配点对数拿到mkpts_0、mkpts_1后用cv2.findHomography估计单应矩阵、cv2.drawMatches画匹配线即可参考图对如下实战二换半稠密匹配匹配点数量翻几倍如果下游是姿态估计而不是简单的平面配准把换行里的match_xfeat换成match_xfeat_star就行它支持批量输入匹配点会明显变密、且经过亚像素精修# 半稠密匹配coarse-to-fine 两阶段 mkpts_0, mkpts_1 xfeat.match_xfeat_star(im1, im2, top_k8000) print(len(mkpts_0)) # 通常比稀疏模式多出几倍匹配点效果对比可以在 notebooks/xfeat_matching.ipynb 里直接看同一对图上稀疏模式给出干净的粗配准半稠密模式则覆盖更均匀。下面是 XFeat 在不同场景下的匹配效果想要摄像头实时看效果的话运行 realtime_demo.py# 按 s 键指定参考帧按 q 键退出 python3 realtime_demo.py --method XFeat调参与避坑top_k按下游需求调姿态估计、配准类任务建议 2048~4096纯平面单应 512~1024 就够点数越多耗时线性增加。detection_threshold控制检出密度默认 0.05。纹理少的场景纯白墙、天空可调低到 0.02 补点纹理爆炸的场景调到 0.1 去噪。LighterGlue 匹配记得传image_sizematch_lighterglue要求输入 dict 里带(W, H)字段漏掉会报尺寸相关的错误它依赖kornia缺失时先pip install kornia。没有 GPU 就照跑XFeat内部自动选择cuda/cpuminimal_example.py 里os.environ[CUDA_VISIBLE_DEVICES] 那行是强制 CPU 用的压测代码GPU 环境可忽略。实时演示的约束单应模型只适用于平面场景和纯旋转运动--max_kpts默认 3000卡帧时先调小它。从哪些文件继续往下读notebooks/minimal_example.ipynb最小推理示例notebooks/xfeat_matching.ipynb稀疏 半稠密匹配与单应性绘图notebooks/xfeatlg_torch_hub.ipynbXFeat LighterGlue 组合用法notebooks/XFeat_training_example.ipynb合成数据训练流程modules/eval/MegaDepth-1500、ScanNet-1500 评测脚本weights/xfeat.pt与xfeat-lighterglue.pt预训练权重小结三条输出头 top-k 截断的设计让 XFeat 用最少的算力换到了接近重型方案的匹配质量CPU 实时只是它的起点而不是终点。把match_xfeat那两行代码贴进你自己的项目今天就先把第一对匹配图画出来吧遇到具体问题可以去仓库 issue 区看看或先翻一遍上面的 notebook。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑