YoloV7:基于自己训练的模型如何导出正确的ONNX

本文详细介绍了如何基于YoloV7训练数据集,区分training与deploy配置,导出ONNX并解决转换问题。重点讲解了训练配置的特殊处理和转换技巧,最终成功部署了模型。

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

前面我们说到了如何基于自己数据集训练,感兴趣的小伙伴可以去看下。。。

YoloV7:训练自己得数据集详细教程_Mr曲末寒的博客-CSDN博客_yolo

我们得到了pt文件之后需要将他转换为ONNX,之后在对ONNX进行相应的部署,能完整的部署的前提是我们需要导出完整的ONNX。

目录

1、training和deploy的区别

2、deploy导出ONNX

3、training导出ONNX 

3.1  不更改代码导出的ONNX转换为engine模型

3.2 更改之后的ONNX转换为engine


1、training和deploy的区别

我们可以看到基于YoloV7训练的cfg有两种yaml文件,一个是training文件夹,一个是deploy文件夹,这两种文件夹有啥不一样呢???

大家可以看下下面别人的issuse,,记住这个很关键,就是你选择哪个yaml训练对你后面导出的onnx是很关键的,后面我们会说到。

1、training中的yaml文件最后是采用IDetect,而deploy中的yaml文件采用的是Detect

2、IDetect是在最后一个C5结构输出增加一个add操作,之后在进行conv,然后在mul操作,而Detect则是和v5一样的操作,没有add  mul,大家可以去看我的另外一篇博客,yolov7-tiny的结构图,这个结构图暂时针对deploy的文件夹,后续会补充training文件夹

yolov7-tiny网络模型结构图_Mr曲末寒的博客-CSDN博客

What is the difference between yolov7.yaml in cfg/deploy and cfg/training · Issue #74 · WongKinYiu/yolov7 (github.com)

2、deploy导出ONNX

前面我们说到deploy中的yaml是基于Detect处理的和v5一样,所以大家可以直接导出ONNX,我这边是下载了u5文件夹,在u5文件夹里面进行转换,。

下载之后直接转换,

python export.py --weights weights/best_yolov7_tiny_0.1_delopy.pt --include onnx

ok  正常导出。。。

3、training导出ONNX 

这个其实比较麻烦的,因为它后面增加了两个操作add  mul,,如果直接导出会出现很多节点,其中的节点就是mul,会给你报错,直接给你报维度不匹配。所以我们需要对yolo.py文件进行操作,

然后我们在导出ONNX

 我们尝试下将taining文件夹下的ONNX转换为trtmodel...

3.1  不更改代码导出的ONNX转换为engine模型

直接报错,原因就是MUl的维度不同。

3.2 更改之后的ONNX转换为engine

更改之后,成功导出

 

之后进行trt部署测试。。。

正确得到结果::::

 后面有时间会更新一波,基于TensorRT7+API搭建的YoloV7网络结构的博客,当然这个搭建是失败的,,目前不太清楚什么原因。。。。。。。

<think>好的,用户想知道如何将YOLOv10模型导出ONNX格式。我需要先回忆一下YOLO系列模型换的常见方法。记得YOLOv5和YOLOv8都是通过自带的命令行工具来导出模型的,比如使用`yolo export`命令,这可能也适用于YOLOv10。 首先,应该确认YOLOv10是否延续了这种设计。根据用户提供的引用,YOLOv5和v8都有导出功能,所以推测v10可能也类似。需要检查官方文档或GitHub仓库是否有相关说明。但假设用户没有现成的文档,可能需要基于之前的版本来推断步骤。 接下来,用户可能需要安装必要的依赖库,比如onnxonnxruntime,确保环境正确。然后,基本的命令结构可能类似于`yolo export model=path/to/model.pt format=onnx`,这里需要替换模型路径为实际的YOLOv10模型文件。 另外,注意模型输入尺寸,可能需要指定`imgsz`参数,比如640x640。动态维度可能也是一个考虑点,特别是如果部署时需要不同尺寸输入的话,可以通过`dynamic=True`来启用动态轴。 验证导出ONNX模型是否正确也很重要,可以用Netron可视化工具检查结构,或者用ONNX Runtime进行推理测试。用户可能还需要调整参数,比如简化模型,去除不必要的操作,这样换后的模型更适用于部署环境。 还要提醒用户注意PyTorch版本和Ultralytics库的版本兼容性,避免因版本问题导致导出失败。同时,如果导出时遇到错误,可能需要查看错误信息,检查模型结构是否有不支持的操作,可能需要自定义导出脚本或联系社区支持。 最后,生成相关问题时,要围绕导出后的优化、部署、错误处理以及与其他框架的换来展开,帮助用户全面了解后续步骤。</think>### YOLOv10模型换为ONNX格式的详细步骤 1. **环境准备** - 安装`ultralytics`库(包含YOLO系列模型支持): ```bash pip install ultralytics onnx onnxruntime ``` - 确保PyTorch版本≥1.8(推荐使用PyTorch 1.12+) 2. **使用官方命令行工具导出** YOLOv10沿用了YOLOv5/YOLOv8的模型导出工具,可通过以下命令直接换: ```bash yolo export model=path/to/yolov10x_best.pt format=onnx imgsz=640 ``` - `model`: 训练好的模型文件路径(如`yolov10x_best.pt`) - `format`: 指定导出格式为`onnx` - `imgsz`: 输入图像的尺寸(需与训练时一致) - 可选参数`dynamic=True`启用动态输入尺寸(适用于可变分辨率场景)[^1][^2] 3. **验证ONNX模型** - **可视化检查**:使用Netron工具查看模型结构(应包含输入节点、输出检测层) - **推理验证**:通过ONNX Runtime加载模型并测试推理: ```python import onnxruntime as ort session = ort.InferenceSession("yolov10x_best.onnx") outputs = session.run(None, {"images": input_tensor}) ``` 4. **参数调整与优化** - **简化模型**:使用`onnx-simplifier`去除冗余操作: ```bash pip install onnx-simplifier python -m onnxsim yolov10x_best.onnx yolov10x_simplified.onnx ``` - **动态轴配置**:若需动态输入尺寸,导出时添加`dynamic=True`参数 --- ### 常见问题解答 **Q1: 导出时报错`Unsupported operator: aten::...`** A: 可能是PyTorch版本不兼容或模型包含ONNX不支持的操作。尝试: - 更新`ultralytics`库至最新版本 - 添加`opset=15`参数指定ONNX算子集版本 **Q2: 如何部署到移动端/C++环境?** A: ONNX模型可进一步换为TensorRT/OpenVINO/NCNN等格式。例如使用TensorRT换: ```bash trtexec --onnx=yolov10x_best.onnx --saveEngine=yolov10x.engine ``` ---
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mrs.Gril

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值