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将html转成PDF的实现代码(包含中文)
Mar 04 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
python中使用iterrows()对dataframe进行遍历的实例
Jun 09 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
Python:slice与indices的用法
Nov 25 Python
python3 sleep 延时秒 毫秒实例
May 04 Python
Python非单向递归函数如何返回全部结果
Dec 18 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 Python
PO模式在selenium自动化测试框架的优势
Mar 20 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边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
php二维码生成
2015/10/19 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
使用Vue生成动态表单
2019/11/26 Javascript
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
python实现自动登录
2018/09/17 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
配件采购员岗位职责
2013/12/03 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
高二政治教学反思
2014/02/01 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
雷锋的故事观后感
2015/06/10 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
python实现剪贴板的操作
2021/07/01 Python