LightGlue-ONNX:LightGlue的ONNX实现,支持TensorRT与OpenVINO,含FP8量化

ONNX-compatible LightGlue: Local Feature Matching at Light Speed. Supports TensorRT, OpenVINO

分支1Tags7
文件最后提交记录最后更新时间
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
3 年前
7 个月前
7 个月前
7 个月前
1 个月前
7 个月前
1 个月前
1 个月前
English | 简体中文 | 日本語

ONNX TensorRT GitHub Repo stars GitHub all releases Blog

LightGlue ONNX

LightGlue: Local Feature Matching at Light Speed 的 Open Neural Network Exchange (ONNX) 兼容实现。ONNX 模型格式支持跨不同平台的互操作性,可适配多种执行提供程序,并去除了 Python 特定的依赖项(如 PyTorch)。支持 TensorRT 和 OpenVINO。详细说明

最新动态:优化后的 RaCo-ALIKED-LightGlue+。详见此博客文章

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.solibnvinfer.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.onnx

2) 量化为 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
--simplify

3) 运行 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() 的基准测试对比(详情见此):

Raco-ALIKED-LightGlue+ Speedup

Raco-ALIKED-LightGlue+ Match Quality

Raco-ALIKED-LightGlue+ Pareto Frontier

致谢

如果您使用了本仓库中论文或代码的任何想法,请考虑引用 LightGlueSuperPointDISK 的作者。最后,如果 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}
}