[飞桨paddle]1. conda安装paddle环境.模型转换,pytorch->paddlepaddle

news/2024/4/27 0:12:08/文章来源:https://blog.csdn.net/Eric_Sober/article/details/129152664

“一生费城七六人”

  • 1. conda装paddle环境
    • 1.1 验证是否装好
  • 2. x2paddle
      • 2.1 介绍
      • 2.2 安装
  • 3 模型转换
    • 3.1 pt -> onnx
    • 3.2 onnx > .pdparams
      • 3.2.1 会出现的错误情况
          • 3-1. 第一种情况
          • 3-2. 第二种情况
  • 4. 查看结果

  • 问题阐述:将yoloV5项目移至paddle框架下执行时,会发现飞桨的框架不支持pytorch框架(即yoloV5),具体表现为paddle框架需要的模型后缀为.pdparams,而原模型为.pt格式。
  • 做法是,.pt --> .onnx --> .pdparams
  • 这里是已经在yoloV5下训练好的模型,转成.pdparams即可。例训练好的模型为:plate_detect.pt

1. conda装paddle环境

conda create -n paddle_env python=3.9
conda activate paddle_env
# conda设置为清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
# 安装paddlepaddle的gpu版本及cudakittool(gpu版本可以使用cpu)
# 但是这里不是最新版本的,最新版本上官网
conda install paddlepaddle-gpu==2.0.2 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/# 已有numpy,此处安装PIL或matplotlib或OpenCV用于图片显示
pip install nibabel
conda install opencv# 安装anaconda基本库,速度有慢,报错信息,只要不停止,一直等待即可
# 这一步时间较久
conda install anaconda
# 安装paddleseg
pip install paddleseg -i https://mirror.baidu.com/pypi/simple

安装过程如下,成功截图见下下张
在这里插入图片描述在这里插入图片描述

1.1 验证是否装好

  1. 输入python进入环境
python
  1. 导入paddle
import paddle
  1. 键入如下代码,查看是否成功
paddle.utils.run_check()

出现successfully,即为成功

2. x2paddle

2.1 介绍

X2Paddle 是飞桨生态下的模型转换工具, 目前已经支持 Caffe/TensorFlow/ONNX/PyTorch 四大框架的预测模型的转换,PyTorch 训练项目的转换,涵盖了目前市面主流深度学习框架,一条命令即可完成转换。

2.2 安装

pip install x2paddle

3 模型转换

  • 以下操作均在yolov5环境下执行。
    本例选用yoloV5训练好的.pt模型,转换为paddle框架能使用的.pdparams模型。

3.1 pt -> onnx

  1. 安装onnx, onnxruntime, paddle, x2paddle
pip install onnx -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install onnxruntime -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install x2paddle -i https://mirror.baidu.com/pypi/simple
  1. 命令行操作如下:
python ./export.py --weights plate_detect.pt --img 640 --batch 1

参数说明:

data: 数据集yaml文件路径
weights:自己的模型路径
imgsz:图片尺寸
batch-size:默认为1,不用更改
device:运行设备,若cpu,则直接写cpu,若gpu,则写0或0,1,2,3
half: 半精度,建议改为False,否则转换inference模型时会出错
dynamic:建议改为False
simplify:建议为True
opset:onnx协议,建议改为11或12
include:列表形式,储存你需要转换的模型后缀,支持torchscript, onnx, engine, coreml, saved_model, pb, tflite, tfjs
  1. 出现如下界面表示成功。
    在这里插入图片描述

ONNX export success. saved as …。现在就已经有了onnx模型。默认和原模型同名称,同路径。

3.2 onnx > .pdparams

可以从三种框架下转成paddle下需要的模型,一句话搞定,具体如下:

x2paddle --framework=onnx --model=onnx_model.onnx --save_dir=pd_model   #从onnx时
x2paddle --framework=tensorflow --model=tf_model.pb --save_dir=pd_model  #从tensorflow时
x2paddle --framework=caffe --prototxt=deploy.prototxt --weight=deploy.caffemodel --save_dir=pd_model  #从caffe时

此处是从onnx转,运行第一句即可。其中的命令参数如下:

–freamework	          需要转换的模型类型(即tensorflow、onnx、caffe)
–model	              需要转换的模型路径
–save_dir	          保存转换后的模型路径
–prototxt	          caffe模型的proto文件路径
–weight	              caffe模型的参数文件路径

执行如下语句开始导出:(paddle_inference是我自己建的文件夹)

x2paddle --framework=onnx --model=plate_detect.onnx --save_dir=paddle_inference

如下界面导出成功
在这里插入图片描述

3.2.1 会出现的错误情况

3-1. 第一种情况
  • onnx的版本最新 和 paddlepaddle最新版本 的依赖protobuf有冲突。问题如下:
  • 在这里插入图片描述
  • 大体就是组件冲突,翻译最下边两行就是问题原因,方法简单,降级onnx版本适应paddlepaddle的依赖版本就行。这里我paddlepaddle==2.4.2,将onnx降级为1.11.0即可。运行如下代码:
pip install onnx==1.10.0 -i https://mirror.baidu.com/pypi/simple
3-2. 第二种情况

The opset version of the onnx model is 12, only model with opset_version 10/11 is supported.

  • 这应该是yolov5自带的export.py导出的onnx模型是12版本导致的。
    这个时候需要打开yolov5下的export.py文件,找到参数设置里的如下句子:
    parser.add_argument('--opset', type=int, default=12, help='ONNX: opset version')
    它说12有问题,就换11呗,11还不行就一直下降,我这儿降低到9才好,执行如下语句(搜索一下,应该在97行)
parser.add_argument('--opset', type=int, default=11, help='ONNX: opset version')

然后删除那个onnx模型重新执行python export.py即可。

4. 查看结果

上边导出的paddle_inference文件夹下有如下文件和文件夹。
在这里插入图片描述

  • 下面进行一一说明
  1. inference_model文件夹: 就是我们需要的推理模型。
  2. x2paddle_code.py: 转换后paddlepaddle构建的模型文件。
  3. model.pdparams: 模型文件的权重(不是推理模型权重)

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

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

相关文章

中央一号文件首提“即时零售”,县域掀起消费业态新风潮

经过几年的探索,即时零售已经逐步走向成熟,并开始向三四线城市以及乡镇城市渗透。 过去一年,京东、美团、阿里争先布局即时零售市场,完善即时配送网络、培养用户消费习惯,即时零售订单迎来了骤增。2022年下半年&#…

C/C++每日一练(20230222)

目录 1. 部分复制字符串(★) 2. 按字典顺序排列问题(★★) 3. 地下城游戏(★★★) 附录 动态规划 1. 部分复制字符串 将字符串2小写字母复制到字符串1:编写程序,输入字符串s2,将其中所有小写字母复制到字符串数组strl中。例如:aal1bb22cc33de4AA55…

Java实现多线程有几种方式(满分回答)

目录JDK8 创建的线程的两种方式orcle文档解释方式一:继承Thread类方式二:实现Runnable接口同时用两种的情况其他间接创建方式Callable接口线程池JDK8 创建的线程的两种方式 orcle文档解释 orcle文档:https://docs.oracle.com/javase/8/docs…

九龙证券|银行资本管理办法迎“大修” 信用风险权重法调整优化

1年期AAA中债商业银行同业存单到期收益率 日前迎来“大修”的商业银行本钱办理方法,在债券商场激起“涟漪”——债券商场一改此前平静态势,连续两日跌落。 2月21日,10年期国债收益率较上星期五上行2.9个基点,至2.919%&#xff1b…

Redis学习【10】之Redis主从集群(1)

文章目录一 Redis主从集群搭建1 伪集群搭建与配置1.1.1 分级管理1.1.2 容灾冷处理1.2 主从复制原理1.2.1 主从复制过程1.2.2 数据同步演变过程1.3 哨兵机制实现1.3.1 哨兵机制简介1.3.2 Redis 高可用集群搭建1.3.3 Redis 高可用集群的启动1.3.4 Sentinel 优化配置1.4 哨兵机制原…

Spring中自定义Session管理,Spring Session源码解析

系列文章:Spring Boot学习大纲,可以留言自己想了解的技术点 目录 系列文章:Spring Boot学习大纲,可以留言自己想了解的技术点 1、session是什么? 1>session在哪里? 2>服务器怎么知道每次说话的是…

H5盲盒抽奖系统源码

盲盒抽奖系统4.0,带推广二维码防洪炮灰功能和教程。 支持微信无限回调登录 标价就是源码价格,vuetp5框架编写,H5网页,前后端分离 此源码为正规开发,正版产品已申请软著。 开源无加密无授权,可以二开使用…

霍尔元件的应用

霍尔传感器有3个pin,分别是 正极 负极和输出pin。 输出pin接电阻和发光二极管。电阻起限流作用。 电源接5.5v直流电。当拿一个磁铁的N极靠近霍尔元件时,二极管越来越亮。当拿S极靠近霍尔元件时,二极管越来越暗。 N极磁场强度定义为正的磁场强…

算法刷题日志——移除元素,双指针

文章目录删除有序数组中的重复项[删除有序数组中的重复项 II](https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/)移除元素[283. 移动零](https://leetcode.cn/problems/move-zeroes/description/)[844. 比较含退格的字符串](https://leetcode.cn/problem…

Docker之路(3.docker底层原理、和虚拟机VM对比区别)

1.docker run 流程图 2. docker 底层原理 2.1 docker 是怎么工作的? Docker 是一个 Client-Server 结构的系统,Docker的守护进程运行在主机上, 通过Socket从客户端访问! DockerServer接收到Docker-Client的指令,就会执…

【Java】Spring的创建和使用

Spring的创建和使用 Spring就是一个包含众多工具方法的IOC容器。既然是容器,那么就具备两个最主要的功能: 将对象存储到容器中从容器中将对象取出来 在Java语言当中对象也叫作Bean。 1. 创建Spring项目 创建一个普通maven项目添加Spring框架支持(spri…

Spring Boot自动装配的原理

Spring Boot自动装配的原理自动装配的实现EnableAutoConfigurationAutoConfigurationImportSelectorSpring Boot中的自动装配,它是Starter的基础,也是Spring Boot的核心。那么什么叫自动装配呢?或者说什么叫装配呢? 简单来说&…

金三银四丨黑蛋老师带你剖析-安全开发岗

作者丨黑蛋在之前呢,我们聊了二进制这块的病毒岗位,漏洞岗位,逆向岗位以及CTF这块的岗位。今天我们就来聊一聊安全开发类的工作岗位。首先网络安全方向中安全开发岗位都有哪些,安全开发主要指安全研发工程师或安全开发工程师&…

电子技术——负反馈特性

电子技术——负反馈特性 本节我们进一步深入介绍负反馈特性。 增益脱敏性 假设 β\betaβ 是一个常数。考虑下面的微分方程: dAfdA(1Aβ)2dA_f \frac{dA}{(1 A\beta)^2} dAf​(1Aβ)2dA​ 将上式除以 AfA1AβA_f \frac{A}{1A\beta}Af​1AβA​ 得到&#xff1…

php+vue加油站会员服务系统 java微信小程序

目 录 1绪论 1 1.1项目研究的背景 1 1.2开发意义 1 1.3项目研究现状及内容 5 1.4论文结构 5 2开发技术介绍 7 2.5微信小程序技术 8 3系统分析 9 3.1可行性分析 9 3.1.1技术可行性 9 3.1.2经济可行性 9 3.1.3操作可行性 10 3.2网站性能需求分析 10 3.3网站功能分析 10 3.4系统…

秒懂算法 | 子集树模型——0-1背包问题的回溯算法及动态规划改进

给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为W。一种物品要么全部装入背包,要么全部不装入背包,不允许部分装入。装入背包的物品的总重量不超过背包的容量。问应如何选择装入背包的物品,使得装入背包中的物品总价值最大? 01、问题分析——解空间及搜索…

JAVA并发集合之ConcurrentHashMap

ConcurrentHashMap是一个支持高并发更新与查询的哈希表(基于HashMap)。Hashmap在多线程并发的情况下,是线程不安全的,容易出现死循环、死锁等问题,JDK8后不会出现死锁问题,但依然存在多线程的系列问题,如:数…

关于虚拟数字人你想知道的都在这里

2022年底,微软旗下的人工智能实验室Open AI发布的对话式大型语言模型ChatGPT聊天机器人一夜蹿红,5天用户量超百万,在各大中外媒体平台掀起了一阵热潮。也带火了人工智能相关产业,AI虚拟数字人就是其中之一,一个随着元宇…

【电商】红冲与单价调整

产品及系统的规划与设计过程中始终会考虑实际生产环境中的异常场景,这样会增加系统复杂度,虽然有时可以通过简化流程来降低出现异常的概率,但很多时候都是无法避开的;本篇就简单梳理下红冲单与价格调整单方面的内容,希…

Java ”框架 = 注解 + 反射 + 设计模式“ 之 注解详解

Java ”框架 注解 反射 设计模式“ 之 注解详解 每博一文案 刹那间我真想令时光停住,好让我回顾自己,回顾失去的年华,缅怀哪个穿一身短小的连衣裙 和瘦窄的短衫的小女孩。让我追悔少年时代,我心灵的愚钝无知,它轻易…