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 相关文章推荐
python中的__slots__使用示例
Feb 26 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
如何基于Python创建目录文件夹
Dec 31 Python
Django数据结果集序列化并展示实现过程
Apr 22 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 Python
python中threading和queue库实现多线程编程
Feb 06 Python
如何在C++中调用Python
May 21 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
js setattribute批量设置css样式
2009/11/26 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
Python中的自省(反射)详解
2015/06/02 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
python对excel文档去重及求和的实例
2018/04/18 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
Python3 assert断言实现原理解析
2020/03/02 Python
Python正则表达式如何匹配中文
2020/05/27 Python
中国跨境电商:Tomtop
2017/03/16 全球购物
《美丽的黄昏》教学反思
2014/02/28 职场文书
会计员岗位职责
2014/03/15 职场文书
施工安全标语
2014/06/07 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
2015年教师节广播稿
2015/08/19 职场文书
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android