【飞桨EasyDL】飞桨EasyDL发布的模型转换onnx(附工程代码)

一个愿意伫立在巨人肩膀上的农民......

 一、paddle转onnx转rknn环境搭建

        paddle转onnx和onnx转rknn两个环境可以分开搭建,也可以搭建在一起。这里选择分开搭建,先搭建paddle转onnx。

1.1、创建环境

        选择python3.8.13包进行创建环境

conda create --name paddle2rknn libprotobuf python==3.10

1.2、进入环境

        命令如下:

conda activate paddle2rknn

1.3、RKNN-Toolkit2工具安装

        RKNN-Toolkit2是为用户提供在 PC、Rockchip NPU 平台上进行模型转换、推理和性能评估的开发套件,RKNN-Toolkit2适用于RK3566、RK3568、RK3588/RK3588S、RV1103、RV1106等型号的芯片。RKNN-Toolkit2的适配文件可以从下方链接获取:

https://download.csdn.net/download/weixin_41809117/88879019?spm=1001.2014.3001.5503icon-default.png?t=N7T8https://download.csdn.net/download/weixin_41809117/88879019?spm=1001.2014.3001.5503

        下载解压后这里RKNN-Toolkit2的根目录为./rknn-toolkit2/packages/。目前提供两种方式安装RKNN-Toolkit2:一是通过Python包安装与管理工具pip进行安装;二是运行带完整RKNN-Toolkit2工具包的docker镜像。本文采用第一种方式。

        切换到RKNN-Toolkit2根目录:

cd /home/ub/下载/rknn-toolkit2/rknn-toolkit2/packages/

        安装依赖,因为我们环境的python版本是3.10.0,所以这里执行:

pip install -r requirements_cp310-1.6.0.txt

        安装RKNN-Toolkit2:

pip install rknn_toolkit2-1.6.0+81f21f4d-cp310-cp310-linux_x86_64.whl

1.4、paddle2onnx工具安装

        查看paddle2onnx可安装版本:

pip index versions paddle2onnx

        默认安装的就是最新版本,这里指定1.0.8版本,否则会因为onnx版本版本太高,与RKNN-Toolkit2不兼容:

pip install paddle2onnx==1.0.8

1.5、解决相关依赖问题

        到此,paddle转onnx转rknn环境基本搭建完成,但是还要解决一下包依赖的问题。

        安装pip依赖查看工具:

pip install pipdeptree

        查看依赖关系:

pipdeptree -p paddle2onnx

        根据终端打印的内容进行包的安装和版本更换。

pip install /*包名*/==/*版本号*/

二、模型转换

        Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括 TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。Paddle2ONNX包可通过如下连接下载:

https://download.csdn.net/download/weixin_41809117/88879464?spm=1001.2014.3001.5503icon-default.png?t=N7T8https://download.csdn.net/download/weixin_41809117/88879464?spm=1001.2014.3001.5503

2.1、获取PaddlePaddle部署模型

        Paddle2ONNX 在导出模型时,需要传入部署模型格式,包括两个文件

        a).model_name.pdmodel: 表示模型结构

        b).model_name.pdiparams: 表示模型参数 [注意] 这里需要注意,两个文件其中参数文件后辍为 .pdiparams,如你的参数文件后辍是 .pdparams,那说明你的参数是训练过程中保存的,当前还不是部署模型格式。 部署模型的导出可以参照各个模型套件的导出模型文档。

2.2、命令行模型转换

        指令paddle2onnx相关参数如下表:

参数参数说明
--model_dir配置包含 Paddle 模型的目录路径
--model_filename[可选] 配置位于 --model_dir 下存储网络结构的文件名
--params_filename[可选] 配置位于 --model_dir 下存储模型参数的文件名称
--save_file指定转换后的模型保存目录路径
--opset_version[可选] 配置转换为 ONNX 的 OpSet 版本,目前支持 7~16 等多个版本,默认为 9
--enable_dev_version[可选] 是否使用新版本 Paddle2ONNX(推荐使用),默认为 True
--enable_onnx_checker[可选] 配置是否检查导出为 ONNX 模型的正确性, 建议打开此开关, 默认为 False
--enable_auto_update_opset[可选] 是否开启 opset version 自动升级功能,当低版本 opset 无法转换时,自动选择更高版本的 opset进行转换, 默认为 True
--deploy_backend[可选] 量化模型部署的推理引擎,支持 onnxruntime、tensorrt 或 others,当选择 others 时,所有的量化信息存储于 max_range.txt 文件中,默认为 onnxruntime
--save_calibration_file[可选] TensorRT 8.X版本部署量化模型需要读取的 cache 文件的保存路径,默认为 calibration.cache
--version[可选] 查看 paddle2onnx 版本
--external_filename[可选] 当导出的 ONNX 模型大于 2G 时,需要设置 external data 的存储路径,推荐设置为:external_data
--export_fp16_model[可选] 是否将导出的 ONNX 的模型转换为 FP16 格式,并用 ONNXRuntime-GPU 加速推理,默认为 False
--custom_ops

[可选] 将 Paddle OP 导出为 ONNX 的 Custom OP。

例如:--custom_ops '{"paddle_op":"onnx_op"},默认为 {}

        模型转换指令:

paddle2onnx --model_dir models --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 12 --save_file saveonnx/model.onnx --enable_onnx_checker True

        转换结果在./Paddle2ONNX/saveonnx/model.onnx

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

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

相关文章

基于 LVGL 使用 SquareLine Studio 快速设计 UI 界面

目录 简介注册与软件获取工程配置设计 UI导出源码板级验证更多内容 简介 SquareLine Studio 是一款专业的 UI 设计软件,它与 LVGL(Light and Versatile Graphics Library,轻量级通用图形库)紧密集成。LVGL 是一个轻量化的、开源的…

Android和Linux的开发差异

最近开始投入Android的怀抱。说来惭愧,08年就听说这东西,当时也有同事投入去看,因为恶心Java,始终对这玩意无感,没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业,所以只能回过头又来学。 首先还是…

瑞吉外卖项目详细分析笔记及所有功能补充代码

目录 项目刨析简介技术栈项目介绍项目源码 一.架构搭建1.初始化项目结构2.数据库表结构设计3.项目基本配置信息添加公共字段的自动填充全局异常处理类返回结果封装的实体类 二.管理端业务开发1.员工管理相关业务1.1员工登录1.2员工退出1.3过滤器拦截1.4员工信息修改1.5员工信息…

Java基础八股

基础概念与常识 Java 语言有哪些特点? 简单易学;面向对象(封装,继承,多态);平台无关性( Java 虚拟机实现平台无关性);支持多线程( C 语言没有内置的多线程…

Python入门到精通(九)——Python数据可视化

Python数据可视化 一、JSON数据格式 1、定义 2、python数据和JSON数据转换 二、pyecharts 三、折线图 四、地图 五、动态柱状图 一、JSON数据格式 1、定义 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据JSON本质上是一个带有特定格式的字符…

Python学习系列 -初探标准库之logging库

系列文章目录 第一章 初始 Python 第二章 认识 Python 变量、类型、运算符 第三章 认识 条件分支、循环结构 第四章 认识 Python的五种数据结构 第五章 认识 Python 函数、模块 第六章 认识面向对象三大特性 第七章 初探标准库之os库 第八章 初探标准库之pathlib库 第九章 初探…

卷积神经网络介绍

卷积神经网络(Convolutional Neural Networks,CNN) 网络的组件:卷积层,池化层,激活层和全连接层。 CNN主要由以下层构造而成: 卷积层:Convolutional layer(CONV)池化层&#xff1a…

如何在windows系统部署Lychee网站,并结合内网穿透打造个人云图床

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站,可以看做是云存储的一部分,既可…

批量自动加好友,轻松拓展微信人脉圈子

在当今社交化的时代,拓展社交圈子已经成为许多人努力追求的目标。而微信作为中国人群中最主流的社交工具之一,更是成为人们拓展社交圈子的重要场所。在这样的背景下,有没有一种简单而高效的方式来扩大微信人脉圈子呢?答案是肯定的…

【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)

目录 1、锁的策略 1.1、乐观锁和悲观锁 1.2、轻量级锁和重量级锁 1.3、自旋锁和挂起等待锁 1.4、普通互斥锁和读写锁 1.5、公平锁和非公平锁 1.6、可重入锁和不可重入锁 2、synchronized 内部的升级与优化过程 2.1、锁的升级/膨胀 2.1.1、偏向锁阶段 2.1.2、轻量级锁…

RunnerGo UI自动化测试脚本如何配置

RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块,覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selenium浏览器自动化方案构建,内嵌高度可复用的测试脚本,测试团队无需复杂的代码编写即可开展低代码的自动化…

第十四天-网络爬虫基础

1.什么是爬虫 1.爬虫(又被称为网页蜘蛛,网络机器人),是按照一定规则,自动的抓取万维网中的程序或者脚本,是搜索引擎的重要组成;比如:百度、 2.爬虫应用:1.搜索引擎&…