Paddle模型转ONNX

深度学习模型在硬件加速器上的部署常常要用到ONNX(Open Neural Network Exchange,开放神经网络交换)格式,也可以通过ONNX实现不同AI框架(如Pytorch、TensorFlow、Caffe2、PaddlePaddle等)之间的模型转换。

最近临时使用PaddlePaddle开发模型,需要将准备好的模型转换成ONNX格式,在此记录一下。

Paddle转ONNX库需要用到paddle2onnx工具。在完成PaddlePaddle环境安装的基础上,通过如下命令安装paddle2onnx:

pip install paddle2onnx

安装完成后,就可以通过该工具完成paddle模型向onnx的转换了。下面就用一个简单的例子来说明用法。

首先,定义一个我们自己的模型。比如,我们定义一个轻量级OCR检测模型,该模型由三部分组成,分别是:一个轻量级特征提取网络MobileNetV3、一个金字塔结构FPN和一个Head,这三个结构已经在PaddleOCR开源代码中定义好了,我们只需要自己将这几部分拼成一个模型即可:

import paddle
from ppocr.modeling.heads.det_db_head import DBHead
from ppocr.modeling.backbones.det_mobilenet_v3 import MobileNetV3
from ppocr.modeling.necks.db_fpn import DBFPNclass MyPaddleOCR(paddle.nn.Layer):def __init__(self, out_channels):super(MyPaddleOCR, self).__init__()self.backbone = MobileNetV3()self.in_channels = self.backbone.out_channelsself.fpn = DBFPN(in_channels=self.in_channels, out_channels=out_channels)self.db_head = DBHead(in_channels=out_channels)def forward(self, x):backbone_outs = self.backbone(x)fpn_outs = self.fpn(backbone_outs)head_outs = self.db_head(fpn_outs)return head_outs

网络定义好之后,当然要进行模型训练,或者加载已知模型参数,这部分略去,我们直接讲如何将paddle模型转换成onnx。

模型转换需要用到paddle.onnx.export接口,像其他框架一样,导出模型时也需要指定输入数据的shape,在Paddle中,可以使用paddle.static.InputSpec来指定输入数据的shape,调用流程如下:

paddle_ocr_model = MyPaddleOCR(out_channels=256)# ......
# 省略模型训练或参数加载# 定义输出onnx文件路径
onnx_path = 'paddle_ocr_det'# 定义输入数据,包括shape、type、name
# 将某一维度设置为None,则该维度为动态维度
#x_spec = paddle.static.InputSpec([None, 1, 640, 640], 'float32', 'x')
x_spec = paddle.static.InputSpec([1,3,640,640], 'float32', 'x')# 调用paddle.onnx.export接口导出onnx模型
paddle.onnx.export(paddle_ocr_model, onnx_path, input_spec=[x_spec], opset_version=11)

好了,现在在当前目录下生成了paddle_ocr_det.onnx文件,让我们用onnxruntime来运行一下:

    import onnxruntimeimport numpy as nponnx_path = 'paddle_ocr_det.onnx'x = np.random.random((1, 3, 640, 640)).astype('float32')ort_sess = onnxruntime.InferenceSession(onnx_path)ort_inputs = {ort_sess.get_inputs()[0].name: x}ort_outs = ort_sess.run(None, ort_inputs)print(ort_outs[0].shape)

输出结果的形状为: (1, 3, 640, 640),是OK的。

ps:如果环境中未安装onnxruntime,需要先安装一下,看自己的机器是否有GPU,选择以下两个命令安装即可:

非GPU机器:

pip install onnxruntime

GPU机器:

pip install onnxruntime-gpu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformer详解【学习笔记】

文章目录 1、Transformer绪论2、Encoders和Decoder2.1 Encoders2.1.1 输入部分2.1.2 多头注意力机制2.1.3 残差2.1.4 LayNorm(Layer Normalization)2.1.5 前馈神经网路 2.2 Decoder2.2.1 多头注意力机制2.2.2 交互层 1、Transformer绪论 Transformer在做…

为什么企业容易陷入“自嗨式营销”,媒介盒子分析

互联网时代,各类信息都传播的非常快,同时信息技术的成熟也让许多企业可以监测广告效果,比如曝光、互动、转化等都可以通过数据体现,然而很多企业在营销过程中却发现,大部分的钱、精力、人力等都被浪费了。出现这种情况…

响应式编程WebFlux基础API

WebFlux的工作流程 在WebFlux中,主要的组件包括: Reactor: Reactor是WebFlux底层使用的响应式编程库,提供了Mono和Flux这两种响应式类型,分别用于表示0-1个和0-N个异步序列元素。WebHandler: 是处理请求的核心接口,所…

Git的简单使用说明

Git入门教程 git的最主要的作用:版本控制,协助开发 一.版本控制分类 ​​ 1.本地版本控制 ​​ 2.集中版本控制 ​​ 所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不…

制作 Kali 可启动 USB 驱动器

Kali USB驱动器,轻松安全,获取最新镜像,开始强大的安全测试! Kali 可启动 USB 驱动器的优点: 不会更改主机系统的硬盘驱动器或已安装的操作系统,并且要返回正常操作,您只需删除“Kali Live”U…

模型评估:超参数调优

对于很多算法工程师来说,超参数调优是一件非常头疼的事情。除了根据经验设定所谓的“合理值”之外,一般很难找到合理的方法去寻找超参数的最优取值。而与此同时,超参数对于模型效果的影响又至关重要。有没有一些可行的办法去进行超参数的调优…

Qt 6之七:学习资源

Qt 6之七:学习资源 Qt是一种跨平台的C应用程序开发框架,它提供了一套丰富的工具和库,可以帮助开发者快速构建跨平台的应用程序,用于开发图形用户界面(GUI)和非GUI应用程序。 Qt 6之一:简介、安…

全国(山东、安徽)职业技能大赛--信息安全管理与评估Apache配置评估题目+WP解析+环境

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步…

小手也能用的高性能鼠标,自定义空间还挺高,雷柏VT9Pro mini上手

今年搭载PAW3395传感器的电竞鼠标很受欢迎,雷柏就出了不少型号,满足各种喜好的玩家选择,像是近期新出的搭载3395高定版的VT9Pro和VT9Pro mini,就在轻量化的基础上,满足了各种手型的玩家的使用需要,而且价格…

Whale 帷幄创始人叶生晅:AIGC 时代,营销的范式变了丨未来 AI 谈

「未来 AI 谈」是「Marteker 营销技术官」联合「Digital Frontier 首席数字官」共同发起的一档对话栏目,旨在探讨生成式 AI 的崛起对泛营销技术和营销自动化带来的影响,以期帮助全行业探索 AIGC 时代的新营销之路。 本期嘉宾:「Whale 帷幄」创…

Linux中DNS域名解析服务及实验

一、DNS介绍 1、DNS 是域名系统,应用层协议,是互联网的一项服务,是将域名转换成网络可以识别的IP地址,再通过IP地址访问主机。这种由文字组成的名称更容易记忆。 DNS是“域名系统"的英文缩写。它作为将域名和IP地址相互映…

如何提高匹配的精确度(多次学习)

我们工业自动化中,视觉软件匹配,都是学习一次,比如找到轮廓,旋转360度,也就是有360个轮廓,然后到图像中去找任意角度的目标。 这样的学习并不能一而概括全。 所以,我借鉴ai的方法,…

C语言:高地址和低地址、高字节与低字节、大小端模式的转换、存储顺序

https://blog.csdn.net/oqqHuTu12345678/article/details/82823890/ 和另外一篇栈的生长、存放顺序一样,一般描述栈的方向是相反的,即栈底在下,栈顶在上。注意大小端存储方式,简单讲小端是低字节低地址,高字节高地址&…

ERP管理平台—通用功能测试用例

ERP管理平台—通用功能测试用例 登录页面UI页面UI验证正确打开系统

C#超市管理系统源码

C#超市管理系统源码 功能齐全的超市管理系统,专门美化过UI 请先附加数据库,否则无法进入系统 默认拥有最高权限账户为经理,密码为admin 压缩包内有使用说明

Cdd诊断数据控中的zz rc yy

如上图所示的Cdd Candela Diagnostic Descriptions 诊断数据库会话定义中有许多的标识符缩写,如zz rc LL xx 等 其实这些字母没有意义,它们只是唯一地标识对话框中的组合组件。

snmp协议配置

引言 SNMP(Simple Network Management Protocol)是一种网络管理协议,用于管理和监控网络设备、操作系统和应用程序。它提供了一组用于检索和修改网络设备配置、监视设备状态和性能的标准化方法。 SNMP 是一个客户端-服务器协议,…

C++ 学习笔记之运算符重载+案例

目录 一、C 运算符重载 二、定义一个成员函数或全局函数 三、计算时间 1.计算时间差 2.时间加减 四、一个运算符重载实例 一、C 运算符重载 是一种特性,它允许程序员重新定义已有的运算符的行为,以适应自定义类型的操作。通过运算符重载&#xff0…

电商新趋势:解析养号的必要性及海外云手机运用攻略

在电商领域,什么最为关键?答案无疑是流量!然而,如何以较低成本获取大量流量成为了许多电商从业者头疼的问题。虽然直接投放广告是一种方式,但在内卷的情况下效果越来越难以令人满意,高昂的广告费用也原来越…

Python如何对csv文件进行操作

csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存储为csv文件,文件内容是: No.,Name,Age,Score1,mayi,18,99 2,jack,21,89 3,tom,25,95 4,rain,19,80 假设上述csv文件保存…