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",
]
相关推荐
量化炼金 (CodeAlchemy)1 分钟前
【量化研究】美股历史数据获取:Yahoo Finance 转 Zorro 回测格式
python·量化研究·量化交易
小嘉丶学长15 分钟前
Day13 · 列表与元组
linux·运维·服务器·开发语言·python
小小张说故事26 分钟前
Python 的 int 为什么不会溢出?拆开 PyLongObject 和它背后那串变长数组
python
威哥爱编程1 小时前
Python 智能体开发实战 03:聊十轮就“失忆”,账单还翻倍?管好上下文,Token 立省一半
python·agent
情 九1 小时前
MCP 开发环境搭建:Mac 与 Windows 跑通 Python 服务和 stdio 客户端
windows·python·macos·mcp
SEO_juper1 小时前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash
日日大王学编程1 小时前
LangGraph 基本用法详解:从入门到实战
python·语言模型·langchain
威哥爱编程1 小时前
Python 智能体开发实战 04:模型答得挺漂亮,程序却读不懂?让回答直接变成能入库的 JSON
python·agent
全栈陈序员1 小时前
【Python】基础语法入门(三十)—— Web 开发入门:用 Flask 搭建第一个网站
前端·python·flask
全栈陈序员1 小时前
【Python】基础语法入门(三十三)—— 日志系统详解:用 logging 记录程序运行
java·开发语言·python