ONNX-compatible LightGlue: Local Feature Matching at Light Speed. Supports TensorRT, OpenVINO
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 3 年前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 1 个月前 | ||
| 7 个月前 | ||
| 1 个月前 | ||
| 1 个月前 |
LightGlue ONNX
LightGlue: Local Feature Matching at Light Speed 的 Open Neural Network Exchange (ONNX) 兼容实现。ONNX 模型格式支持跨不同平台的互操作性,可适配多种执行提供程序,并去除了 Python 特定的依赖项(如 PyTorch)。支持 TensorRT 和 OpenVINO。详细说明。
✨ 最新动态:优化后的 RaCo-ALIKED-LightGlue+。详见此博客文章。
2026年7月20日:新增 RaCo-ALIKED-LightGlue+ 及性能基准测试。
更新日志
- 2026年1月19日:新增 FP8 量化工作流(ModelOpt Q/DQ 导出和 TensorRT 使用说明)。博客文章
- 2026年1月9日:使用现代 uv 工具优化 CLI 用户体验,简化
lightglue-onnx工作流程,移除过时组件,同时更新依赖项及 TensorRT/形状推理指南。 - 2024年7月17日:支持端到端并行动态批处理大小。改进脚本用户体验。新增博客文章。
- 2023年11月2日:引入 TopK 技巧优化 ArgMax 操作,实现约 30% 的速度提升。
- 2023年10月4日:融合式 LightGlue ONNX 模型,通过
onnxruntime>=1.16.0支持 FlashAttention-2,在长序列(关键点数量)推理中提速高达 80%。 - 2023年10月27日:LightGlue-ONNX 已集成至 Kornia!
- 2023年10月4日:多头注意力融合优化。
- 2023年7月19日:新增 TensorRT 支持。
- 2023年7月13日:新增 Flash Attention 支持。
- 2023年7月11日:新增混合精度支持。
- 2023年7月4日:新增推理时间对比。
- 2023年7月1日:新增提取器
max_num_keypoints支持。 - 2023年6月30日:新增 DISK 提取器支持。
- 2023年6月28日:新增端到端 SuperPoint+LightGlue 导出与推理流程。
⭐ ONNX 导出与推理
我们提供了一个基于 typer 的命令行工具 lightglue-onnx,可轻松将 LightGlue 导出为 ONNX 格式,并使用 ONNX Runtime 进行推理。如果您想立即尝试推理,可以在此处下载已导出的 ONNX 模型 here。
📦 安装(uv)
仅推理(默认):
uv sync
CPU 导出支持(新增 PyTorch、torchvision、ONNX 和 ONNX Script):
uv sync --group export --extra torch-cpu
CUDA 导出和推理支持(Linux x86-64):
uv sync --no-group cpu --group cuda --group export --extra torch-cuda
TensorRT 命令行界面支持:
uv sync --no-group cpu --group cuda --group export --group trt --extra torch-cuda
用于推理的可选 GPU JPEG 预处理(Linux x86-64,CUDA/TensorRT):
uv sync --no-group cpu --group cuda --group trt --group gpu-preprocess
$ uv run lightglue-onnx --help
Usage: lightglue-onnx [OPTIONS] COMMAND [ARGS]...
LightGlue Dynamo CLI
╭─ Commands ───────────────────────────────────────╮
│ export Export LightGlue to ONNX. │
│ infer Run inference for LightGlue ONNX model. │
| trtexec Run pure TensorRT inference using |
| Polygraphy. |
╰──────────────────────────────────────────────────╯
传递 --help 以查看每个命令的可用选项。命令行界面 (CLI) 会导出完整的提取器-匹配器管道,因此您无需担心协调中间步骤。默认情况下,推理会在 CUDA 可用时使用它,如果无法加载请求的提供程序,则回退到 CPU。
GPU 先决条件
ONNX Runtime CUDA 和 TensorRT 执行提供程序需要与您的平台兼容的 CUDA 和 cuDNN 版本。如果遇到提供程序加载错误,请对照 ONNX Runtime CUDA 提供程序文档确认您的 CUDA/cuDNN 设置。
如果您通过 PyPI 安装 CUDA/TensorRT 运行时库(例如 onnxruntime-gpu[cuda,cudnn] 和 tensorrt),可能需要将虚拟环境路径添加到 LD_LIBRARY_PATH,以便 Polygraphy 和 TensorRT EP 能够找到 libcudart.so 和 libnvinfer.so:
export LD_LIBRARY_PATH="$PWD/.venv/lib/python3.12/site-packages/tensorrt_libs:$PWD/.venv/lib/python3.12/site-packages/nvidia/cu13/lib:${LD_LIBRARY_PATH:-}"
CLI 会自动预加载这些由 wheel 提供的库,不过,对于在 CLI 外部启动的第三方工具,该环境变量仍然有用。
📖 示例命令
🔥 ONNX 导出
# 将 -b/-h/-w 中的任意一项设为 0,即可使该维度变为动态。 uv run lightglue-onnx export raco_aliked \ --num-keypoints 1024 \ -b 2 -h 1024 -w 1024 \ -o weights/raco_aliked_lightglue_pipeline_k1024.onnx
🚀 ONNX Runtime 推理(TensorRT)
uv run lightglue-onnx infer \ weights/raco_aliked_lightglue_pipeline_k1024.onnx \ assets/sacre_coeur1.jpg assets/sacre_coeur2.jpg \ raco_aliked \ -h 1024 -w 1024 \ -d tensorrt --fp16 \ --preprocessing cuda # 可选
⚡ ONNX Runtime 推理(CUDA)
uv run lightglue-onnx infer \ weights/raco_aliked_lightglue_pipeline_k1024.onnx \ assets/sacre_coeur1.jpg assets/sacre_coeur2.jpg \ raco_aliked \ -h 1024 -w 1024 \ -d cuda
🧪 量化(用于 TensorRT 的 FP8 Q/DQ)
# 1) 导出静态形状的 ONNX 模型 uv run lightglue-onnx export superpoint \ --num-keypoints 1024 \ -b 2 -h 1024 -w 1024 \ -o weights/superpoint_lightglue_pipeline.static.onnx2) 量化为 FP8(仅 DQ 图)
uv run lightglue_dynamo/scripts/quantize.py
--input weights/superpoint_lightglue_pipeline.static.onnx
--output weights/superpoint_lightglue_pipeline.static.fp8.onnx
--extractor superpoint
--height 1024 --width 1024
--quantize-mode fp8
--dq-only
--simplify3) 运行 TensorRT(显式量化模型)
uv run lightglue-onnx trtexec
weights/superpoint_lightglue_pipeline.static.fp8.onnx
assets/sacre_coeur1.jpg assets/sacre_coeur2.jpg
superpoint
-h 1024 -w 1024
--precision-constraints prefer --fp16
🟣 ONNX Runtime 推理(OpenVINO)
uv run lightglue-onnx infer \ weights/raco_aliked_lightglue_pipeline_k1024.onnx \ assets/sacre_coeur1.jpg assets/sacre_coeur2.jpg \ raco_aliked \ -h 512 -w 512 \ -d openvino
🌐 浏览器 WebGPU 演示
启动演示服务器并打开 http://localhost:8000:
uv run python web/serve.py
⏱️ 推理加速与输出质量
与 torch.compile() 的基准测试对比(详情见此):
致谢
如果您使用了本仓库中论文或代码的任何想法,请考虑引用 LightGlue、SuperPoint 和 DISK 的作者。最后,如果 ONNX 版本对您有任何帮助,也请考虑给本仓库点星。
@inproceedings{lindenberger23lightglue,
author = {Philipp Lindenberger and
Paul-Edouard Sarlin and
Marc Pollefeys},
title = {{LightGlue}: Local Feature Matching at Light Speed},
booktitle = {ArXiv PrePrint},
year = {2023}
}
@article{DBLP:journals/corr/abs-1712-07629,
author = {Daniel DeTone and
Tomasz Malisiewicz and
Andrew Rabinovich},
title = {SuperPoint: Self-Supervised Interest Point Detection and Description},
journal = {CoRR},
volume = {abs/1712.07629},
year = {2017},
url = {http://arxiv.org/abs/1712.07629},
eprinttype = {arXiv},
eprint = {1712.07629},
timestamp = {Mon, 13 Aug 2018 16:47:29 +0200},
biburl = {https://dblp.org/rec/journals/corr/abs-1712-07629.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{DBLP:journals/corr/abs-2006-13566,
author = {Michal J. Tyszkiewicz and
Pascal Fua and
Eduard Trulls},
title = {{DISK:} Learning local features with policy gradient},
journal = {CoRR},
volume = {abs/2006.13566},
year = {2020},
url = {https://arxiv.org/abs/2006.13566},
eprinttype = {arXiv},
eprint = {2006.13566},
timestamp = {Wed, 01 Jul 2020 15:21:23 +0200},
biburl = {https://dblp.org/rec/journals/corr/abs-2006-13566.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
项目介绍
兼容ONNX的闪电粘连:以光速实现局部特征匹配。支持TensorRT、OpenVINO。【此简介由AI生成】
