PP-YOLOE 模型下载与部署指南:PaddlePaddle models 模型中心实战全解析
PP-YOLOE 模型下载与部署指南:PaddlePaddle models 模型中心实战全解析
本篇指南以 PaddlePaddle 官方 models 仓库 modelcenter/PP-YOLOE/download_en.md 为核心,系统梳理 PP-YOLOE(s/m/l/x)模型家族的下载方式、配置含义、精度基准与推理部署全流程,并结合仓库内 benchmark_en.md、fastdeploy_en.md、introduction_en.ipynb 及 APP 目录源码做源码级佐证。读者读完可掌握 PP-YOLOE 权重的获取途径、PaddleInference/TensorRT/FastDeploy 三种部署方式的完整命令,以及模型中心 App 的底层调用机制。
一、PP-YOLOE 模型家族概览(Model Zoo)
PP-YOLOE 是基于 PP-YOLOv2 演化而来的单阶段 Anchor-free 目标检测模型,其模型系列由 s/m/l/x 四个规格构成,通过宽度乘子(width multiplier)与深度乘子(depth multiplier) 配置不同的骨干网络规模。设计上刻意避免使用 Deformable Convolution、Matrix NMS 等特殊算子,因此对各类硬件部署友好(详见 introduction_en.ipynb 第 1 节与 info.yaml)。
模型中心提供的官方模型库如下表所示:
| 模型 | 骨干网络(Backbone) | 模型下载 | 配置文件 |
|---|---|---|---|
| PP-YOLOE-s | cspresnet-s | model | ppyoloe_crn_s_300e_coco.yml |
| PP-YOLOE-m | cspresnet-m | model | ppyoloe_crn_m_300e_coco.yml |
| PP-YOLOE-l | cspresnet-l | model | ppyoloe_crn_l_300e_coco.yml |
| PP-YOLOE-x | cspresnet-x | model | ppyoloe_crn_x_300e_coco.yml |
模型命名中 crn 即 CSPResNet 骨干,300e 表示在 COCO train2017 上训练 300 个 epoch,coco 表明数据集为 COCO。四个规格覆盖从边缘设备到高性能服务器的不同算力场景:s/m 面向实时性与轻量部署,l/x 面向精度优先场景。
二、模型权重下载详解
2.1 直接下载 .pdparams 权重
模型中心以 Paddle 训练权重格式 .pdparams 对外发布,可使用 wget/curl 直接拉取。例如下载 PP-YOLOE-l:
# 下载 PP-YOLOE-l 在 COCO 上训练 300 epoch 的权重
wget https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams
该权重文件可直接配合 PaddleDetection 的 tools/export_model.py 导出推理模型(详见第五节),也可作为迁移学习、微调(finetune)的预训练起点。
2.2 paddlecv:// 协议与自动缓存下载机制
模型中心 App 的推理配置通过 paddlecv:// 协议引用模型资源,例如 APP/configs/PP-YOLOE.yml 中的:
param_path: paddlecv://models/ppyoloe_crn_s_300e_coco/model.pdiparams
model_path: paddlecv://models/ppyoloe_crn_s_300e_coco/model.pdmodel
该协议由 APP/src/download.py 实现解析与下载:
parse_url()将paddlecv://前缀替换为实际的 BCE 存储前缀https://bj.bcebos.com/v1/paddle-model-ecology/paddlecv/;- 下载根目录为
~/.cache/paddlecv/models(WEIGHTS_HOME),通过map_path(url, root_dir, path_depth=2)将 URL 相对路径映射为本地缓存路径,实现"首次自动下载、之后直接命中缓存"; - 下载过程采用临时文件加
shutil.move的原子写入策略防止中断损坏,内置DOWNLOAD_RETRY_LIMIT = 3重试机制; - 对
.pdparams模型文件,还会从响应头读取content-md5做 MD5 校验(_md5check_from_url),确保下载文件完整无误。
这意味着开发者只要在配置中声明 paddlecv:// 路径,运行时即可自动获得模型,无需手工管理权重文件。
三、配置文件核心参数解读
3.1 模型中心推理配置(PP-YOLOE.yml)
APP/configs/PP-YOLOE.yml 是模型中心 App 使用的完整推理配置,关键字段如下:
| 字段 | 值 | 含义 |
|---|---|---|
mode |
paddle |
推理运行模式,可选 paddle/trt_fp32/trt_fp16/trt_int8 |
draw_threshold |
0.5 |
可视化与结果输出的置信度阈值 |
metric |
COCO |
评测指标类型(COCO mAP) |
use_dynamic_shape |
false |
是否启用 TensorRT 动态输入形状 |
arch |
YOLO |
网络架构类型 |
min_subgraph_size |
3 |
TensorRT 子图融合最小节点数 |
Preprocess |
Resize→NormalizeImage→Permute | 预处理流水线 |
预处理流水线三个算子依次执行(对应 APP/src/preprocess.py 的实现):
- Resize:
target_size: [640, 640],keep_ratio: false表示直接拉伸到 640×640(而非等比缩放),插值方式interp: 2(即cv2.INTER_LINEAR); - NormalizeImage:
is_scale: true(先除以 255),再按 COCO 数据集统计的mean = [0.485, 0.456, 0.406]、std = [0.229, 0.224, 0.225]做标准化; - Permute:将图像从 HWC 布局转置为 CHW 布局以匹配模型输入。
label_list 字段完整列出了 COCO 80 类目标(person、bicycle、car……toothbrush),推理结果将按此顺序映射类别名称。
3.2 配置在推理中的实际作用
APP/src/detection.py 中的 Detector 类读取该 YAML:
create_preprocess_ops()遍历Preprocess列表,按type字段动态实例化对应算子类并传入参数;- 若
mode命中trt_int8/trt_fp32/trt_fp16之一,则调用config.enable_tensorrt_engine()启用 TensorRT,min_subgraph_size与use_dynamic_shape(此时可设置 640~1280 的动态输入范围)分别控制子图融合与动态形状; - CPU 模式下
config.disable_gpu()并以cpu_threads设置线程数,GPU 模式下enable_use_gpu(200, 0)分配 200 MB 初始显存并开启 IR 图优化。
四、精度与速度基准(Benchmark)
模型中心 benchmark_en.md 给出了四个规格的官方基准数据(COCO val2017/test-dev2017):
| 模型 | Epoch | GPU 数 | images/GPU | 骨干 | 输入尺寸 | Box APval 0.5:0.95 | Box APtest 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 |
理解该基准表需要注意以下几点:
- 模型在 COCO train2017 上训练,并在 val2017 与 test-dev2017 上评估;
- 训练使用 8 张 GPU 的混合精度(mixed precision)训练。若调整 GPU 数量或单卡 batch size,学习率需按公式 lr_new = lr_default × (batch_size_new × GPU_number_new) / (batch_size_default × GPU_number_default) 线性缩放;
- 推理速度在单张 Tesla V100、batch size = 1 下测得,软件环境为 CUDA 10.2、CUDNN 7.6.5、TensorRT 6.0.1.8;
- 若复现时使用
--run_benchmark=True,需先安装pip install pynvml psutil GPUtil。
以 PP-YOLOE-l 为例:在 COCO test-dev2017 上取得 51.6 mAP 的同时,V100 上 FP32 推理达 78.1 FPS,开启 TensorRT FP16 后可进一步加速到 149.2 FPS,体现了"高精度 + 高吞吐"兼顾的特性(与 introduction_en.ipynb 第 2 节描述一致)。
五、从训练到导出:完整实战流程
5.1 环境准备
参考 introduction_en.ipynb 第 3 节,先克隆 PaddleDetection 并准备 COCO 格式数据集:
git clone https://github.com/PaddlePaddle/PaddleDetection.git
cd PaddleDetection
pip install -r requirements.txt
# 将 COCO 风格数据集放入 dataset/coco
5.2 训练(支持混合精度)
# 单卡训练,--eval 表示训练中评估,--amp 开启混合精度
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
5.3 导出推理模型
方式一:导出标准 PaddleInference 模型(适用于不支持 TensorRT 的硬件):
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
方式二:导出带 TensorRT 优化的模型(在 -o 中追加 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 trt=True
两种方式均直接从第二节的下载地址加载预训练权重,导出产物位于 output_inference/ppyoloe_crn_l_300e_coco 目录。
六、推理部署:PaddleInference 与 TensorRT
6.1 原生 PaddleInference 推理
# 先下载测试图片
wget -P demo_input -N https://paddledet.bj.bcebos.com/modelcenter/images/General/000000014439.jpg
# paddle 模式推理单张图片
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
6.2 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
两点实用提示(来自 introduction_en.ipynb 3.2.1 节的 Notes):
- TensorRT 首次运行会根据当前硬件平台生成并序列化推理引擎,该引擎仅适用于当前软硬件平台。若环境不变,可在
deploy/python/infer.py的enable_tensorrt_engine调用中设置use_static=True,将序列化引擎保存到output_inference目录,下次直接加载以跳过重建; - PaddleDetection release/2.4 及以后版本支持 NMS 调用 TensorRT 加速,需配合 PaddlePaddle release/2.3 及以上版本。
6.3 FastDeploy 三步式高性能部署
模型中心 fastdeploy_en.md 提供了基于 FastDeploy 的极简部署路径。FastDeploy 是面向云端、移动端与边缘端的一站式 AI 模型部署工具,支持 X86 CPU、NVIDIA GPU、ARM CPU、XPU、NPU、IPU 等多种硬件,可在不改动业务代码的情况下切换推理后端。
第一步:安装 FastDeploy SDK
pip install fastdeploy-gpu-python==0.0.0 -f https://www.paddlepaddle.org.cn/whl/fastdeploy_nightly_build.html
第二步:拉取部署示例并下载模型与测试图
git clone https://github.com/PaddlePaddle/FastDeploy.git
cd FastDeploy/examples/vision/detection/paddledetection/python/
# 下载 PP-YOLOE-l 部署模型(含 pdmodel/pdiparams/infer_cfg)与测试图片
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 / GPU / TensorRT 部署
# 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 部署要求 GPU 环境默认就绪(如 CUDA >= 11.2),CPU 与 GPU 两种推理展示均基于该示例完成。
七、模型中心 App:开箱即用的 Gradio 演示
模型中心还为 PP-YOLOE 提供了可直接运行的 Gradio 演示应用(APP 目录),适合快速验证模型效果:
- APP/app.py:基于
gr.Blocks构建交互界面,输入图像后调用Detector('PP-YOLOE'),输出检测可视化结果与{'bboxes': [...]}JSON; - APP/app.yml:应用元配置,指定
sdk: gradio、sdk_version: 3.9.1、app_file: app.py、device: cpu; - APP/src/detection.py:核心推理类,完成配置解析、模型自动下载、预处理、PaddleInference 推理与结果绘制,输出格式为 6 列 bbox(
[class_id, score, x1, y1, x2, y2]); - APP/requirements.txt:依赖清单,包括
gradio、opencv-python、paddlepaddle、PyYAML、shapely、scipy、numpy、pillow等。
运行 python app.py 即可在本地浏览器中体验 PP-YOLOE 目标检测效果。
八、技术原理与引用
PP-YOLOE 的整体架构由以下技术组件构成(详见 introduction_en.ipynb 第 4 节):
- 可扩展的骨干与颈部网络(Scalable backbone and neck):通过 s/m/l/x 深度、宽度乘子实现算力-精度平衡;
- Task Alignment Learning:对齐分类与定位任务的学习目标;
- 高效 Task-aligned 检测头:融合 DFL(Distribution Focal Loss)与 VFL(Varifocal Loss);
- SiLU(Swish)激活函数:替换传统激活提升表征能力。
技术细节可查阅官方技术报告,引用信息如下:
@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}
}
相关资源索引
- 模型库与下载:modelcenter/PP-YOLOE/download_en.md、modelcenter/PP-YOLOE/download_cn.md
- 精度基准:modelcenter/PP-YOLOE/benchmark_en.md
- 部署文档:modelcenter/PP-YOLOE/fastdeploy_en.md
- 完整教程(训练/导出/推理):modelcenter/PP-YOLOE/introduction_en.ipynb
- 模型元信息:modelcenter/PP-YOLOE/info.yaml
- App 源码与配置:APP/app.py、APP/configs/PP-YOLOE.yml、APP/src/detection.py、APP/src/download.py