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",
]
相关推荐
梅雅达编程笔记2 小时前
编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)
开发语言·人工智能·python·numpy·pandas
zhz52143 小时前
GIS项目中空间参考转换与MBTiles偏移:问题成因、解法与避坑
python·vue·gis
KaMeidebaby4 小时前
卡梅德生物技术快报|如何制备单克隆抗体:小众禽类靶点单抗制备实操流程:双载体抗原交叉筛选完整工艺记录
人工智能·python·深度学习·算法·机器学习
乱写代码4 小时前
Pydantic学习--BaseModel
python
fu15935745684 小时前
【边缘计算实战】P1:从零搭建边云任务卸载仿真实验台(Python 可复现)
数据库·python·边缘计算
蜡台5 小时前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
智能体与具身智能5 小时前
TVA 本质内涵与核心特征(系列)
人工智能·python·智能体视觉
云雾J视界6 小时前
SST:高频变压器设计实战:铁氧体 vs 纳米晶 vs 非晶,磁性材料怎么选
python·acdc·dab·sst
第一程序员6 小时前
Rust trait 入门:把 AI 客户端抽象成可替换接口
python·rust·github
Ulyanov6 小时前
Python实现6-DOF刚体仿真器(下)——环境扰动与控制闭环
开发语言·python·算法·系统仿真·雷达电子对抗·导引头