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总结--|的更多相关文章

  1. pytorch1.0 用torch script导出模型

    python的易上手和pytorch的动态图特性,使得pytorch在学术研究中越来越受欢迎,但在生产环境,碍于python的GIL等特性,可能达不到高并发.低延迟的要求,存在需要用c++接口的情况. ...

  2. pytorch转onnx问题

    Fail to export the model in PyTorch https://github.com/onnx/tutorials/blob/master/tutorials/PytorchA ...

  3. 使用ONNX将模型转移至Caffe2和移动端

    使用ONNX将模型转移至Caffe2和移动端 本文介绍如何使用 ONNX 将 PyTorch 中定义的模型转换为 ONNX 格式,然后将其加载到 Caffe2 中.一旦进入 Caffe2, 就可以运行 ...

  4. 从PyTorch到ONNX的端到端AlexNet

    从PyTorch到ONNX的端到端AlexNet 这是一个简单的脚本,可将Torchvision中定义的经过预训练的AlexNet导出到ONNX中.运行一轮推理Inference,然后将生成的跟踪模型 ...

  5. 【推理引擎】ONNX 模型解析

    定义模型结构 首先使用 PyTorch 定义一个简单的网络模型: class ConvBnReluBlock(nn.Module): def __init__(self) -> None: su ...

  6. 实践torch.fx第二篇-fx量化实操

    好久不见各位,哈哈,又鸽了好久. 本文紧接上一篇<实践torch.fx第一篇--基于Pytorch的模型优化量化神器>继续说,主要讲如何利用FX进行模型量化. 为什么这篇文章拖了这么久,有 ...

  7. 【YOLOv5】手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,实现YOLOv5实时物体识别(含源码)

    前言 上一篇博客给大家介绍了LabVIEW开放神经网络交互工具包[ONNX],今天我们就一起来看一下如何使用LabVIEW开放神经网络交互工具包实现TensorRT加速YOLOv5. 以下是YOLOv ...

  8. [深度学习] Pytorch模型转换为onnx模型笔记

    本文主要介绍将pytorch模型准确导出为可用的onnx模型.以方便OpenCV Dnn,NCNN,MNN,TensorRT等框架调用.所有代码见:Python-Study-Notes 文章目录 1 ...

  9. 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 ...

  10. Torch学习笔记1--Torch简介

    Torch是什么 Torch是一个由Lua语言开发的深度学习框架,目前支持Mac OS X 和Ubuntu 12及以上,官网 ,github地址. 具有如下特点: 交互式开发工具 可视化式的工具 第三 ...

随机推荐

  1. SVN信息泄露漏洞

    SVN信息泄露漏洞 目录 SVN信息泄露漏洞 1 SVN 简介 2 SVN目录 3 SVN信息泄露漏洞危害 4 漏洞利用 5 漏洞修复 1 SVN 简介 SVN(subversion)是一个开放源代码 ...

  2. 网络配置:Netplan

    Netplan 新出的Ubuntu服务器18.04版本修改了IP地址配置程序, Ubuntu和Debian的软件架构师删除了以前的ifup/ifdown命令和/etc/network/interfac ...

  3. P8421 [THUPC2022 决赛] rsraogps

    \(\text{Solution}\) 肯定扫描线在考虑维护什么东西,假设 \(r\) 右移时可以暴力得到所有新值,发现需要维护区间历史版本和以及区间当前值之和 这三个操作对于一个数来说变化次数都是 ...

  4. Git介绍下载安装以及基本使用

    目录 一.git介绍 二.下载安装git软件 三.基本使用 四.制作忽略文件 五.Git.Gitee.GitHub.Gitlab.bitbucket的区别 六.基础代码操作分类 一.git介绍 git ...

  5. pat乙级 1017 A除以B 模拟除法

    #include <stdio.h> #define MAX_A 1000 int A[MAX_A]; int B; /* 除数 */ int num; /* A 被除数有多少位 */ v ...

  6. python的常见问题解决

    1.python库下载安装慢:用清华镜像 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tun ...

  7. mock模拟数据使用教程

    mock模拟数据,get.post请求: https://blog.csdn.net/dongqian911/article/details/115136566 Mock.js 生成随机数据,拦截 A ...

  8. vue学习笔记:Vue生命周期

    概念 一个Vue 实例从开始创建.初始化数据.编译模板.挂载 DOM.渲染→更新→渲染.卸载等一系列过程,这就是 Vue 的生命周期.同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不 ...

  9. 码云或github的"免费服务器"

    目录 一. 码云及工具介绍 二. 操作步骤 (1) 创建vue-cli项目 (2) 码云创建仓库 (3) 修改并提交项目到码云仓库 (4) 运行项目 (5) 注意点 三. 尾声 对于学生党来说,买个服 ...

  10. C#得到和JAVA通过Base64.encodeBase64String(DigestUtils.md5(""))加密后的字符串

    public static string GetMd5(string Str) { MD5 md5Hash = MD5.Create(); // 将输入字符串转换为字节数组并计算哈希数据 byte[] ...