Paddle模型转ONNX

这篇具有很好参考价值的文章主要介绍了Paddle模型转ONNX。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

Paddle模型转ONNX,Python,深度学习,paddle

最近临时使用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 DBFPN

class MyPaddleOCR(paddle.nn.Layer):
    def __init__(self, out_channels):
        super(MyPaddleOCR, self).__init__()
        self.backbone = MobileNetV3()
        self.in_channels = self.backbone.out_channels
        self.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 onnxruntime
    import numpy as np

    onnx_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机器:文章来源地址https://www.toymoban.com/news/detail-785578.html

pip install onnxruntime-gpu

到了这里,关于Paddle模型转ONNX的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装后不能调用pytorch和paddlepaddle框架

    之前安装后不能在添加pytorch和paddlepaddle框架 在终端中显示pytorch和paddle在C盘但是安装是安装在J盘 卸载、删除文件重新安装后可以看到文件位置在J盘中  但是选择时还是显示Conda executable is not found 需要先在你自己下载Anaconda的路径下找到Script目录下的conda.exe,然后双击,就会出

    2024年01月22日
    浏览(47)
  • 【深度学习】【Opencv】【GPU】python/C++调用onnx模型【基础】

    提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 OpenCV是一个基于BSD许可发行的跨平台计算机视觉和机器学习软件库(开源),可以运行在Linux、Windows、Android和Mac OS操作系统上。可以将pytorch中训练好的模型使用ONNX导出,再使用opencv中的dnn模块直接进行

    2024年02月04日
    浏览(44)
  • 【深度学习】【Opencv】【CPU】Python/C++调用onnx模型【基础】

    提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 OpenCV是一个基于BSD许可发行的跨平台计算机视觉和机器学习软件库(开源),可以运行在Linux、Windows、Android和Mac OS操作系统上。可以将pytorch中训练好的模型使用ONNX导出,再使用opencv中的dnn模块直接进行

    2024年02月04日
    浏览(36)
  • paddle模型定义

    2024年02月08日
    浏览(47)
  • [paddle]paddleseg中eiseg加载模型参数的模型下载地址

    以下内容为2D图片标注模型下载及EISeg2D图片标注流程,具体如下: 在使用EISeg前,请先下载模型参数。EISeg开放了在COCO+LVIS、大规模人像数据、mapping_challenge,Chest X-Ray,MRSpineSeg,LiTS及百度自建质检数据集上训练的7个垂类方向模型,满足通用场景、人像场景、建筑物标注,医

    2024年02月07日
    浏览(32)
  • 自然语言处理 Paddle NLP - 预训练语言模型及应用

    基础 自然语言处理(NLP) 自然语言处理PaddleNLP-词向量应用展示 自然语言处理(NLP)-前预训练时代的自监督学习 自然语言处理PaddleNLP-预训练语言模型及应用 自然语言处理PaddleNLP-文本语义相似度计算(ERNIE-Gram) 自然语言处理PaddleNLP-词法分析技术及其应用 自然语言处理Pa

    2024年02月08日
    浏览(64)
  • Paddle笔记:PaddleOCR文字识别,简单实用,默认训练模型识别度不错

            PaddleOCR是百度深度学习框架PaddlePaddle开源的OCR项目,旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。PaddleOCR包含丰富的文本检测、文本识别以及端到端算法。         你可能用到的网址: Paddle官网:飞桨PaddlePaddle-源于

    2024年02月16日
    浏览(40)
  • 自然语言处理 Paddle NLP - 基于预训练模型完成实体关系抽取

    基础 自然语言处理(NLP) 自然语言处理PaddleNLP-词向量应用展示 自然语言处理(NLP)-前预训练时代的自监督学习 自然语言处理PaddleNLP-预训练语言模型及应用 自然语言处理PaddleNLP-文本语义相似度计算(ERNIE-Gram) 自然语言处理PaddleNLP-词法分析技术及其应用 自然语言处理Pa

    2024年02月10日
    浏览(36)
  • 人工智能学习框架—飞桨Paddle人工智能

    机器学习的三要素:模型、学习策略、优化算法。 当我们用机器学习来解决一些模式识别任务时,一般的流程包含以下几个步骤: 浅层学习 (Shallow Learning):不涉及特征学习,其特征主要靠人工经验或特征转换方法来抽取。 底层特征VS高层语义:人们对文本、图像的理解无法

    2024年02月12日
    浏览(37)
  • 解决paddle.fluid与python版本不匹配的问题:AttributeError: module ‘paddle.fluid‘ has no attribute ‘xxx‘

    今天跑paddle里的代码,发现paddle里可以跑,但放到pycharm下面跑不了了,捣鼓了一下午,原来是包版本的问题,希望能对读者有一点点用。 我原本所用的环境是python3.11,它的paddlepaddle包的版本是2.5,然后我去paddle官网上看我要用的代码的配置环境(我在官网上可以跑通),打

    2024年02月03日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包