PP-YOLOE 模型下载与部署指南:PaddlePaddle models 模型中心实战全解析

原创2026-10-07 23:56:50190 阅读
文章标签:人工智能深度学习计算机视觉NLP语音

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 的实现):

  1. Resize:target_size: [640, 640],keep_ratio: false 表示直接拉伸到 640×640(而非等比缩放),插值方式 interp: 2(即 cv2.INTER_LINEAR);
  2. NormalizeImage:is_scale: true(先除以 255),再按 COCO 数据集统计的 mean = [0.485, 0.456, 0.406]、std = [0.229, 0.224, 0.225] 做标准化;
  3. 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}
}

相关资源索引

登录后查看全文
models