:)torch转onnx总结--|
torch->onnx
参考:
参考连接:https://blog.csdn.net/cxx654/article/details/123011332
1 安装 onnx
>python -m pip install onnx
>python -m pip install onnxruntime
调用onnx

ModuleNotFoundError: No module named 'onnx.defs'
2 原理
I onnx是通用规则的部署格式
所以oneflow ,pytorch等等都需要转onnx。
II 调用export接口转onnx
onnxruntime执行
3 代码工程
导入模块

import os
import numpy
import torch
from torch import nn
import torch.optim as opt
import onnxruntime as ort
import onnx
module
3.1 定义NN
1)def forward中的输入x 训练时输入多少维度就是多少维度。
比如for 循环内x的维度为 [batchsize=10, channel =3, height=256, weight=256]
2)def forward中的输入x 不需要考虑循环batchsize , 不用取单次batchsize=1.
3)输出的return [batchsize 还是10, ...,...,...]
4)CONV与linear之间 有个拍平的过程,
self.flat = nn.Flatten(start_dim=1)
代码

class SC(nn.Module):
"""
input shape = [n, 3, 8, 8] conv->
"""
def __init__(self):
super(SC, self).__init__()
self.cv1 = nn.Conv2d(in_channels=3,
out_channels=10,
kernel_size=3,
bias=True)
self.flat = nn.Flatten(start_dim=1)
# 2分类
self.fc1 = nn.Linear(360, 2) def forward(self, x):
# 1 输入batch原来一样
print("entry========", x.shape)
# 2 实际计算时会batch=1计算结果
# 3 返回原来batch,各个结果。
x_ = self.cv1(x)
x_ = self.flat(x_)
x_ = self.fc1(x_)
return x_
NN
5)定义NN 与 训练教程 与训练过程是分开的
比如以上代码为定义NN
训练教程和训练过程 不定义在类中

# 训练 配置
opter = opt.Adam(sc.parameters(), lr=0.03)
loss = nn.CrossEntropyLoss()
# for 训练过程
train 组件
3.2 保存为输入尺寸固定的onnx
优点:量化时候比较容易
注意:1) torch.load(model) model的类一定要导入或就在同文件。 和torch中的pickel策略有关。
3.3 保存为动态尺寸的onnx
带有实验 给固定参数的onnx ,输入batchsize=另外的数值, 会显示错误

batchsize = 100
x = torch.randn(size=(batchsize, 3, 8, 8))
model_out = sc(x)
print(model_out) # 什么时候 with torch.no_grad()???
os.makedirs("zandir", exist_ok=True) def gen_static():
torch.onnx.export(sc,
x,
"zandir\sc.onnx",
opset_version=11,
input_names=["inp"],
output_names=["opt"]) # 生成动态尺寸
def gen_dynamic():
dynamic_axes = {"inp": {0: "batchsize"}, "opt": {0: "batchsize"}}
torch.onnx.export(sc,
x,
"zandir\sc_dyn.onnx",
opset_version=11,
dynamic_axes=dynamic_axes,
input_names=["inp"],
output_names=["opt"]) # 测试导出静态模型传入非100 batchsize 是否报错
def load_static():
model = onnx.load("zandir\sc.onnx")
r = onnx.checker.check_model(model)
print("r===", r) def load_and_run_onnx_static():
model = onnx.load("zandir\sc.onnx")
session = ort.InferenceSession("zandir\sc.onnx")
# x = numpy.random.randn(100,3,8,8).astype(numpy.float32)
x = numpy.random.randn(16,3,8,8).astype(numpy.float32)
inputdata = {"inp": x}
output = session.run(None, inputdata)
print(len(output))
print(output[0]) def load_and_run_onnx_dyn():
session = ort.InferenceSession("zandir\sc_dyn.onnx")
# x = numpy.random.randn(100,3,8,8).astype(numpy.float32)
x = numpy.random.randn(16,3,8,8).astype(numpy.float32)
inputdata = {"inp": x}
output = session.run(None, inputdata)
print(len(output))
print(output[0]) gen_static()
gen_dynamic()
load_static()
# load_and_run_onnx_static()
load_and_run_onnx_dyn()
save_onnx
:)torch转onnx总结--|的更多相关文章
- pytorch1.0 用torch script导出模型
python的易上手和pytorch的动态图特性,使得pytorch在学术研究中越来越受欢迎,但在生产环境,碍于python的GIL等特性,可能达不到高并发.低延迟的要求,存在需要用c++接口的情况. ...
- pytorch转onnx问题
Fail to export the model in PyTorch https://github.com/onnx/tutorials/blob/master/tutorials/PytorchA ...
- 使用ONNX将模型转移至Caffe2和移动端
使用ONNX将模型转移至Caffe2和移动端 本文介绍如何使用 ONNX 将 PyTorch 中定义的模型转换为 ONNX 格式,然后将其加载到 Caffe2 中.一旦进入 Caffe2, 就可以运行 ...
- 从PyTorch到ONNX的端到端AlexNet
从PyTorch到ONNX的端到端AlexNet 这是一个简单的脚本,可将Torchvision中定义的经过预训练的AlexNet导出到ONNX中.运行一轮推理Inference,然后将生成的跟踪模型 ...
- 【推理引擎】ONNX 模型解析
定义模型结构 首先使用 PyTorch 定义一个简单的网络模型: class ConvBnReluBlock(nn.Module): def __init__(self) -> None: su ...
- 实践torch.fx第二篇-fx量化实操
好久不见各位,哈哈,又鸽了好久. 本文紧接上一篇<实践torch.fx第一篇--基于Pytorch的模型优化量化神器>继续说,主要讲如何利用FX进行模型量化. 为什么这篇文章拖了这么久,有 ...
- 【YOLOv5】手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,实现YOLOv5实时物体识别(含源码)
前言 上一篇博客给大家介绍了LabVIEW开放神经网络交互工具包[ONNX],今天我们就一起来看一下如何使用LabVIEW开放神经网络交互工具包实现TensorRT加速YOLOv5. 以下是YOLOv ...
- [深度学习] Pytorch模型转换为onnx模型笔记
本文主要介绍将pytorch模型准确导出为可用的onnx模型.以方便OpenCV Dnn,NCNN,MNN,TensorRT等框架调用.所有代码见:Python-Study-Notes 文章目录 1 ...
- Torch Problems: require some packages doesn't work
I've recently got a problem. require 'cutorch' doesn't work. But it was ok yesterday, although I hav ...
- Torch学习笔记1--Torch简介
Torch是什么 Torch是一个由Lua语言开发的深度学习框架,目前支持Mac OS X 和Ubuntu 12及以上,官网 ,github地址. 具有如下特点: 交互式开发工具 可视化式的工具 第三 ...
随机推荐
- KMP字符串 AcWing 831
题目:https://www.acwing.com/problem/content/833/ 题意:求子串在母串中每次出现时的下标位置. 题解:哈哈哈,敲题时想到之前看到一个人叫 kmp 算法为 看毛 ...
- js实现图片选中马上显示图片名,选择后可以预览,即选即显
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Python连接Hadoop-impala方法
from impala.dbapi import connectfrom impala.util import as_pandas连接方式 conn1= connect(host='xxx.xxx.x ...
- 在线设计器 DesignO 的分析
需求分析 现有POD网站的在线编辑器不是很好用. 可配置性不强,素材无法在后台实现管理 可扩展性不强,无法应用于多个行业,比如包装.服装 产品分析 官方网站:https://www.designnbu ...
- Vue的watch观察xxx.xx.xx点出属性值的解决办法
解决办法 使用引号引起来,如: watch: { '$route.params.value'(newValue) { ... } }
- Python基础语法复习笔记(一):字符串
python基础复习笔记 个人主页:JoJo的数据分析历险记 个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生 如果文章对你有帮助,欢迎关注.点赞.收藏.订阅专栏 本专栏主要 ...
- springboot-maven打包项目
在project 标签内,新增一下内容 <build> <plugins> <!--打包项目--> <plugin> <groupId>or ...
- pgbouncer相关概念和使用
pgbouncer相关概念和使用 1.pgbouncer介绍 PG 是多进程结构,每新增一个会话就会新增一个进程,相对而言对数据库的开销就会比较巨大. 因为在正常业务会话中,有不少sessio ...
- CodeGym自学笔记07——入门Java书籍
入门Java书籍 Head First Java Java:The Complete Reference,作者:Herbert Schildt 这本书对初学者也很有好处.与前一本书的主要区别在于素 ...
- Homebrew macOS飞速安装教程
快速安装 打开终端 /bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/insta ...