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 07 Python
Python3中使用PyMongo的方法详解
Jul 28 Python
python制作小说爬虫实录
Aug 14 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
如何在python中使用selenium的示例
Dec 26 Python
Python多层装饰器用法实例分析
Feb 09 Python
使用python实现BLAST
Feb 12 Python
Python enumerate函数功能与用法示例
Mar 01 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
pytorch之inception_v3的实现案例
Jan 06 Python
Django 返回json数据的实现示例
Mar 05 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中其实也可以用方法链
2011/11/10 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python随机数random模块使用指南
2016/09/09 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
留学自荐信的技巧
2013/10/17 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
法制宣传实施方案
2014/03/13 职场文书
老师对学生的寄语
2014/04/09 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
运动会口号大全
2014/06/07 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
学习普通话的体会
2014/11/07 职场文书
小学英语复习计划
2015/01/19 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python
python实现双向链表原理
2022/05/25 Python