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操作串口的方法
Jun 17 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 Python
Python矩阵常见运算操作实例总结
Sep 29 Python
Python 多进程和数据传递的理解
Oct 09 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
python unittest实现api自动化测试
Apr 04 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
python装饰器相当于函数的调用方式
Dec 27 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
基于Python实现一个春节倒计时脚本
Jan 22 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中遍历stdclass object的实现代码
2011/06/09 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
关于微信小程序登录的那些事
2019/01/08 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
python3简单实现微信爬虫
2015/04/09 Python
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Python实现的建造者模式示例
2018/08/06 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
产品工艺师的岗位职责
2013/11/15 职场文书
车间副主任岗位职责
2013/12/24 职场文书
医学院校毕业生自荐信范文
2014/01/01 职场文书
人民教师求职自荐信
2014/03/12 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
微观世界观后感
2015/06/10 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
一文带你探究MySQL中的NULL
2021/11/11 MySQL
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB