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将ip地址转换成整数的方法
Mar 17 Python
python协程用法实例分析
Jun 04 Python
将Emacs打造成强大的Python代码编辑工具
Nov 20 Python
Python读写txt文本文件的操作方法全解析
Jun 26 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
Nov 14 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
python读写文件write和flush的实现方式
Feb 21 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
基于python代码批量处理图片resize
Jun 04 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
PHP If Else(elsefi) 语句
2013/04/07 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
JS中实现函数return多个返回值的实例
2017/02/21 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
Vue关于组件化开发知识点详解
2020/05/13 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
Python中typing模块与类型注解的使用方法
2019/08/05 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
Oracle性能调优原则
2012/05/03 面试题
如何写你的创业计划书
2014/01/07 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python