PaddleDetection转ONNX 填坑

以下是踩坑过程,最后成功了,没有总结最小参数

Git PaddleDetection 版本为最新2.9

官方导出教程==============================================

教程地址 https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.9/deploy/EXPORT_ONNX_MODEL.md

PP-YOLOE OP11 = py3.11 仅支持batch=1推理;模型导出需固定shape

导出推理模型

复制代码
python tools/export_model.py -c configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml --output_dir=output_inference -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_plus_crn_l_80e_coco.pdparams trt=True

安装paddle2onnx

复制代码
pip install paddle2onnx

转换成onnx格式

复制代码
paddle2onnx --model_dir output_inference/ppyoloe_plus_crn_l_80e_coco --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 11 --save_file ppyoloe_plus_crn_l_80e_coco.onnx

注意: ONNX模型目前只支持batch_size=1

=====================================================================================

UV 实际操作

删除环境

复制代码
Remove-Item -Recurse -Force .venv  

创建新环境

复制代码
uv venv --python 3.11

查看当前环境版本

复制代码
uv venv

强制锁定版本

复制代码
uv python pin 3.11

强制重建环境

复制代码
uv venv --clear

确认版本

复制代码
uv run python --version

添加依赖

复制代码
uv add requests

uv add paddle2onnx

卸载 paddlepaddle

复制代码
uv pip uninstall paddlepaddle paddlepaddle-gpu

强制清理缓存

复制代码
uv cache clean

同时锁定 paddlepaddle 和 protobuf,不给 uv 自动升级的机会

复制代码
uv pip install "paddlepaddle==2.6.2" "protobuf==3.20.2" -i https://www.paddlepaddle.org.cn/packages/stable/cpu/

以下是常规版本,当前使用上面的版本
安装 2.6.2 稳定版 (根据你的 CUDA 环境选择)
# CPU 版本:

uv pip install paddlepaddle==2.6.2 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/

GPU 版本 (CUDA 11.8):

uv pip install paddlepaddle-gpu==2.6.2 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/

终极验证(必须解决版本跳变)输出还不是 2.6.2,请不要进行下一步

uv run python -c "import paddle; print(paddle.__version__)"

还是不行,修改配置文件

复制代码
# 将这一行:
"paddlepaddle>=3.3.1",

# 修改为:
"paddlepaddle==2.6.2",

根据配置文件重构

复制代码
uv sync

导出静态模型

web数据模型

powershell 复制代码
uv run  tools/export_model.py `
   -c configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml `
   -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_plus_crn_l_80e_coco.pdparams `
   TestReader.inputs_def.image_shape=[3,640,640] `
   --output_dir ./inference_model

本地数据模型,CPU版本

powershell 复制代码
uv run  tools/export_model.py `
   -c configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml `
   -o weights=down_models/ppyoloe_plus_crn_l_80e_coco.pdparams `
   TestReader.inputs_def.image_shape=[3,640,640] `
   use_gpu=false `
   --output_dir ./inference_model

本地数据模型,GPU版本

powershell 复制代码
uv run  tools/export_model.py `
    -c configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml `
    -o weights=down_models/ppyoloe_plus_crn_l_80e_coco.pdparams `
    TestReader.inputs_def.image_shape=[3,640,640]  `
    --output_dir ./inference_model

降级难题

paddlepaddle==2.6.2 降级后 paddle2onnx 反而太新了,所以降级到 2.0以内

修改该配置文件

复制代码
"paddle2onnx>=2.1.0",
 更改为
"paddle2onnx<2.0.0",

根据配置文件重构

复制代码
uv sync

转换ONNX模型 终于成功

powershell 复制代码
uv run paddle2onnx `
    --model_dir ./inference_model/ppyoloe_plus_crn_l_80e_coco `
    --model_filename model.pdmodel `
    --params_filename model.pdiparams `
    --save_file ./inference_model/ppyoloe_plus_crn_l_80e_coco/ppyoloe_plus_crn_l_80e_coco.onnx `
    --opset_version 11
powershell 复制代码
# 这样记录是完全没问题的
uv pip list | findstr paddle `
    paddle

pyproject.toml 配置文件

toml 复制代码
[project]
name = "paddledetection002"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
    "cython>=3.2.4",
    "imgaug>=0.4.0",
    "lapx>=0.9.4",
    "motmetrics>=1.4.0",
    "numba>=0.65.1",
    "numpy<2.0",
    "opencv-python<=4.6.0",
    "packaging>=26.2",
    "paddle2onnx<2.0.0",
    "paddledet>=2.5.0",
    "paddlepaddle==2.6.2",
    "pillow>=12.2.0",
    "pyclipper>=1.4.0",
    "pycocotools==2.0.8",
    "pyyaml>=6.0.3",
    "requests>=2.33.1",
    "scikit-learn>=1.8.0",
    "scipy>=1.17.1",
    "setuptools>=80",
    "shapely>=2.1.2",
    "sklearn==0.0",
    "terminaltables>=3.1.10",
    "tqdm>=4.67.3",
    "typeguard>=4.5.1",
    "visualdl>=2.2.0",
]
相关推荐
东莞市云毅网络有限公司5 小时前
AI 引用句逐条回指原文:让回答可回溯的校验实现
python·数据清洗·rag·企业知识库·文档解析
数字融合7 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0117 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
Marst Code9 小时前
上位机开发日记 · 第 2 篇 · 架构先行:六层分层与边界
python
李日华大战鸡红9 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
外收内放11 小时前
Python基础语法练习题(57-58)
开发语言·python
朝朝辞暮i12 小时前
VLA 系统学习第 3 课:从一次机器人示范,到真正送进神经网络的 Batch
人工智能·python·深度学习·神经网络·vla
小鹿的周先生12 小时前
第11章-Structured-Output
开发语言·人工智能·python
梦在远山后12 小时前
通过 WSS 让 Server 安全调用 Desktop 本地工具(下01):Ticket、人工确认、幂等与断线对账
python·langchain·agent
泡海椒13 小时前
JQuick-Excel 实战:FORMAT 管理日期与数字的 Excel 显示
开发语言·python·excel