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",
]
相关推荐
伞伞悦读3 分钟前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
线上放牧人25 分钟前
Windows删除图标缓存
windows·python·pyqt
qq_5470261791 小时前
Python 变量和简单数据类型
python
智搜广告2 小时前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo
IpdataCloud3 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
2601_966949653 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng3 小时前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
Ivanqhz3 小时前
BM1688 双核架构
python·深度学习·神经网络·cnn·mlir
Java后端的Ai之路4 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝
西柚研究生1234564 小时前
论文分析17:YOLOv11_UAVNet:无人机航拍图像专用目标检测算法
人工智能·python·深度学习·算法·目标检测