以下是踩坑过程,最后成功了,没有总结最小参数
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",
]