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中使用lambda高效操作列表的教程
Apr 24 Python
Python的Django框架中forms表单类的使用方法详解
Jun 21 Python
Python中实现switch功能实例解析
Jan 11 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
python tkinter组件摆放方式详解
Sep 16 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
python-地图可视化组件folium的操作
Dec 14 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
PHP实现简单日历类编写
2020/08/28 PHP
javascript禁用Tab键脚本实例
2013/11/22 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
2014年计算机专业个人自我评价
2014/01/19 职场文书
献爱心标语
2014/06/21 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
小学大队干部竞选稿
2015/11/20 职场文书