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.hqwc.cn/news/344188.html

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

相关文章

[渗透测试学习] Surveillance -HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描端口 nmap -sV -sC -v -p- --min-rate 1000 10.10.11.245扫出来两个端口,其中80端口有http服务并且重定向到surveillance.htb 那么我们添加下域名然后访问80端口,发现是企业网站尝试扫描子域名和目录无果后,用Wappalyzer插…

云防护概念及云防护作用

云防护是什么 云防护是一种网络安全技术,旨在保护云计算环境中的数据和系统免受恶意攻击和未授权访问。 云防护适用场景 一切http.https.tcp协议,如游戏、电商、金融、物联网等APP PC 网站。 云防护的主要作用 云防护的主要作用是通过搭规模庞大的云防…

NowinAndroid—2024 Android现代开发全功能应用

NowinAndroid—2024 Android现代开发全功能应用 现代Android开发全功能示例应用Now-in-Android,它是用Kotlin和Jetpack Compose开发的,功能非常强大。这个应用遵循了安卓设计和开发的最佳方法,旨在给开发者提供实用的参考资料。无论你是新手…

【控制篇 / 策略】(7.4) ❀ 04. 修改IP地理位置数据库 ❀ FortiGate 防火墙

【简介】虽然通过FortiGuard服务可以更新IP地理位置数据库,但是实际使用环境中,总会有部分IP地址不符合我们的愿景,这种情况下,可以通过修改IP地理位置数据库来达到我们的目标。 更新IP地理位置数据库 更新IP地理位置数据库是Fort…

嵌入式linux 编译qt5(以v851s为例)

本文参考Blev大神的博客:Yuzuki Lizard V851S开发板 --移植 QT5.12.9教程(群友Blev提供) - Allwinner / 柚木PI-V851S - 嵌入式开发问答社区 (100ask.net) 一. 环境准备 1.下载qt5源码:Open Source Development | Open Source …

LeetCode刷题:141. 环形链表

题目: 是否独立解答出:否,有思路,但是代码报错,参考解题代码后,修改通过 解题思路:利用循环与哈希表存储每一个节点,如果发现添加不进去说明,存在环,正常来说…

Docker的基础概念及命令

这篇主要介绍一下Docker比较重要的两个概念,镜像和容器,以及操作它们的一些常用命令。 文章目录 一、基础命令二、镜像三、容器 一、基础命令 docker -v:查看 Docker 的版本 systemctl start docker:启动docker systemctl stat…

刚买的助听器就弄丢了,不想白配,快来看看这8大助听器防丢小技巧

我们知道助听器可以让听损人士重新听到美妙的声音和享受沟通的乐趣。但是,助听器也是一种很贵的物品,如果不小心弄丢了,就会让人心痛不已。 更有甚者,有些人因为害怕丢失助听器,而不敢佩戴助听器,错过了听力…

基于SSM的驾校预约管理系统

基于SSM的驾校预约管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 详情 管理员界面 摘要 随着社会的不断发展,驾驶技能的需求逐渐增…

大数据人工智能在线实习项目:某实习网站招聘信息采集与分析

01前置课程 Python编程基础 Python网络爬虫实战 Python爬虫环境与爬虫简介 网页前端基础 简单静态网页爬取 常规动态网页爬取 模拟登录 Python数据分析与应用、可视化 数据分析概述 Numpy数值计算 Pandas统计分析与数据预处理 Matplotlib可视化 Pyecharts绘图 02师…

第一波!2024年1月精选6款实用AI人工智能设计工具合集

大家好,这是进入2024年之后的第一波干货合集!这次的干货合集还是以 AI 相关的设计干货开头,这次有了在本地无限制帮你清理图片中元素的 AI 工具,有知名免费图库出品的实时 AI 图片生成工具、将截图直接转化为代码的超强工具&#…

扫描电镜技术在材料科学中的应用及发展趋势

在材料科学领域,扫描电镜技术扮演着极为重要的角色,广泛应用于多种材料形态结构、界面状况、损伤机制和材料性能预测的研究。本文将深入探讨扫描电镜技术的结构、主要性能、工作原理、试样制备技术以及在不同领域的应用。 第一部分:扫描电镜…