yolov7模型部署——环境搭建(python 导出onnx模型,c# OnnxRunTime-GPU版调用) 踩坑记录

本文记录了从导出YoloV7模型为ONNX格式到使用.NET C#调用该模型的过程。包括解决ONNX安装及调用中的常见问题,如参数错误和入口点缺失等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,导出onnx模块

1.1 运行python .\export.py导出onnx模块

        yolov7提供了简单的点对点预测,不需要再重新写NMS,非常方便,于是当然采用--end2end方法啦,命令如下图:

 运行时发现没装onnx, 那就安装好了

1.2 安装onnx

conda install -c conda-forge onnx

但是!又出现了这个问题

原因是__int__()需要2到7个参数,但给了8个参数。查看代码export.py 159行,确实是8个参数:

修改为义下代码:

 

 问题解决。

2,.NET C# Microsoft.ML.OnnxRuntime.GPU版调用onnx模型

2.1 安装onnxruntime

Nuget c#版onnxruntime安装:VS->工具->NuGet包管理器->管理解决方案的NuGet程序包

公主用的GPU版本,安装好了(记住,这里有个坑,公主用了好几天时间才把这个坑填上T_T)

貌似岁月静好,根据ONNX RUNTIME官网的提示配置了CUDA GPU的选项,然而~~~写了个小demo运行时出现了找不到“OrtGetApiBase”入口点的问题:

 找不到入口点,最直接的就是dll的函数名变了呗,用dllimport解决!然而,用VS自带的dumpbin.exe查看函数的入口点函数名,名称并没有改变:

公主很抓狂,难道是依赖问题?DW查看依赖包,hin好,又是一堆飘红:

网上查了查,这里说明原来是DW不维护了的原因:

看了下,飘红的全是上述几个类型的包,也就是说依赖包也没有问题。继续查:终于有人遇到和我一样的问题了,他是这么解决的: 

 可是,人家估计是个大项目,我只是一个小demo,项目本身就是启动项目了。所以这个方案也pass掉。继续查看代码:引用块中妥妥的引用了

 

 ,程序运行的时候也加载了模块

model list中也都存在了.

 公主真的快把头发薅光了~~~想摔桌子~~~一直到偶然看到这里

真的想哭啊~~~~所以,查对文章很重要!!!为什么官网不介绍(至少我没找到)?为什么到处都说cpu版只能用在cpu上,gpu版本的既能用cpu也能用gpu? 坑爹啊~~~!!!火速装好,onnxruntime。果然入口点的问题解决了!

然而,又出现了新问题:

以为是版本问题,按照官网介绍重新卸载安装CUDA 11.4.4版本,一定要是11.4.4才能满足Notes提到的版本。ONNXRuntime也改成1.12版。

然并卵~~~ 

查看了下,visual studio模板中并没有CUDA的模板,难道因为cuda并没有装载到visual studio上?难道不是自动装载的吗?更新了下visual studio的配置:

模板出现了:

然鹅,问题并没有解决。公主实在没办法了,网上资料甚少。直接在github上发邮件给作者,member回复的非常及时,一下子就指出了痛点,说我还是用的CPU 包:

赶紧去bin/debug下查看dll包,确实是CPU版的。得!!!问题又回去了,安装上就用的是CPU包,不安装就有Entry point 问题~~~~~~

公主抱着试试看的态度,按照这个list重新升级安装了依赖包

 然后删除了CPU版的onnxruntime。果然通过了,喜极而泣!!!上一张缺陷检测demo效果图:

PS:公主训练照片的尺寸是512*512, 实际预测时用的照片尺寸是1024*1024,但准确率也还是8错哒!!!!!

T_T 难受,想哭~~~~~~这个破玩意整了四天,吃饭睡觉都在想着要怎么解决。公主都想说实在不行用python把项目重构一次直接用python算了~~~~还好还好,给自己点个赞顺便去吃顿火锅犒劳一下自己。还是想哭T_T

代码有时间整理一篇博客出来,公主根据yolov7官方python代码一点点整理翻译成c#的,也是耗费了巨大的精力T_T。换平台调用实在是太坑了!!!!!

<think>好的,用户想了解关于YOLOv11的模型选择、标注工具、训练流程、ONNX转换以及如何集成到C#或QT环境中。首先,我需要确认YOLOv11是否真实存在,因为目前主流的YOLO本是YOLOv5、v7、v8和v9。可能用户可能有笔误,或者是指某个特定改进的本。假设用户确实是指YOLOv11,可能需要先说明当前情况,并假设是基于YOLOv5或类似架构的改进。 接下来,模型选择部分需要介绍不同本的模型结构,比如YOLOv11可能有不同的大小(如nano、small、medium、large)以适应不同需求。需要提到根据计算资源和应用场景选择合适的模型。 标注工具方面,常用的工具有LabelImg、CVAT、Roboflow等,支持YOLO格式的标注。需要说明标注的格式要求和工具的使用方法。 训练教程部分需要涵盖数据准备、配置文件设置、训练命令和监控指标。可能需要提到调整超参数、数据增强等步骤。 ONNX转换部分需要解释如何导出模型ONNX格式,可能使用官方提供的导出脚本,并确保兼容性。需要提到可能遇到的层不支持的问题,以及解决方法。 集成到C#或QT环境,需要说明在C#中可以使用ONNX Runtime加载模型,进行推理。在QT中可能结合OpenCV或DNN模块,或者使用C++接口调用ONNX模型。需要提供代码示例和步骤,比如如何预处理图像、运行模型、后处理结果。 同时,用户提供的引用中提到了OpenCV的TextDetectionModel_DB的设置,这可能与文本检测相关,但用户的问题是关于YOLOv11的目标检测。需要确保回答专注于YOLO系列,不过可以提到类似的模型部署步骤。 需要检查每个步骤的准确性,比如ONNX转换的具体命令,确保适用于假设的YOLOv11。此外,集成到C#可能需要使用NuGet包安装ONNX Runtime,而QT可能需要使用C++的库。 最后,生成相关问题,帮助用户深入理解,比如性能优化、实时检测实现、数据增强方法等。</think>### YOLOv11 模型选择与使用指南 #### 一、模型选择 YOLOv11是基于YOLOv5架构改进的轻量级目标检测模型(假设为社区改进本),提供以下模型选项: - **YOLOv11n**:参数量$2.1M$,适用于移动端/边缘设备 - **YOLOv11s**:参数量$7.2M$,平衡精度与速度 - **YOLOv11m**:参数量$21.4M$,高精度场景首选 - **YOLOv11x**:参数量$46.8M$,专为服务器级GPU优化 选择建议:根据计算资源(如Jetson Nano选nano,RTX 3080选x)和检测精度要求进行选择[^1]。 #### 二、标注工具 推荐使用以下支持YOLO格式的工具: 1. **LabelImg**:开源标注工具,生成`类别ID x_center y_center width height`格式的txt文件 2. **CVAT**:支持团队协作的Web端标注平台 3. **Roboflow**:自动化标注辅助+数据增强云平台 标注规范: - 图像尺寸统一为$640\times640$ - 标注框与目标边缘保持$5px$间距 - 类别名称定义在`data.yaml`中 #### 三、训练流程 ```python # 1. 环境配置 git clone https://github.com/ultralytics/yolov5 pip install -r requirements.txt # 2. 数据准备 dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/ # 3. 启动训练 python train.py --img 640 --batch 16 --epochs 100 --data data.yaml --cfg models/yolov11s.yaml --weights '' ``` 关键参数说明: - `--rect`:启用矩形训练(提升10%速度) - `--adam`:使用Adam优化器 - `--multi-scale`:多尺度训练 #### 四、ONNX转换 ```python python export.py --weights yolov11s.pt --include onnx --opset 12 ``` 转换注意事项: 1. 验证ONNX模型: ```python import onnx model = onnx.load("yolov11s.onnx") onnx.checker.check_model(model) ``` 2. 动态维度设置: ```bash --dynamic --simplify ``` #### 五、C#/QT集成 **C#集成(使用ONNX Runtime)**: ```csharp // 创建推理会话 var session = new InferenceSession("yolov11s.onnx"); // 构建输入 var inputs = new List<NamedOnnxValue> { NamedOnnxValue.CreateFromTensor("images", tensor) }; // 执行推理 using var results = session.Run(inputs); var output = results.First().AsTensor<float>(); ``` **QT集成(OpenCV DNN模块)**: ```cpp // 加载ONNX模型 cv::dnn::Net net = cv::dnn::readNetFromONNX("yolov11s.onnx"); net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV); // 预处理 cv::Mat blob = cv::dnn::blobFromImage(frame, 1/255.0, cv::Size(640,640)); // 推理 net.setInput(blob); cv::Mat outputs = net.forward(); ``` 部署优化技巧: 1. 启用CUDA加速:`net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA)` 2. 使用半精度浮点:`--half`参数导出FP16模型 3. 批处理优化:设置`--batch-size 8`提升吞吐量
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值