Pytorch模型转成onnx并可视化

news2024/10/4 9:35:32

文章目录

  • 转换模型
    • 前提
    • 转换方法
  • 模型可视化
  • 可能出现的报错信息
    • ValueError: torch.nn.DataParallel is not supported by ONNX exporter, please use 'attribute' module to unwrap model from torch.nn.DataParallel. Try torch.onnx.export(model.module, ...)
    • RuntimeError: ONNX export failed on an operator with unrecognized namespace torchvision::roi_align. If you are trying to export a custom operator, make sure you registered it with the right domain and version.
  • 参考资料

本文介绍 pth 模型转为 onnx 模型、使用 onnx 模型进行可视化以及过程中可能出现的问题。

转换模型

前提

首先,你需要有一个自己的pytorch格式的模型,通常的后缀为.pth。
可以通过

save_path = './Mlp.pth'
torch.save(net.state_dict(), save_path)

进行保存。

可以通过

net.load_state_dict(torch.load('Mlp.pth'))

进行加载参数使用。

当然如果你只想可视化的话,不需要训练得到pth参数,只要有模型就可以。

转换方法

import torch.nn

model = MLP().cuda()	# 声明模型
model.load_state_dict(torch.load('Mlp.pth'))	# 加载参数文件(可以没有)
model.eval()

input_names = ['input']
output_names = ['output']
# 自己起名字

x = torch.randn(1,3,512,512,requires_grad=True)
# 这里要把握住网络的输入大小,如果模型是在gpu上进行训练,则将x变为
# x = torch.randn(1,3,128,128,requires_grad=True,device="cuda")

torch.onnx.export(model, x, 'best.onnx', input_names=input_names, output_names=output_names, verbose='True')

如果你的模型需要传入两个参数的话,那就再声明一个 y 变量,和 x 一起以元组的方式 (x, y) 传入.export()方法中。

这样,你就得到了一个onnx模型。
过程中可能出现的问题见最后一章。

模型可视化

import netron
modelPath = "best.onnx"
netron.start(modelPath)
# 先安装netron模块(pip就可以)
# 这里加载的模型可以是torch,也可以是onnx

可视化会进入 http://localhost:8080/ 网址。
效果大致如下图:
在这里插入图片描述

可能出现的报错信息

ValueError: torch.nn.DataParallel is not supported by ONNX exporter, please use ‘attribute’ module to unwrap model from torch.nn.DataParallel. Try torch.onnx.export(model.module, …)

这是因为你的模型使用了 DataParallel 包装。
只需要按照报错信息修改为如下

torch.onnx.export(model.module, x, 'best.onnx', input_names=input_names, output_names=output_names, verbose='True')

即可。

RuntimeError: ONNX export failed on an operator with unrecognized namespace torchvision::roi_align. If you are trying to export a custom operator, make sure you registered it with the right domain and version.

修改为

torch.onnx.export(model.module, (x, y), 'best.onnx', input_names=input_names, output_names=output_names, verbose='True', opset_version=11)

即添加了 opset_version 参数。

类似的报错都可以去查看一下官方文档的版本信息。(查看方法和文档网址见参考资料一章)

参考资料

模型部署入门教程(三):PyTorch 转 ONNX 详解
onnx/docs/Operators.md
Pytorch模型转onnx,模型可视化
UserWarning: You are trying to export the model with onnx:Upsample for ONNX opset version 9
onnx.export报警告:WARNING: The shape inference of prim::Constant type is missing…解决方法

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

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

相关文章

流媒体基础-RTP封装PS流

PS流格式 首条数据结构: RTP Header + PS Header +(System Header + PSM)+ PES(Header + Payload) 非首条数据结构: RTP Header + PS Header + PES(Header + Payload) 接下来记录侧重于找到 H.264 数据,所以会跳过一些暂时不关心的内容。 PS流有一个结束码 MPEG_progr…

信息学奥赛一本通 1916:【01NOIP普及组】求先序排列 | 洛谷 P1030 [NOIP2001 普及组] 求先序排列

【题目链接】 ybt 1916:【01NOIP普及组】求先序排列 洛谷 P1030 [NOIP2001 普及组] 求先序排列 【题目考点】 1. 二叉树 【解题思路】 已知中序、后序遍历序列,构建二叉树,而后对该二叉树做先序遍历,得到先序遍历序列。 该题…

质性分析软件nvivo的学习(二)

0、前言: 这部分内容是,质性分析软件nvivo的学习(一)的衔接内容,建议看完:质性分析软件nvivo的学习(一)再看这部分内容。这里的笔记都是以nvivo12作为学习案例的,其实不…

JVM垃圾回收的并行与并发

文章目录学习资料垃圾回收的并行与并发并发(Concurrent)并行(Parallel)并发 vs 并行总结学习资料 【尚硅谷宋红康JVM全套教程(详解java虚拟机)】 【阿里巴巴Java开发手册】https://www.w3cschool.cn/aliba…

RHCEansible 任务模块

文件操作模块 file模块 ansible-doc file -s path参数 :必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或n…

STM32的升级--ICP/ISP/IAP以及Ymodem协议分析

ICP/ISP/IAP 区别 ICP(In-Circuit Programing): 通过J-Link/SWD等下载器烧写程序,上位机需要借助其他硬件的参与才能更新固件,可以更新MCU的所有存储区域; ISP(In-System Programing): 通过MCU出厂时固化的一个bootloader升级程序&#xff0…

重点算法排序之快速排序、归并排序(上篇)

文章目录 一、排序的概念及常见的排序算法 二、快速排序的思想及代码详解 2、1 快速排序的思想 2、2 挖坑法 2、2、1 挖坑法实现思想 2、2、2 挖坑法举例 2、2、3 挖坑法代码实现 2、3 左右指针法 2、3、1 左右指针法实现思想 2、3、2 左右指针法举例 2、3、3 左右指针法代码…

类的成员之四:代码块

文章目录一、代码块静态代码块非静态代码块注意总结:由父及子,静态先行属性赋值总结一、代码块 1、代码块的作用:用来初始化类、对象 2、代码块如果有修饰的话,只能使用static 3、分类:静态代码块 vs 非静态代码块 静…

Ubuntu自动登录脚本

Ubuntu自动登录脚本一、!/usr/bin/expect -f的意义二、spawn命令行:三、send命令:四、expect五、interact命令:本人用xshell的SSH登录云服务器,需要从用户Ubuntu切换到root,再切换到lighthouse。编辑了一个自动切换用户…

2-1进程管理-进程与线程

文章目录1.进程2.进程控制块(PCB)3.进程的状态与转换4.进程通信8.线程9.线程和进程的比较10.线程的实现方式11.多线程模型20.线程的状态与转换1.进程 (1)进程是程序的一次执行过程 (2)进程是进程实体的运行…

JavaScript篇.day09-数据类型,表达式,运算符,作用域,语句,严格模式

目录1.数据类型(1)原始数据类型(2)隐式转换(3)逻辑语句中的类型转换(4)数据类型检测2.表达式3.运算符(1)分类(2)其他4.作用域5.语句6.严格模式1.数据类型(1)原始数据类型number, string, boolean, null, undefined, object object对象包含: Array, Function, Date...function f…

【微服务笔记03】微服务组件之Eureka注册中心高可用集群环境搭建

这篇文章,主要介绍微服务组件之Eureka注册中心高可用集群环境搭建。 目录 一、Eureka集群环境 二、搭建Eureka高可用集群环境 2.1、前提准备 (1)修改hosts配置文件 (2)创建父工程项目 2.2、搭建Eureka注册中心 …

数据可视化大屏Echarts高级开发散点图实战案例分析(地图扩展插件bmap.min.js、散点图、百度地图控件、柱图、涟漪动图、条件判断颜色)

系列文章目录 燃,拿来即用!Echarts动态排名柱状图(自适应电脑和手机端)漏刻有时数据可视化Echarts组件开发(27):盒须图(箱线图)前后端php交互的实战案例漏刻有时数据可视化Echarts组件开发(26):全国地图三级热力图下钻和对接api自动调用数据…

高压功率放大器在高校实验室的实际应用领域介绍

功率放大器的应用领域是很多电子工程师都关心的问题,那么功率放大器的使用场景又有哪些呢,下面来介绍一下安泰高压功率放大器在各个高校的实际应用情况。 图:激光切割 一、ATA-1000系列宽带功率放大器 应用领域:激光切割 适用高校…

Power BI 可视化修改配色

示例数据: 一、Power BI 按列排序 当把文本字段放在坐标轴,显示的顺序都乱了,完全不是自己想要的,就像下图所示: 默认按照Y轴的数值降序排序,如果选择按照month 以升序排序,就会如下所示&am…

【CDP】CDP集群如何通过Cloudera Manager配置使用SNMP方式转发告警

前言 这篇文章参考了大神的文章,如何在CDH平台上集成SNMP服务,然后实现了CDP集群集成SNMP服务,这里描述下,如何集成步骤,在CDP集群中告警是一个很重要的信息,最直观的衡量一个集群的健康状况,那…

[深度学习] 基于切片辅助超推理库SAHI优化小目标识别

对象检测是迄今为止计算机视觉中最重要的应用领域。然而,小物体的检测和大图像的推理仍然是实际使用中的主要问题,这是因为小目标物体有效特征少,覆盖范围少。小目标物体的定义通常有两种方式。一种是绝对尺度定义,即以物体的像素…

【小程序】自定义组件

文章目录组件的创建与引用自定义组件的样式自定义组件的数据、方法和属性data数据methods 方法properties 属性数据监听器纯数据字段组件的生命周期组件所在页面的生命周期插槽单个插槽多个插槽父子组件之间的通信behaviors组件的创建与引用 创建一个组件的步骤: …

发票额度报销最优排列组合问题

1、问题描述 因为我的公司每个月给员工会有一定的交通费额度,需要拿发票去报销才能获得的。要求的是发票总金额不能大于报销的额度。因此在实际报销的时候,你要一张张发票去排列组合经可能的把报销金额往报销额度那里去凑。比如你有1000元额度&#xff0…

Unity 3D JavaScript 脚本基础||Unity 3D C# 脚本基础

变量 数值变量。var a1000;var b3.1415926;字符串变量。 是由单引号或双引号括起来的 Unicode 字符序列。 布尔值。 只有 true 和 false 。用来描述某个事物为真或为假。 数组 是数据的集合,数组中的每一个元素都有自己独有的下标,下标从0开始计数。 表…