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 相关文章推荐
videocapture库制作python视频高速传输程序
Dec 23 Python
使用Python解析JSON数据的基本方法
Oct 15 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
python 批量修改/替换数据的实例
Jul 25 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
Python玩转加密的技巧【推荐】
May 13 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
python requests证书问题解决
Sep 05 Python
NumPy统计函数的实现方法
Jan 21 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
python3 os进行嵌套操作的实例讲解
Nov 19 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
图书管理程序(三)
2006/10/09 PHP
杏林同学录(四)
2006/10/09 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
判定是否原生方法的JS代码
2013/11/12 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
基于webpack.config.js 参数详解
2018/03/20 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Python程序设计入门(2)变量类型简介
2014/06/16 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
最小二乘法及其python实现详解
2020/02/24 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
西班牙手机之家:Phone House
2018/10/18 全球购物
办公室文秘自我鉴定
2013/09/21 职场文书
我的画教学反思
2014/04/28 职场文书
我的中国梦口号
2014/06/16 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
学生会干部任命书
2015/09/21 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js