Yolov5 export.py实现onnx模型的导出

查了很多资料,很多用python代码写的,只需要这个库那个库的,最后都没成功。

不如直接使用Yolov5里面的 export.py实现模型的转换。

一:安装依赖

因为yolov5里面的requirments.txt是将这些转换模型的都注释掉了

所以需要解除注释然后再安装

根据你需要导出模型的类型进行解除注释

然后再安装依赖

复制代码
pip install -r requirements.txt

二:导出模型

根据官方教程来说明如何导出模型,帮助如何将训练好的YOLOv5模型转换成ONNX格式或者TorchScipt格式。

在export.py里面设置模型和数据源的yaml

官方文档写了具体可以导出的类型。

在 --include添加导出的类型。

复制代码
 python export.py  --include torchscript onnx

三:测试和验证推理

复制代码
python detect.py --weights yolov5s.onnx --dnn  
python val.py --weights yolov5s.onnx --dnn  

记住推理的时候,要修改detect.py里面的数据源yaml文件。不然会出现推理的时候标签不一致。

在模型的导出中,onnx不需要GPU进行推理,没有用GPU推理,导致推理的时候很慢,但是tensorRT需要GPU进行推理。

文件有些大,根据官方文档的提示

💡 ProTip: Add --half to export models at FP16 half precision for smaller file sizes

添加--half以FP16半精度导出模型,以缩小文件大小

原来的.pt模型是40.2MB.转成ONNX后模型大小是79.9MB

用完--half完,模型大小变为40.0MB,明显变小了

再次进行推理验证,时间少了43%左右,说明这个是有效果的,测试了一下,对精度影响不大。

相关参数解释:

复制代码
def parse_opt():
    """
    data: 数据集目录 默认=ROOT / 'data/coco128.yaml'
    weights:权重文件目录 默认=ROOT / 'yolov5s.pt'
    img-size: 输入模型的图片size=(height, width) 默认=[640, 640]
    batch-size: batch大小 默认=1
    device: 模型运行设备 cuda device, i.e. 0 or 0,1,2,3 or cpu 默认=cpu
    include: 要将pt文件转为什么格式 可以为单个原始也可以为list 默认=['torchscript', 'onnx', 'coreml']
    half: 是否使用半精度FP16export转换 默认=False
    inplace: 是否设置 YOLOv5 Detect() inplace=True  默认=False
    train: 是否开启model.train() mode 默认=True  coreml转换必须为True
    optimize: TorchScript转化参数 是否进行移动端优化  默认=False
    int8: 支持CoreML/TF INT8 量化 不支持ONNX
    dynamic: ONNX转换参数  dynamic_axes  ONNX转换是否要进行批处理变量  默认=False
    simplify: ONNX转换参数 是否简化onnx模型  默认=False
    opset: ONNX转换参数 设置ONNX版本  默认=13
    topk-per-class: TF.js每一类别都要保留 默认=100
    topk-all: TF.js  Topk为所有class保留
    iou-thres: TF.js IoU threshold   default=0.45
    conf-thres: TF.js  confidence threshold  default=0.25
    include:     需要导出的版本  default=['torchscript', 'onnx'],
    """
复制代码

参考文章:

yolov5 pt 模型 导出 onnx_yolov5 export.py-CSDN博客

TFLite, ONNX, CoreML, TensorRT Export - Ultralytics YOLOv8 Docs

源码解析二 模型转换 export.py - ---dgw博客 - 博客园 (cnblogs.com)

相关推荐
程序猿乐锅10 分钟前
【从0-1学习Python | 第四篇】Python 字符串和元组
java·开发语言·笔记·后端·python·学习
Rebecca_aLi12 分钟前
码匠教育:从手工表格到脚本自动化,Python 改造工作流的思路
运维·python·自动化
开开心心就好13 分钟前
A3的PDF怎么切成A4?拖一下分割线就行
服务器·开发语言·python·算法·pdf·ocr·tornado
小黄人软件15 分钟前
python 模块(Module)与包(Package)的区别,python xxx.py、python -m xxx 和 import xxx 三者的区别
开发语言·python
砚底藏山河42 分钟前
量化新手误区:因子计算与行情数据的工程化解耦
java·数据库·python·金融
lzqrzpt1 小时前
LED驱动电源选型核心参数解析与工程适配准则
python·单片机·嵌入式硬件
李航19831 小时前
SketchUp国产平替来了,功能非常接近,还有AI版本自动建模
人工智能·python·计算机视觉·ai·ai编程
玩AI的奶茶1 小时前
什么情况适合租算力?一张场景对照表,加三个自测问题
大数据·linux·服务器·数据库·人工智能·python
沉下心来学鲁班1 小时前
具身智能入门:用 Python 让 MicroDuck 机器狗学会走路
开发语言·人工智能·python·机器人
东莞市云毅网络有限公司1 小时前
用 Python 给官网做字段级变更监控:快照、比对与变更清单
python·数据清洗·rag·企业知识库·文档解析