PaddlePaddle PP-YOLOE 模型中心使用指南:下载、训练、推理与部署全流程
PaddlePaddle PP-YOLOE 模型中心使用指南:下载、训练、推理与部署全流程
本文基于 PaddlePaddle 官方模型中心(modelcenter)中 PP-YOLOE 目标检测模型的文档与配套代码(下载说明、Benchmark、FastDeploy 部署说明、使用教程)整理而成,并补充了仓库内 APP 目录下推理应用的源码级实现细节。你将掌握 PP-YOLOE 系列模型的模型库构成与权重下载方式、训练与导出的完整命令、Paddle Inference / TensorRT / FastDeploy 三种部署路径,以及模型中心内基于 Gradio 的本地推理应用的运行原理,可直接在实战中复现或按需改造。
PP-YOLOE 是百度飞桨 PaddlePaddle 团队推出的单阶段 Anchor-free 目标检测模型,基于 PP-YOLOv2 演进而来。其技术报告为《PP-YOLOE: An evolved version of YOLO》(arXiv:2203.16250),在 COCO 数据集上具备优异的精度-速度权衡,同时避免使用 Deformable Convolution、Matrix NMS 等特殊算子,从而可以轻松部署在多种多样的硬件上。
1. 模型库构成与下载
下载说明给出了官方维护的 4 个规格权重及其骨干网络,全部基于 COCO 数据集训练 300 epoch:
| 模型 | 骨干网络 | 模型下载 | 配置文件 |
|---|---|---|---|
| PP-YOLOE-s | cspresnet-s | model | config |
| PP-YOLOE-m | cspresnet-m | model | config |
| PP-YOLOE-l | cspresnet-l | model | config |
| PP-YOLOE-x | cspresnet-x | model | config |
s / m / l / x 四个规格通过 depth multiplier 和 width multiplier 配置缩放模型容量,训练与推理命令中以配置文件区分。模型元信息可在 info.yaml 中查看:来源为 PaddleDetection,任务为计算机视觉(Computer Vision)下的目标检测(Object Detection),许可协议为 Apache 2.0,训练数据集包括 COCO train2017 / val2017 / test-dev2017 与 Pascal VOC。
2. 模型精度与速度 Benchmark
Benchmark 文档记录了四个规格在 COCO 上的精度(Box AP)与 V100 单卡、batch size = 1 的推理速度:
| 模型 | Epoch | GPU 数 | 每 GPU 图片数 | 骨干网络 | 输入尺寸 | Box AP(val 0.5:0.95) | Box AP(test 0.5:0.95) | Params(M) | FLOPs(G) | V100 FP32(FPS) | V100 TensorRT FP16(FPS) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| PP-YOLOE-s | 300 | 8 | 32 | cspresnet-s | 640 | 43.0 | 43.2 | 7.93 | 17.36 | 208.3 | 333.3 |
| PP-YOLOE-m | 300 | 8 | 28 | cspresnet-m | 640 | 49.0 | 49.1 | 23.43 | 49.91 | 123.4 | 208.3 |
| PP-YOLOE-l | 300 | 8 | 20 | cspresnet-l | 640 | 51.4 | 51.6 | 52.20 | 110.07 | 78.1 | 149.2 |
| PP-YOLOE-x | 300 | 8 | 16 | cspresnet-x | 640 | 52.3 | 52.4 | 98.42 | 206.59 | 45.0 | 95.2 |
使用注意事项(原文档原文要点):
- PP-YOLOE 使用 COCO train2017 作为训练集,val2017 和 test-dev2017 作为测试集;
- 训练采用 8 张 GPU 混合精度训练。若 GPU 卡数或 batch size 改变,需按公式
lr_new = lr_default * (batch_size_new * GPU_number_new) / (batch_size_default * GPU_number_default)线性调整学习率; - 推理速度测试环境为单卡 V100、batch size = 1,CUDA 10.2、CUDNN 7.6.5;TensorRT 推理速度测试使用 TensorRT 6.0.1.8;
- 若设置
--run_benchmark=True,需先安装依赖pip install pynvml psutil GPUtil。
3. 模型原理简介
根据 使用教程 第 4 节,PP-YOLOE 由以下方法组成:
- 可扩展的 backbone 和 neck(CSPResNet + CSPRepResStage);
- Task Alignment Learning(任务对齐学习,源自 arXiv:2108.07755),用于对齐分类与回归分支的预测;
- 带 DFL(Distribution Focal Loss,arXiv:2006.04388)和 VFL(Varifocal Loss,arXiv:2008.13367)的高效 Task-aligned head;
- SiLU(Swish) 激活函数(arXiv:1710.05941)。
正是由于避免使用 Deformable Convolution 与 Matrix NMS 等特殊算子,PP-YOLOE 才能兼容 TensorRT、FastDeploy 及各类 AI 加速硬件的常规算子实现。
4. 训练与模型导出(PaddleDetection 方式)
4.1 环境准备
在使用教程(notebook 形式)中,按以下步骤准备环境(默认运行在 AI Studio Jupyter 上;若运行在终端,去掉行首的 % 或 !):
# 克隆 PaddleDetection 仓库
mkdir -p ~/work
cd ~/work/
git clone https://github.com/PaddlePaddle/PaddleDetection.git
# 安装依赖
cd PaddleDetection
mkdir -p demo_input demo_output
pip install -r requirements.txt
数据集存放在 dataset/coco/ 目录下。
4.2 单卡 / 多卡训练
# 单卡训练(l 规格示例)
python tools/train.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml --eval --amp
# 多卡训练(8 卡示例)
python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml --eval --amp
注意:
- 需要边训练边评估时添加
--eval; - PP-YOLOE 支持混合精度训练,请添加
--amp; - 修改 GPU 卡数或 batch size 时,按第 2 节的公式同步调整学习率。
4.3 导出推理模型
使用 Paddle-TRT 部署时(TensorRT FP16),先参考 Paddle Inference 官方文档,下载安装与自身 CUDA、CUDNN、TensorRT 匹配的 wheel 包,然后导出:
python tools/export_model.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams trt=True
直接使用 PaddleInference 部署时,导出命令去掉 trt=True 即可:
python tools/export_model.py -c configs/ppyoloe/ppyoloe_crn_l_300e_coco.yml -o weights=https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams
5. 推理部署:Paddle Inference 与 TensorRT
5.1 TensorRT FP16 推理
# 下载测试图片
wget -P demo_input -N https://paddledet.bj.bcebos.com/modelcenter/images/General/000000014439.jpg
# TensorRT FP16 推理单张图片
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_crn_l_300e_coco --image_file=demo_input/000000014439.jpg --device=gpu --run_mode=trt_fp16 --output_dir=demo_output
5.2 Paddle Inference 推理
# 直接使用 PaddleInference 推理单张图片
CUDA_VISIBLE_DEVICES=0 python deploy/python/infer.py --model_dir=output_inference/ppyoloe_crn_l_300e_coco --image_file=demo_input/000000014439.jpg --device=gpu --run_mode=paddle --output_dir=demo_output
注意事项(原文档要点):
- TensorRT 会依据网络定义针对当前硬件平台执行优化,生成并序列化推理引擎,该引擎仅适用于当前软硬件平台;若平台不变,可设置
enable_tensorrt_engine参数use_static=True,序列化文件保存在output_inference目录下,下次推理时直接加载; - PaddleDetection release/2.4 及之后版本支持 NMS 调用 TensorRT,需要依赖 PaddlePaddle release/2.3 及之后版本。
6. 快速部署:FastDeploy 全场景方案
FastDeploy 部署说明 提供了更简单的云边端一体化部署方式,三步即可完成:安装预编译包 → 调用 API 写部署代码 → 推理部署。
1. 安装 FastDeploy 预编译包
pip install fastdeploy-gpu-python==0.0.0 -f https://www.paddlepaddle.org.cn/whl/fastdeploy_nightly_build.html
2. 运行部署示例
# 下载部署示例代码
git clone https://github.com/PaddlePaddle/FastDeploy.git
cd FastDeploy/examples/vision/detection/paddledetection/python/
# 下载 PP-YOLOE 模型文件和测试图片
wget https://bj.bcebos.com/paddlehub/fastdeploy/ppyoloe_crn_l_300e_coco.tgz
wget https://gitee.com/paddlepaddle/PaddleDetection/raw/release/2.4/demo/000000014439.jpg
tar xvf ppyoloe_crn_l_300e_coco.tgz
# CPU 推理
python infer_ppyoloe.py --model_dir ppyoloe_crn_l_300e_coco --image 000000014439.jpg --device cpu
# GPU 推理
python infer_ppyoloe.py --model_dir ppyoloe_crn_l_300e_coco --image 000000014439.jpg --device gpu
# GPU 上使用 TensorRT 推理(首次运行需序列化模型,有一定耗时,请耐心等待)
python infer_ppyoloe.py --model_dir ppyoloe_crn_l_300e_coco --image 000000014439.jpg --device gpu --use_trt True
FastDeploy 支持 X86 CPU、NVIDIA GPU、ARM CPU、XPU、NPU、IPU 等 10 类云边端硬件,通过一行代码即可切换推理后端和硬件。原文档仅展示 X86 CPU、NVIDIA GPU 推理,且默认已准备好 GPU 环境(如 CUDA >= 11.2 等)。
7. 模型中心的 Gradio 推理应用(源码级拆解)
本仓库 modelcenter/PP-YOLOE/APP 目录提供了一套可直接运行的 PP-YOLOE 推理应用,其结构为:
APP/
├── app.py # Gradio 前端入口
├── app.yml # 应用部署元信息(Gradio SDK 配置)
├── requirements.txt # 运行依赖
├── configs/
│ └── PP-YOLOE.yml # 推理配置:预处理、标签、模型路径等
└── src/
├── detection.py # 检测器封装:Paddle Inference 推理主体
├── download.py # 权重按需下载与缓存
├── preprocess.py # 预处理算子:Resize / NormalizeImage / Permute 等
└── visualize.py # 检测结果可视化绘制
7.1 推理配置解析
PP-YOLOE.yml 是推理核心配置,各字段含义如下:
| 字段 | 值 | 说明 |
|---|---|---|
mode |
paddle |
运行模式,可选 paddle / trt_int8 / trt_fp32 / trt_fp16 |
draw_threshold |
0.5 |
可视化绘制阈值,仅显示置信度高于该值的框 |
metric |
COCO |
评测指标 |
use_dynamic_shape |
false |
是否使用 TensorRT 动态输入 shape |
arch |
YOLO |
模型架构类型 |
min_subgraph_size |
3 |
TensorRT 引擎最小子图大小 |
param_path / model_path |
paddlecv://models/ppyoloe_crn_s_300e_coco/model.pdiparams / model.pdmodel |
权重与网络文件,paddlecv:// 前缀表示按需自动下载 |
Preprocess |
列表 | 预处理算子流水线,按顺序执行 |
预处理流水线(对应 preprocess.py 中的算子实现):
Resize:target_size=[640, 640]、keep_ratio=false、interp=2(cv2.INTER_LINEAR),将图像缩放到固定 640×640,同时更新im_shape与scale_factor;NormalizeImage:is_scale=true(先除以 255),再按mean=[0.485, 0.456, 0.406]、std=[0.229, 0.224, 0.225]做标准化;Permute:将 HWC 排列转置为 CHW,供 Paddle 模型输入。
label_list 为 COCO 80 类目标名称列表,与下载权重的训练标签一一对应。
7.2 推理主体:Detector 封装
detection.py 中的 Detector 类基于 Paddle Inference Python API(paddle.inference.Config / create_predictor)实现:
- 模型加载:读取配置中的
model_path/param_path(paddlecv://前缀由 download.py 解析为https://bj.bcebos.com/v1/paddle-model-ecology/paddlecv/真实下载地址),通过Config(infer_model, infer_params)构造推理配置; - 设备选择:
device为CPU时disable_gpu()并设置 CPU 线程数cpu_threads(默认 1);为GPU时enable_use_gpu(200, 0)并开启图优化switch_ir_optim(True); - TensorRT 支持:
run_mode为trt_int8/trt_fp32/trt_fp16时,通过enable_tensorrt_engine启用 TensorRT,并依据use_dynamic_shape设置动态 shape(输入image从 640×640 到 1280×1280,优化 shape 1024×1024); - 性能优化开关:
disable_glog_info()关闭预测日志、enable_memory_optim()开启共享内存、switch_use_feed_fetch_ops(False)关闭 feed/fetch OP(配合 zero_copy 输入); - 输入组装:
create_inputs堆叠im_shape、scale_factor、image三个输入张量; - 后处理:从输出句柄读取
boxes与boxes_num,按draw_threshold过滤低置信度框(np_boxes[:, 1] > draw_threshold且np_boxes[:, 0] > -1),最终返回{'bboxes': np_boxes.tolist()}与绘制后的图像。
7.3 权重按需下载机制
download.py 实现了模型的“首次运行时按需下载 + 本地缓存”机制:
- 缓存目录:权重缓存在
~/.cache/paddlecv/models,配置缓存在~/.cache/paddlecv/configs,字典缓存在~/.cache/paddlecv/dicts; paddlecv://协议:parse_url将paddlecv://替换为https://bj.bcebos.com/v1/paddle-model-ecology/paddlecv/;- 断点续传:下载先写入
_tmp临时文件,完成后shutil.move重命名为正式文件,防止中断导致文件损坏; - 完整性校验:对
pdparams类模型文件,通过请求头content-md5做 MD5 校验(_md5check_from_url); - 失败重试:
DOWNLOAD_RETRY_LIMIT = 3,超过重试上限抛出RuntimeError。
7.4 可视化绘制
visualize.py 中的 draw_det 使用 PIL 在图像上绘制检测框与标签:
- 通过位运算为每个类别生成稳定的 RGB 颜色(
get_color_map_list); - 线宽按图像尺寸自适应(
min(im.size) // 320); - 每个检测框左上角绘制
类别名 + 置信度的实心标签,如person 0.9821。
7.5 Gradio 前端与应用配置
app.py 使用 Gradio Blocks 构建交互界面,输入图片 → Detector('PP-YOLOE')(image) 推理 → 输出带框图像与 JSON 检测结果(含 Clear / Submit 按钮)。app.yml 声明应用元信息:SDK 为 Gradio 3.9.1、app_file: app.py、许可证 Apache-2.0、CPU 设备。requirements.txt 列出的运行依赖包括 gradio、opencv-python、paddlepaddle、PyYAML、shapely、scipy、Cython、numpy、pillow 等。安装依赖后执行 python app.py 即可在本机启动交互式目标检测演示。
8. 实战小结:从下载到部署的完整链路
综合本仓库 PP-YOLOE 模型中心各文档与 APP 源码,一条完整的落地链路为:
- 选型:根据精度/速度需求从模型库表中选择 s/m/l/x 规格(参考 Benchmark 表格权衡);
- 获取权重:直接从表格中下载
.pdparams权重,或使用paddlecv://协议在推理时自动下载并缓存; - 训练(可选):在 PaddleDetection 中按第 4 节命令训练并导出推理模型;
- 推理部署:按需选择 Paddle Inference(
--run_mode=paddle)、TensorRT(trt_fp16等)或 FastDeploy 三种路径; - 交互演示:使用模型中心 APP 的 Gradio 应用快速体验检测效果,并可直接参考其 PP-YOLOE.yml 配置与 detection.py 源码理解预处理、推理与后处理的完整实现,便于迁移到自己的项目中。
相关引用(PP-YOLOE 技术报告 BibTeX):
@article{xu2022pp,
title={PP-YOLOE: An evolved version of YOLO},
author={Xu, Shangliang and Wang, Xinxin and Lv, Wenyu and Chang, Qinyao and Cui, Cheng and Deng, Kaipeng and Wang, Guanzhong and Dang, Qingqing and Wei, Shengyu and Du, Yuning and others},
journal={arXiv preprint arXiv:2203.16250},
year={2022}
}