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的Django框架可适配的各种数据库介绍
Jul 15 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
python代数式括号有效性检验示例代码
Oct 04 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 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自动更新新闻DIY
2006/10/09 PHP
杏林同学录(六)
2006/10/09 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
python 读取.nii格式图像实例
2020/07/01 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
给校长的建议书500字
2014/05/15 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers