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

news/2024/5/19 18:03:14

查了很多资料,很多用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.mrgr.cn/p/45437632

相关文章

双屏后wocam手绘板手感奇怪

把比例一定给关掉,就舒服很多1.打开驱动面板 2.选中映射 3.取消比例一定

前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构

前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构 LIMS实验室管理系统 发展历史 实验室信息管理系统(LIMS),就是指通过计算机网络技术对实验的各种信息进行管理的计算机软、硬件系统。也就是将计算机网络技术与现…

【Qt 专栏】文件对话框 文件的弹窗选择-QFileDialog

前言: 通过按钮实现文件弹窗选择以及关联的操作 效果图就和平时用电脑弹出的选文件对话框一样原型图 技能: 头文件: #include<QFileDialog>//头文件QString filename = QFileDialog::getOpenFileName(this, "弹窗标题", "E://","Images(*.pn…

探索MATLAB在计算机视觉与深度学习领域的实战应用

随着人工智能技术的快速发展&#xff0c;计算机视觉与深度学习已成为科技领域中最热门、最具挑战性的研究方向之一。 它们的应用范围从简单的图像处理扩展到了自动驾驶、医疗影像分析、智能监控行业等多个领域。 在这样的背景下&#xff0c;《MATLAB计算机视觉与深度学习实战…

JDK升级专题

一、JVM17与JVM8的变化 模块化系统(Project Jigsaw) 新的垃圾收集器 JDK 17 引入了 ZGC 和 Shenandoah,这两个垃圾回收器在低延迟和高吞吐量方面表现优秀,同时提高了内存管理效率。二、SpringBoot与SpringCloud版本对应关系及Spring Boot与JDK对应关系。 参考资料1、【译…

【八股】Spring Boot

SpringBoot是如何实现自动装配的&#xff1f; 首先&#xff0c;SpringBoot的核心注解SpringBootApplication里面包含了三个注解&#xff0c;SpringBootConfigurationEnableAutoConfigurationComponentScan&#xff0c;其中EnableAutoConfiguration是实现自动装配的注解&#x…

Qt Creator Pro文件添加库和源文件

在项目的pro文件所在的文件夹中添加源文件lib_header &#xff0c;entityobject 如下图所示&#xff1a; 在 pro 文件里面添加源文件的路径如下所示&#xff1a; 这个英文符号点&#xff0c;表示当前目录&#xff0c;因为这个文件是和pro文件在同一个目录下&#xff0c;所以用…

python--使用pika库操作rabbitmq实现需求

Author: wencoo Blog&#xff1a;https://wencoo.blog.csdn.net/ Date: 22/04/2024 Email: jianwen056aliyun.com Wechat&#xff1a;wencoo824 QQ&#xff1a;1419440391 Details:文章目录 目录正文 或 背景pika链接mqpika指定消费数量pika自动消费实现pika获取队列任务数量pi…

【电控笔记5.4】pwm延迟

PWM延迟 1标准采样法 Td=MCU计算延迟+输出延迟 Tcon=电流控制周期 Ts=PWM载波周期 Td=1.5Ts(6.3节 ) 电流环跟PWM采样周期同步 2修改采样法

python爬虫学习------scrapy第二部分(第三十天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

压缩即智能:为什么 ChatGPT 拥有智能?(转)

源地址: 背景 随着 ChatGPT、GPT4、PaLM2、文心一言各种大模型的爆火,我们在惊讶大模型能力的同时,也在不断的问自己一个问题,为什么 Decode-only 的 ChatGPT 拥有智能? GPT 其实就是基于 Transformer 的 Decode-only,本质是就是 Next Token Prediction,为啥如此简单的结…

docker常用基本命令

把jar包和 dockerfile文件放到同一目录下#构建Docker镜像 注意后面的 . 不能省略 docker build -t your-image-name .#运行并创建一个容器 docker run -d -p 8080:8080 --name container_name your-image-name# 停止容器 767fce4cb990 容器ID (容器名也可以) docker stop 767f…

Android Studio开发工具学习之Git远程仓库拉取与推送

Git远程仓库操作 1.1 推送项目到远端服务器1.1.1 进入Gitee或Github、创建一个新的仓库1.1.2 将Android Studio中项目推送至Gitee 1.2 从远端服务器拉取项目1.2.1 AS工程页拉取新项目1.2.2 AS启动页拉取项目 1.1 推送项目到远端服务器 1.1.1 进入Gitee或Github、创建一个新的仓…

vue3推荐算法

Vue 3 推荐算法主要指的是在 Vue 3 框架中实现的或者适用于 Vue 3 的算法库或组件库。Vue 3 由于其优秀的设计和性能&#xff0c;被广泛应用于构建各种类型的应用程序&#xff0c;包括需要复杂算法支持的项目。以下是一些在 Vue 3 中可能会用到的推荐算法资源&#xff1a; Vue-…

【Network Automation系列】-- 第一章

引言: 本系列是根据《Mastering Python NetworkingThird Edition》翻译整理出来的,原著作者:Eric Chou,大家可以关注一下。 随着网络工程领域的快速变化,我们无疑也经历了类似的变化。 随着软件开发越来越多地集成到网络的各个方面、传统的命令行接口和垂直集成中,网络堆栈…

selenium--绕过网站监控操作

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, webdriver, {get: () => undefined})""", }) #r绕过网站对webdriver的监测

Rime 如何通过 iCloud 实现词库多端同步,Windows、iOS、macOS

Rime 如何通过 iCloud 实现词库多端同步&#xff0c;Windows、iOS、macOS 一、设备环境 最理想的输入环境就是在多端都使用同一个词库&#xff0c;这样能保持多端的输入习惯是一致的。 以我为例&#xff0c;手头每天都要用到的操作平台和对应的输入法&#xff1a; 操作系统设…

data参数

大部分时间都是Content-Type: application/json,flask_appbuilder的服务中很多接口是 multipart/form-data;,用python调用时,通常情况下 data = json.dumps({ "catalogCode":"region","pageNo": 1, "pageSize": 1000}) headers = {T…

Linux目录及文件管理

Linux目录结构/(根目录):根目录是整个文件系统的起点,包含了所有其他目录和文件。 /bin(二进制文件):存放系统的基本命令,如 ls、cp、mv 等。 /boot(引导文件):存放启动 Linux 所需的引导文件,如内核文件、引导加载程序配置文件等。 /dev(设备文件): 包含系统中所有的设…