iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >【yolov5】pytorch模型导出为onnx模型
  • 578
分享到

【yolov5】pytorch模型导出为onnx模型

pytorch深度学习pythonyolov5模型转换 2023-09-14 13:09:57 578人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

博主想拿官网的yolov5训练好pt模型,然后转换成rknn模型,然后在瑞芯微开发板上调用模型检测。但是官网的版本对npu不友好,所以采用改进结构的版本: 将Focus层改成Conv层将Swis

博主想拿官网的yolov5训练好pt模型,然后转换成rknn模型,然后在瑞芯微开发板上调用模型检测。但是官网的版本对npu不友好,所以采用改进结构的版本:

  1. 将Focus层改成Conv层
  2. 将Swish激活函数改成Relu激活函数

自带的预训练模型是预测80类CoCo数据集的yolov5s改进结构,下面就带大家一起转换模型!

首先部署好yolov5的环境,保证可以运行detect.py进行检测,将自己训练好的pt模型放到weights目录下,我这里命名是best.pt。

在这里插入图片描述

pip install onnx安装好onnx库

在这里插入图片描述
3、输入下面命令导出模型(后面的weights、img和batch参数可以不加,设置下默认参数即可)

python models/export.py --weights ./weights/best.pt --img 640 --batch 1

然后会分解网络层,预览模型层数和参数量,最后保存为./weights/best.onnx

(yolov5) dzh@dzh-Lenovo-Legion-Y7000:~/airockchip-yolov5$ Python models/export.py --weights ./weights/best.pt --img 640 --batch 1Namespace(batch_size=1, img_size=[640, 640], weights='./weights/best.pt')Fusing layers... Model Summary: 140 layers, 7.2627e+06 parameters, 0 gradientsStarting TorchScript export with torch 1.12.1+cu102.../home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages/torch/jit/_trace.py:967: TracerWarning: Encountering a list at the output of the tracer might cause the trace to be incorrect, this is only valid if the container structure does not change based on the module's inputs. Consider using a constant container instead (e.g. for `list`, use a `tuple` instead. for `dict`, use a `NamedTuple` instead). If you absolutely need this and know the side effects, pass strict=False to trace() to allow this behavior.  module._c._create_method_from_trace(TorchScript export success, saved as ./weights/best.torchscript.ptStarting ONNX export with onnx 1.12.0.../home/dzh/airockchip-yolov5/./models/yolo.py:103: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!  if augment:/home/dzh/airockchip-yolov5/./models/yolo.py:128: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!  if profile:/home/dzh/airockchip-yolov5/./models/yolo.py:143: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!  if profile:/home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages/torch/onnx/symbolic_helper.py:621: UserWarning: You are trying to export the model with onnx:Resize for ONNX opset version 10. This operator might cause results to not match the expected results by PyTorch.ONNX's Upsample/Resize operator did not match Pytorch's Interpolation until opset 11. Attributes to determine how to transfORM the input were added in onnx:Resize in opset 11 to support Pytorch's behavior (like coordinate_transformation_mode and nearest_mode).We recommend using opset 11 and above for models using this operator.  warnings.warn(ONNX export success, saved as ./weights/best.onnxExport complete (4.98s). Visualize with https://GitHub.com/lutzroeder/netron.(yolov5) dzh@dzh-Lenovo-Legion-Y7000:~/airockchip-yolov5$ 

导出的onnx模型可以用Netron网站查看网络结构:

在这里插入图片描述
可以看到转换后的结构比较乱,有些结点其实可以跳过,减小模型。这里可以使用修改onnx模型的工具,说明都在Readme中。

在这里插入图片描述

这里我们使用深度学习的库onnx-simplifier,通过pip安装即可。

Collecting onnx-simplifier  Downloading onnx_simplifier-0.4.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 203.7 kB/s eta 0:00:00Requirement already satisfied: onnx in /home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages (from onnx-simplifier) (1.12.0)Collecting rich  Downloading rich-12.6.0-py3-none-any.whl (237 kB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 237.5/237.5 kB 191.1 kB/s eta 0:00:00Requirement already satisfied: numpy>=1.16.6 in /home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages (from onnx->onnx-simplifier) (1.23.3)Requirement already satisfied: protobuf<=3.20.1,>=3.12.2 in /home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages (from onnx->onnx-simplifier) (3.19.6)Requirement already satisfied: typing-extensions>=3.6.2.1 in /home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages (from onnx->onnx-simplifier) (4.4.0)Collecting commonmark<0.10.0,>=0.9.0  Downloading commonmark-0.9.1-py2.py3-none-any.whl (51 kB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 51.1/51.1 kB 215.0 kB/s eta 0:00:00Collecting pygments<3.0.0,>=2.6.0  Downloading Pygments-2.13.0-py3-none-any.whl (1.1 MB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 142.8 kB/s eta 0:00:00Installing collected packages: commonmark, pygments, rich, onnx-simplifierSuccessfully installed commonmark-0.9.1 onnx-simplifier-0.4.8 pygments-2.13.0 rich-12.6.0(yolov5) dzh@dzh-Lenovo-Legion-Y7000:~/airockchip-yolov5$ python -m onnxsim ./weights/red.onnx ./weights/red2.onnxInstalling onnxruntime by `/home/dzh/anaconda3/envs/yolov5/bin/python -m pip install --user onnxruntime`, please wait for a moment..Collecting onnxruntime  Downloading onnxruntime-1.12.1-cp38-cp38-manylinux_2_27_x86_64.whl (4.9 MB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.9/4.9 MB 52.8 kB/s eta 0:00:00Collecting coloredlogs  Downloading coloredlogs-15.0.1-py2.py3-none-any.whl (46 kB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.0/46.0 kB 74.5 kB/s eta 0:00:00Requirement already satisfied: protobuf in /home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages (from onnxruntime) (3.19.6)Collecting sympy  Downloading sympy-1.11.1-py3-none-any.whl (6.5 MB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5/6.5 MB 72.3 kB/s eta 0:00:00Requirement already satisfied: packaging in /home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages (from onnxruntime) (21.3)Requirement already satisfied: numpy>=1.21.0 in /home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages (from onnxruntime) (1.23.3)Collecting flatbuffers  Downloading flatbuffers-22.9.24-py2.py3-none-any.whl (26 kB)Collecting humanfriendly>=9.1  Downloading humanfriendly-10.0-py2.py3-none-any.whl (86 kB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 86.8/86.8 kB 129.3 kB/s eta 0:00:00Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /home/dzh/anaconda3/envs/yolov5/lib/python3.8/site-packages (from packaging->onnxruntime) (3.0.9)Collecting mpmath>=0.19  Downloading mpmath-1.2.1-py3-none-any.whl (532 kB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 532.6/532.6 kB 128.3 kB/s eta 0:00:00Installing collected packages: mpmath, flatbuffers, sympy, humanfriendly, coloredlogs, onnxruntime

然后输入python -m onnxsim ./weights/red.onnx ./weights/red2.onnx优化onnx模型。可以看到优化前后的表。

在这里插入图片描述


总结可能遇到的问题:

ONNX export failure: No module named ‘onnx’
原因:没有安装onnx库导致找不到该模块
RuntimeError: Given groups=1, weight of size [32, 12, 3, 3], expected input[1, 3, 640, 640] to have 12 channels, but Got 3 channels instead
模型预期的图像通道是12,但是现在输入是3个通道的图像,所以在图片输入之前改成模型需要的通道数

来源地址:https://blog.csdn.net/qq_42257666/article/details/127244265

--结束END--

本文标题: 【yolov5】pytorch模型导出为onnx模型

本文链接: https://www.lsjlt.com/news/407305.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【yolov5】pytorch模型导出为onnx模型
    博主想拿官网的yolov5训练好pt模型,然后转换成rknn模型,然后在瑞芯微开发板上调用模型检测。但是官网的版本对npu不友好,所以采用改进结构的版本: 将Focus层改成Conv层将Swis...
    99+
    2023-09-14
    pytorch 深度学习 python yolov5 模型转换
  • PyTorch 模型 onnx 文件导出及调用详情
    目录前言基本用法高级 API前言 Open Neural Network Exchange (ONNX,开放神经网络交换) 格式,是一个用于表示深度学习模型的标准,可使模型在不同框架...
    99+
    2024-04-02
  • pytorch模型转onnx模型的方法详解
    目录学习目标学习大纲学习内容1 . pytorch 转 onnx2 . 运行onnx模型3.onnx模型输出与pytorch模型比对总结学习目标 1.掌握pytorch模型转换到on...
    99+
    2024-04-02
  • PyTorch模型转换为ONNX格式实现过程详解
    目录1. 安装依赖2. 准备模型3. 调整输入和输出节点4. 运行转换程序5. 使用后端框架测试ONNX模型6. 核对结果1. 安装依赖 将PyTorch模型转换为ONNX格式可以使...
    99+
    2023-05-17
    PyTorch模型转换为ONNX格式 PyTorch转换ONNX
  • pytorch_pretrained_bert如何将tensorflow模型转化为pytorch模型
    pytorch_pretrained_bert将tensorflow模型转化为pytorch模型 BERT仓库里的模型是TensorFlow版本的,需要进行相应的转换才能在pytor...
    99+
    2024-04-02
  • c++部署yolov5模型
    C++部署yolov5模型 前言一、准备模型二、Fastdeploy准备三 调用总结 前言 不可否认,yolov5在目标检测方面大杀四方,在 SOTA 榜上留下过万众瞩目的成绩,但是官网代...
    99+
    2023-09-04
    c++ YOLO python
  • 如何将模型转换为ONNX格式
    要将模型转换为ONNX格式,可以使用以下步骤: 安装ONNX工具包:首先,需要安装ONNX工具包。可以通过pip安装ONNX工具包...
    99+
    2024-04-02
  • navicat导出模型的方法
    小编给大家分享一下navicat导出模型的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!进入到Navicat的模型窗口,如图...
    99+
    2024-04-02
  • navicat怎么导出模型图
    使用 navicat 导出模型图步骤:打开 navicat 并连接数据库。选择 "模型" 选项卡。展开数据库对象并选择所需对象。右键单击并选择 "导出模型图"。选择导出格式、设置选项、指...
    99+
    2024-04-24
    navicat
  • ONNX模型如何进行推理
    ONNX模型可以通过使用ONNX Runtime库进行推理。ONNX Runtime是一个高性能的推理引擎,支持在多种硬件平台上进行...
    99+
    2024-04-02
  • unity如何单独导出模型
    要单独导出Unity中的模型,您可以按照以下步骤进行操作: 在Unity中选择要导出的模型对象。 在Hierarchy面板中...
    99+
    2023-10-27
    unity
  • python使用onnx模型进行推理
    重点(本质结构重参数化) 我们可以看到基于YoloV7训练的cfg有两种yaml文件,一个是training文件夹,一个是deploy文件夹,这两种文件夹有啥不一样呢??? 大家可以看下下面别人的is...
    99+
    2023-08-31
    python 计算机视觉 开发语言
  • 详细介绍 Yolov5 转 ONNX模型 + 使用ONNX Runtime 的 Python 部署(包含官方文档的介绍)
    1 Pytorch模型转Onnx 对ONNX的介绍强烈建议看,本文做了很多参考:模型部署入门教程(一):模型部署简介 模型部署入门教程(三):PyTorch 转 ONNX 详解 以及Pytorch的官...
    99+
    2023-08-31
    python pytorch 深度学习 目标检测
  • tensorflow导出模型后怎么查看
    你可以使用TensorFlow提供的TensorBoard工具来查看导出的模型。首先,你需要在命令行中使用以下命令启动TensorB...
    99+
    2024-04-03
    tensorflow
  • PyTorch 如何检查模型梯度是否可导
    一、PyTorch 检查模型梯度是否可导 当我们构建复杂网络模型或在模型中加入复杂操作时,可能会需要验证该模型或操作是否可导,即模型是否能够优化,在PyTorch框架下,我们可以使用...
    99+
    2024-04-02
  • labelme制作yolov5模型的数据集
    说明 labelme制作yolov5模型的数据集,超级详细,主要步骤: labelme安装和使用教程python实现json文件转txt文件格式python实现对指定格式文件进行提取 找一批牛和马的数...
    99+
    2023-09-22
    YOLO python pycharm
  • Python深度学习之Keras模型转换成ONNX模型流程详解
    目录从Keras转换成PB模型从PB模型转换成ONNX模型改变现有的ONNX模型精度部署ONNX 模型总结从Keras转换成PB模型 请注意,如果直接使用Keras2ONNX进行模型...
    99+
    2024-04-02
  • TensorFlow中怎么加载和运行ONNX模型
    在TensorFlow中加载和运行ONNX模型需要使用TensorFlow的ONNX模型转换工具。具体步骤如下: 首先安装Tens...
    99+
    2024-04-08
    ONNX TensorFlow
  • 怎么用PyTorch部署模型
    本篇内容介绍了“怎么用PyTorch部署模型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用Docker安装安装torchserve最好的...
    99+
    2023-06-29
  • ONNX格式适用于哪些类型的深度学习模型
    ONNX格式适用于各种类型的深度学习模型,包括但不限于卷积神经网络(CNN)、循环神经网络(RNN)、长短时记忆网络(LSTM)、生...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作