Pytorch模型转onnx模型实例


Posted in Python onJanuary 15, 2020

如下所示:

import io
import torch
import torch.onnx
from models.C3AEModel import PlainC3AENetCBAM

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

def test():
  model = PlainC3AENetCBAM()
 
  pthfile = r'/home/joy/Projects/models/emotion/PlainC3AENet.pth'
  loaded_model = torch.load(pthfile, map_location='cpu')
  # try:
  #   loaded_model.eval()
  # except AttributeError as error:
  #   print(error)

  model.load_state_dict(loaded_model['state_dict'])
  # model = model.to(device)

  #data type nchw
  dummy_input1 = torch.randn(1, 3, 64, 64)
  # dummy_input2 = torch.randn(1, 3, 64, 64)
  # dummy_input3 = torch.randn(1, 3, 64, 64)
  input_names = [ "actual_input_1"]
  output_names = [ "output1" ]
  # torch.onnx.export(model, (dummy_input1, dummy_input2, dummy_input3), "C3AE.onnx", verbose=True, input_names=input_names, output_names=output_names)
  torch.onnx.export(model, dummy_input1, "C3AE_emotion.onnx", verbose=True, input_names=input_names, output_names=output_names)

if __name__ == "__main__":
 test()

直接将PlainC3AENetCBAM替换成需要转换的模型,然后修改pthfile,输入和onnx模型名字然后执行即可。

注意:上面代码中注释的dummy_input2,dummy_input3,torch.onnx.export对应的是多个输入的例子。

在转换过程中遇到的问题汇总

RuntimeError: Failed to export an ONNX attribute, since it's not constant, please try to make things (e.g., kernel size) static if possible

在转换过程中遇到RuntimeError: Failed to export an ONNX attribute, since it's not constant, please try to make things (e.g., kernel size) static if possible的错误。

根据报的错误日志信息打开/home/joy/.tensorflow/venv/lib/python3.6/site-packages/torch/onnx/symbolic_helper.py,在相应位置添加print之后,可以定位到具体哪个op出问题。

例如:

在相应位置添加

print(v.node())

输出信息如下:

%124 : Long() = onnx::Gather[axis=0](%122, %121), scope: PlainC3AENetCBAM/Bottleneck[cbam]/CBAM[cbam]/ChannelGate[ChannelGate] # /home/joy/Projects/models/emotion/WhatsTheemotion/models/cbam.py:46:0

原因是pytorch中的tensor.size(1)方式onnx识别不了,需要修改成常量。

以上这篇Pytorch模型转onnx模型实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyqt和pyside开发图形化界面
Jan 22 Python
Python中函数参数设置及使用的学习笔记
May 03 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
python rsa 加密解密
Mar 20 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
详解Python locals()的陷阱
Mar 26 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
Python3 读取Word文件方式
Feb 13 Python
python实例化对象的具体方法
Jun 17 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
Jan 15 #Python
详解Python实现进度条的4种方式
Jan 15 #Python
pytorch常见的Tensor类型详解
Jan 15 #Python
pytorch 常用线性函数详解
Jan 15 #Python
python3.8下载及安装步骤详解
Jan 15 #Python
浅谈pytorch、cuda、python的版本对齐问题
Jan 15 #Python
pytorch模型预测结果与ndarray互转方式
Jan 15 #Python
You might like
PHP访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
Window下PHP三种运行方式图文详解
2013/06/11 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
PHP实现的日历功能示例
2018/09/01 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
什么是python的列表推导式
2020/05/26 Python
浅谈Python 参数与变量
2020/06/20 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
详解python 内存优化
2020/08/17 Python
python实现简单的学生管理系统
2021/02/22 Python
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
财务会计专业应届毕业生求职信
2013/10/18 职场文书
高一家长会邀请函
2014/01/12 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
法制宣传标语
2014/06/23 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
小孩不笨观后感
2015/06/03 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL