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实现的二叉树算法和kmp算法实例
Apr 25 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
Python使用matplotlib绘制三维参数曲线操作示例
Sep 10 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
Python常用库大全及简要说明
Jan 17 Python
基于python生成英文版词云图代码实例
May 16 Python
Python如何绘制日历图和热力图
Aug 07 Python
python中编写函数并调用的知识点总结
Jan 13 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打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
jQuery事件对象总结
2016/10/17 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Pandas标记删除重复记录的方法
2018/04/08 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
将python图片转为二进制文本的实例
2019/01/24 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
思想汇报格式
2014/01/05 职场文书
培训演讲稿范文
2014/01/12 职场文书
基层工作经历证明
2014/01/13 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
网络书店创业计划书
2014/02/07 职场文书
运输服务质量承诺书
2014/03/27 职场文书
网络编辑求职信
2014/04/30 职场文书
军训个人总结
2015/03/03 职场文书
员工手册董事长致辞
2015/07/29 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
Python re.sub 反向引用的实现
2021/07/07 Python
python实现简单石头剪刀布游戏
2021/10/24 Python