superpoint+superglue tensorrt c++部署的版本升级优化 从 v1 手动升级到 v2 (TensorRT 10) 全方位细致梳理与迁移指南本文档将细致地拆解从SuperPoint-SuperGlue-TensorRT(v1) 升级至SuperPoint-SuperGlue-TensorRT-v2的每个步骤,阐述改什么、先改哪里、后改哪里以及为什么要改。此指南涵盖版本依赖、配置修改、以及具体的 C++ 源码改动。阶段一:环境版本替换在开展任何代码工作之前,必须先将开发环境进行升级。这是所有代码改动的基础:CUDA 升级: 卸载原先的 CUDA 11.6,安装CUDA 12.8。TensorRT 升级: 卸载原先的 TensorRT 8.4.1.5,安装TensorRT 10.8.0.43。为什么要改:TensorRT 10 带来了架构的重构,废弃了原有的 Binding(绑定)机制,启用了全新的 I/O Tensor 机制。同时,对大语言模型库和 ONNX 算子(比如 InstanceNorm)支持更好,推理性能有实质飞跃。阶段二:模型导出与配置文件更新 (config.yaml)2.1 重新准备 ONNX 与 Engine 模型由于 TensorRT 8 的 Engine 与 TensorRT 10 不兼容,旧版中的模型必须替换。动作:将目录weights/下的原先的_sim_int32.engine删除。(新版程序会自动从重新修复的.onnx中重建,新的 ONNX 推荐命名为_int32_fixed.onnx以示区别)。2.2 修改config/config.yaml动作:打开config.yaml。将 SuperPoint 和 SuperGlue 对应的模型名字从旧版改为新版。改法:# SuperPoint 节点中onnx_file:"superpoint_int32_fixed.onnx"engine_file:"superpoint_int32_fixed.engine"# SuperGlue 节点中onnx_file:"superglue_indoor_int32_fixed.onnx"engine_file:"superglue_indoor_int32_fixed.engine"为什么要改:代码会通过解析该配置文件来查找、加载模型文件。如果此处不改,执行时会报“文件不存在”错误。阶段三:C++ 核心源码全面适配这部分是升级工作最核心的地方。我们将分别对src/super_point.cpp和src/super_glue.cpp动刀。请按照如下顺序依次进行替换。3.1 改造src/super_point.cpp修改动机:适配 TensorRT 10 的 Workspace 配置;增加 ONNX 算子标志以应对异常;废弃 Binding API 改用最新的 Tensor API。第一处替换:修改construct_network(显存池限制与 Parser 修复)找到SuperPoint::construct_network函数:// ==== 原始代码 (v1) ====autoparsed=parser-parseFromFile(super_point_config_.onnx_file.c_str(),static_castint(gLogger.getReportableSeverity()));if(!parsed){returnfalse;}config-setMaxWorkspaceSize(512_MiB);// ====================// ==== 替换为新代码 (v2) ====parser-setFlag(nvonnxparser::OnnxParserFlag::kNATIVE_INSTANCENORM);parser-parseFromFile(super_point_config_.onnx_file.c_str(),static_castint(gLogger.getReportableSeverity()));if(parser-getNbErrors()0){for(inti=0;iparser-getNbErrors();i++){std