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 随机数生成的代码的详细分析
May 15 Python
Python multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
django上传图片并生成缩略图方法示例
Dec 11 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
Jan 08 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
Python获取百度热搜的完整代码
Apr 07 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修改Linux或Unix口令的方法分享
2012/01/30 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
详谈javascript异步编程
2016/02/21 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
python练习程序批量修改文件名
2014/01/16 Python
python网络编程学习笔记(四):域名系统
2014/06/09 Python
Python构建XML树结构的方法示例
2017/06/30 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
心得体会怎么写
2013/12/30 职场文书
高中生期末评语大全
2014/01/28 职场文书
职工趣味运动会方案
2014/02/10 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
2015党建工作简报
2015/07/21 职场文书
python随机打印成绩排名表
2021/06/23 Python
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers