跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++AI算法

LightGlue ONNX C++ 推理实践

综述由AI生成在 C++ 环境中使用 ONNX Runtime 运行 LightGlue 模型进行特征匹配的实践。内容包括 ONNX 与 Runtime 的概念解析,从 Python 训练模型到 C++ 部署的流程,涉及模型下载、库配置及路径修改。重点解决了加载模型乱码、节点实现找不到以及关键点向量获取失败等常见报错。最终实现了基于深度学习的精确特征匹配,效果优于传统方法。

MongoKing发布于 2026/3/21更新于 2026/5/3133 浏览

1. 背景与现状

当前使用深度图像作为掩膜后,对每张图使用传统方法做特征匹配效果不佳。尝试不同的策略加上特征匹配方法都无法实现目标效果,遂尝试深度学习方法。

2. ONNX 与 Runtime 简介

ONNX 是模型的中间表示格式,Runtime 是跑 ONNX 的标准引擎。

用 Runtime 跑 ONNX 模型实现 C++ 推理:模型(Python 训练测试得到权重文件)与代码 (C++) 解耦。 它做了三件事:

  • 把 PyTorch / TF / JAX 的模型
  • 导出成统一的计算图(.onnx)
  • 与训练框架完全解耦

可以理解为:ONNX = '深度学习领域的 STL / IR'

使用 ONNX 模型和 Runtime 实现 C++ 模型的推理,让模型'框架无关、部署简单、推理更快、端侧更稳',特别适合 C++ 推理和工程落地。

方案适合阶段优点致命点
PyTorch研究 / 验证写得快端侧难部署
TorchScript半工程比 Python 好依然重
ONNX + ORT产品 / 端侧稳、快、轻导出要规范
TensorRT极致性能超快强耦合 NVIDIA

3. 环境搭建与代码实现

三维深度学习模型 VGGT 中使用 LightGlue 作为特征匹配模块的模型,借鉴它将模型搬到我的项目上,第一步是跨过 Python->C++ 的槛。使用 ONNX 打破壁垒。下面将.onnx 解释为'模型'、将 runtime 解释为'库'。

3.1 下载模型和库
  • https://github.com/OroChippw/LightGlue-OnnxRunner/tree/master -- 源代码及模型链接
  • https://github.com/microsoft/onnxruntime -- 库链接

下载后解压进入 onnx 模型文件夹打开 CMakeLists.txt,修改对应的库路径-->包含头文件-->链接 lib。

3.2 Cmake 构建配置

按照官方文档或示例进行 CMake 配置。

3.3 代码中本地路径修改

修改 onnx 路径 (注意模型需要匹配正确,否则后续报错 MultiHead...) 和图像路径。

3.4 编译生成

VS(MSVC)build release 生成 exe 并添加 dll 到同文件夹下。

4. 常见问题与解决方案

4.1 加载模型乱码

报错显示的是文件加载路径有问题,检查过确定没有中文和斜杠问题,最后将原 utils.h 下的宽字节转换函数替换后解决报错,本质是取消源代码提供的宽字节转换。

inline wchar_t* multi_Byte_To_Wide_Char(std::string& pKey) { 
    const char* pCStrKey = pKey.c_str(); 
    size_t pSize = MultiByteToWideChar(CP_UTF8, 0, pCStrKey, strlen(pCStrKey) + 1, NULL, 0); 
    wchar_t* pWCStrKey = new wchar_t[pSize]; 
    MultiByteToWideChar(CP_UTF8, 0, pCStrKey, strlen(pCStrKey) + 1, pWCStrKey, pSize); 
    std::cout << "encode finished!" << std::endl; 
    return pWCStrKey; 
}
4.2 ONNXRuntime environment created failed: Could not find an implementation for MultiHeadAttention(1) node with name ""

原因是错用了 onnx 模型,需要查阅 git 确认对应的模型。

4.3 关键点向量为空问题

viz2d.h/plotMatches 函数内一直获取不到 kpts0 的值。在上层打印数据类型显示为 cv::Point同时 size != 0。后续在上层打印也打印不出,直到使用 cv::Point 变量接受 kpts[i] 中的值才解决。

解决以上问题后顺利跑通,但是还有几个问题待解决:LightGlue pytorch 源代码学习、onnx 模型导出与导入。项目后续:结合 mask 作特征点标定...

特征匹配模块 使用 onnx 相对于不使用深度学习方法的效果大大提升。

目录

  1. 1. 背景与现状
  2. 2. ONNX 与 Runtime 简介
  3. 3. 环境搭建与代码实现
  4. 3.1 下载模型和库
  5. 3.2 Cmake 构建配置
  6. 3.3 代码中本地路径修改
  7. 3.4 编译生成
  8. 4. 常见问题与解决方案
  9. 4.1 加载模型乱码
  10. 4.2 ONNXRuntime environment created failed: Could not find an implementation for MultiHeadAttention(1) node with name ""
  11. 4.3 关键点向量为空问题
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 环境下 Gurobi 安装与配置指南
  • OpenCode + GitHub Copilot:国内开发者的 Claude Code 替代方案
  • 前端图片裂图原因全解析:混合内容与防盗链排查
  • Linux 系统 Docker 安装、配置与核心使用实战
  • 算法实战:预处理、滑窗、前缀和哈希及图论并查集应用
  • Git 推送报错 src refspec main does not match any 解决
  • JavaWeb 核心技术:JSON 数据交换与 Ajax 异步请求实战
  • 基于 OpenClaw 与飞书构建专属 AI 机器人
  • Stack-Chan 机器人入门:基于 JavaScript 的 M5Stack 嵌入式开发
  • 2026 年 3 月全球 AI 前沿动态:模型突破与产业落地
  • 优化 Python 运行速度的 5 个关键技巧
  • 三年前端面试复盘:字节阿里美团高频题与手写源码解析
  • AI Agent 全栈简历实战:Java + Python + Vue3 跨语言开发
  • 基于 SpringBoot 的青年公寓服务平台
  • 前端文件下载实战:从原理到最佳实践
  • AI 工作流实践:构建日报生成工具
  • 数据结构:顺序栈(Stack)详解
  • GitHub Copilot Token 消耗过快:5 种省流策略与模型替代方案
  • C++ 多项式曲线拟合实战:从理论到工程落地
  • OpenClaw 完整搭建指南:从零打造 AI 助手

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online