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",
]
相关推荐
菜到离谱但坚持11 分钟前
【小白零基础】RAG+LangChain 搭建私有知识库问答系统(完整可运行代码+超详细教程+避坑指南)
python·langchain·rag
ss27317 分钟前
【入门OJ题解】分苹果问题(Python/Java/C 实现)
java·c语言·python
IsJunJianXin20 分钟前
谷歌搜索cookie NID逆向生成
开发语言·python·google搜索·sgss·nid-cookie·算法生成nid·google-cookie
暗夜猎手-大魔王22 分钟前
转载--Hermes Agent 11 | 智能审批与平台化安全:当 AI 来守护 AI
人工智能·python·安全
AIFQuant22 分钟前
量化私募回测系统:高质量股票/外汇历史数据 API 选型与接入
python·websocket·金融·ai量化
Mr.Daozhi26 分钟前
Playwright实战:抓取Meta Ad Library动态页面的三级降级策略
爬虫·python·自动化·playwright·meta广告
财经资讯数据_灵砚智能38 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月5日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
爱吃提升1 小时前
Python 多线程(threading)和 多进程(multiprocessing)核心区别
python
MageGojo1 小时前
基于 API Zero 平台集成 TTS 语音合成服务的技术实践
python·语音合成·tts·restful api·api集成
YsyaaabB1 小时前
LangChain作业二---多语言翻译Prompt
开发语言·python·langchain