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获取GY-85九轴模块信息示例
Dec 05 Python
python下os模块强大的重命名方法renames详解
Mar 07 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
Python实现读取txt文件并转换为excel的方法示例
May 17 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
Python合并同一个文件夹下所有PDF文件的方法
Mar 11 Python
python实现远程控制电脑
May 23 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
Python eval函数介绍及用法
Nov 09 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 Python
Python使用永中文档转换服务
May 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
php为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
express中static中间件的具体使用方法
2019/10/17 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
Python标准库之collections包的使用教程
2017/04/27 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
Python中SQLite如何使用
2020/05/27 Python
Python实现一个论文下载器的过程
2021/01/18 Python
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
商务专员岗位职责
2013/11/23 职场文书
装修设计师求职信
2014/02/26 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
工作犯错保证书
2015/05/11 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android