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大小 默认=1device: 模型运行设备 cuda device, i.e. 0 or 0,1,2,3 or cpu 默认=cpuinclude: 要将pt文件转为什么格式 可以为单个原始也可以为list 默认=['torchscript', 'onnx', 'coreml']half: 是否使用半精度FP16export转换 默认=Falseinplace: 是否设置 YOLOv5 Detect() inplace=True  默认=Falsetrain: 是否开启model.train() mode 默认=True  coreml转换必须为Trueoptimize: TorchScript转化参数 是否进行移动端优化  默认=Falseint8: 支持CoreML/TF INT8 量化 不支持ONNXdynamic: ONNX转换参数  dynamic_axes  ONNX转换是否要进行批处理变量  默认=Falsesimplify: ONNX转换参数 是否简化onnx模型  默认=Falseopset: ONNX转换参数 设置ONNX版本  默认=13topk-per-class: TF.js每一类别都要保留 默认=100topk-all: TF.js  Topk为所有class保留iou-thres: TF.js IoU threshold   default=0.45conf-thres: TF.js  confidence threshold  default=0.25include:     需要导出的版本  default=['torchscript', 'onnx'],"""
复制代码

参考文章:

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/3382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP如何批量标记生产订单的TECO状态

声明:本文仅代表作者观点和立场,不代表任何公司!仅用于SAP软件应用学习参考。 SAP/ERP系统生产订单完工后,在进行结算之前,需要进行技术性完成操作,即将生产订单批量标记TECO,标记上TECO表示生…

独立站运营教程:站外引流如何做?

在当今全球化的商业环境中,跨境电商已经成为一个蓬勃发展的行业。对于跨境电商独立站来说,站外引流是非常关键的一环,它可以帮助独立站吸引更多潜在客户,提升品牌知名度,促进销售增长。本文将深入探讨如何实现跨境电商…

eNSP学习——静态路由及默认路由基本配置

目录 知识背景 实验目的 实验步骤 实验内容 实验拓扑 实验编址 实验前期准备 实验步骤 1、基本配置(按照实验编址设置好对应的IP地址) 2、是实现主机之间的通信 3、实现全网全通来增强网络的可靠性 4、使用默认路由实现简单的网络优化 需要各…

【静态分析】静态分析笔记07 - 指针分析基础

参考: 【课程笔记】南大软件分析课程7——指针分析基础(课时9/10) - 简书 -------------------------------------------------------------- 1. 指针分析规则 规则:采用推导形式,横线上面是条件,横线下…

MySQL--表的操作

目录 创建表 查看表结构 修改表 新增列 修改列类型 修改列名 修改表名: 删除列 删除表 创建表 语法: CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引…

【论文阅读】Self-DC:何时检索,何时生成?

对于RAG来说,什么时候利用外部检索,什么时候使用大模型产生已知的知识,以回答当前的问题?这是一个非常有趣的话题。 《Self-DC: When to retrieve and When to generate? Self Divide-and-Conquer for Compositional Unknown Questions》这…

MySQL尾部空格处理与哪些设置有关? 字符集PAD SPACE与NO PAD属性的区别、MySQL字段尾部有空格为什么也能查询出来?

文章目录 一、问题背景二、字符集PAD_ATTRIBUTE属性(补齐属性)2.2、PAD SPACE与NO PAD的具体意义 三、CHAR类型尾部空格的处理四、其他问题4.1、在PAD SPACE属性时如何实现精准查询 五、总结 以下内容基于MySQL8.0进行讲解 一、问题背景 一次查询中发现…

NVIDIA CUDA Toolkit

NVIDIA CUDA Toolkit CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developer CUDA Toolkit是用于CUDA开发的软件包,主要包括CUDA编译器、运行时库、GPU驱动程序和开发工具等。它允许开发者使用通用编程语言(如C、C)来利用NVIDIA GPU进行…

ZDOCK linux 下载(无需安装)、配置、使用

ZDOCK 下载 使用 1. 下载1)教育邮箱提交申请,会收到下载密码2)选择相应的版本3)解压 2. 使用方法Step 1:将pdb文件处理为ZDOCK可接受格式Step 2:DockingStep 3:创建所有预测结构 1. 下载 1&…

2023平航杯——介质取证部分复现

闻早起的电脑 教徒“闻早起”所使用的笔记本电脑使用何种加密程式? VeraCrypt 教徒“闻早起”所使用的笔记本电脑中安装了一款还原软件,其版本号为?【标准格式:1.2.3.4】 8.71.020.5734 教徒“闻早起”所使用的笔记本电脑中登…

.gitignore语法及配置问题

语法及配置 前言.gitignore语法Git 忽略规则优先级gitignore规则不生效Java项目中常用的.gitignore文件c项目中常用的.gitignore注意事项 前言 在工程中,并不是所有文件都需要保存到版本库中,例如“target”目录及目录下的文件就可以忽略。在Git工作区的…

CSS中的 5 类常见伪元素详解!

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

使用python setup.py报错:Upload failed (403) / Upload failed (400)

当前报错的环境 Python 3.9.19twine1.15.0 本地~/.pypirc已正确配置了用户名和密码,用在pypi.org注册: [pypi]username skylerhupassword ${password}执行 python setup.py sdist upload -r pypi 打包上传到仓库报错。 在不久之前同样的环境&#…

2018-2023年上市公司富时罗素ESG评分数据

2018-2023年上市公司富时罗素ESG评分数据 1、时间:2018-2023年 2、来源:整理自WIND 3、指标:证券代码、简称、ESG评分 4、范围:上市公司 5、指标解释: 富时罗素将公司绿色收入的界定和计算作为公司ESG 评级打分结…

什么是DTU和串口服务器的区别

在工业物联网的快速发展中,数据传输单元(DTU)和串口服务器作为两种关键设备,各自扮演着重要的角色。对于传统行业来说,了解它们的基本概念和区别,有助于更好地选择和应用这些技术,提升生产效率和…

重发布的原理及其应用

重发布的作用: 在一个网络中,若运行多种路由协议或者相同协议的不同进程;因为协议之间不能直接沟通计算,进程之间也是独立进行转发和运算的,所以,需要使用重发布来实现路由的共享。 条件 : 1&am…

js 模拟鼠标移动事件,并监听鼠标移动

代码实现 function simulateClick( x, y) {// 获取目标元素 const element document.querySelector("xxxxx"); // 创建一个鼠标移动事件 var mouseMoveEvent new MouseEvent(mousemove, {screenX: x window.screenX, screenY: y window.screenY, clientX: x,…

Unity 异常 bug

OverlapBoxNonAlloc 使用bug 环境: Unity2021.3.15 在测试场景中使用 OverlapBoxNonAlloc 测试检测没有问题 但是到了真实应用场景,使用 OverlapBoxNonAlloc 检测移动中的小怪 小怪碰撞体为:带有 Rigidbody 的Circle Collider 2D 就会出现异…

Linux网络—DNS域名解析服务

目录 一、BIND域名服务基础 1、DNS系统的作用及类型 DNS系统的作用 DNS系统类型 DNS域名解析工作原理: DNS域名解析查询方式: 2、BIND服务 二、使用BIND构建域名服务器 1、构建主、从域名服务器 1)主服务器配置: 2&…

找不到vcruntime140_1.dll,无法继续执行代码的多种解决方法

在启动电脑并着手进行日常工作的过程中,当我尝试运行一款至关重要的软件时,系统突然弹出一个令人困扰的错误提示:“由于找不到vcruntime140_1.dll,无法继续执行代码”,这个错误信息明确指出,由于缺失了vcru…