ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PaddleDetection PP-PicoDet 2021.10 历史版本(Legacy)模型库全解析:精度基线、配置结构与部署实践

PaddleDetection PP-PicoDet 2021.10 历史版本(Legacy)模型库全解析:精度基线、配置结构与部署实践 PaddleDetection PP-PicoDet 2021.10 历史版本Legacy模型库全解析精度基线、配置结构与部署实践【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetectionPP-PicoDet 是 PaddleDetection 中面向移动端与边缘设备推出的轻量级实时目标检测系列本文聚焦仓库中 configs/picodet/legacy_model/README.md 所整理的2021.10 历史版本模型库Legacy Model-ZOO完整继承其全部精度基线、参数量/算力/时延数据与部署模型清单并结合 legacy_model 目录 下的真实配置文件与 pico_head.py 源码深入拆解 ESNet CSPPAN PicoHead 的架构与超参含义。读完本文你将掌握该版本每个模型的选型依据、配置文件逐字段解读、训练评估与部署导出的完整实战方法。版本背景Legacy Model-ZOO 是什么当前仓库的 configs/picodet/README.md 明确将该目录定位为历史版本模型并在 2022.03 发布的全新系列中引入了 TAL 与 ETA Head、优化 PAN 结构、将后处理并入网络等升级骨干也换成了 LCNet。而legacy_model目录保留的则是2021.10 版本的完整模型库其技术特征是骨干网络使用ESNetEnhanced ShuffleNetscale缩放 逐阶段channel_ratio通道配比特征融合采用CSPPAN基于 CSP 结构的 PAN检测头使用第一代PicoHead包含 PicoFeat 卷积特征子网配合 SimOTA 标签分配与 VFL/DFL/GIoU 组合损失训练策略以 300 epoch CosineDecay EMA 为主。从目录结构看configs/picodet/legacy_model 下按规格组织配置文件picodet_s/m/l_{320,416,640}_coco.yml共享的骨干、优化器与数据读取配置集中在base中额外骨干变体位于 more_config剪枝教程位于 pruner。后续章节所有结论均以这些真实文件为依据。PP-PicoDet 基线模型库S / M / L 全规格精度一览下表为 legacy 模型库的主基线完整复刻自原文档。其中 mAP 在 COCOval2017上评测Params为模型参数量MFLOPS为输入尺寸下的浮点计算量G时延分别在 NCNN 与 Paddle-Lite 上测得。模型输入尺寸mAP 0.5:0.95mAP 0.5参数量 (M)FLOPS (G)NCNN 时延 (ms)Lite 时延 (ms)权重/日志下载配置PicoDet-S320×32027.141.40.990.738.136.65picodet_s_320_coco.pdparams/train_picodet_s_320_coco.logpicodet_s_320_coco.ymlPicoDet-S416×41630.745.80.991.2412.379.82picodet_s_416_coco.pdparams/train_picodet_s_416_coco.logpicodet_s_416_coco.ymlPicoDet-M320×32030.945.72.151.4811.279.61picodet_m_320_coco.pdparams/train_picodet_m_320_coco.logpicodet_m_320_coco.ymlPicoDet-M416×41634.850.52.152.5017.3915.88picodet_m_416_coco.pdparams/train_picodet_m_416_coco.logpicodet_m_416_coco.ymlPicoDet-L320×32032.948.23.302.2315.2613.42picodet_l_320_coco.pdparams/train_picodet_l_320_coco.logpicodet_l_320_coco.ymlPicoDet-L416×41636.652.53.303.7623.3621.85picodet_l_416_coco.pdparams/train_picodet_l_416_coco.logpicodet_l_416_coco.ymlPicoDet-L640×64040.957.63.308.9154.1150.55picodet_l_640_coco.pdparams/train_picodet_l_640_coco.logpicodet_l_640_coco.yml上表权重与训练日志文件由官方托管于 PaddleDetection 权重服务器paddledet.bj.bcebos.com下models/与logs/目录下载时按前缀 文件名拼接即可例如https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams。表注要点继承自原文档时延测试环境所有模型均在Qualcomm Snapdragon 865 (4×A774×A55)上、开启 4 线程、ARMv8 架构、FP16 精度下测得表中 NCNN 对应 NCNN 推理库Lite 对应 Paddle-Lite 推理库测试脚本来自 MobileDetBenchmark 基准工程数据与评测模型在 COCOtrain2017上训练、val2017上评估训练配置使用 4 卡或 8 卡 GPU 训练所有 checkpoint 均以默认设置与超参产出可复现。从表中可以看到同规格模型提升输入分辨率带来的精度/时延权衡S 系列 320→416 时 mAP 提升 3.6 个点、Lite 时延仅增加约 3 ms而 L 系列 416→640 时 mAP 提升 4.3 个点但 Lite 时延从 21.85 ms 升至 50.55 ms属于典型的高精度重负载档位。更多配置More Configs不同骨干的替换实验除了 ESNet 主干legacy 模型库还提供了四类骨干替换的完整模型用于探索不同轻量骨干对精度-速度权衡的影响配置均位于 configs/picodet/legacy_model/more_config模型输入尺寸mAP 0.5:0.95mAP 0.5参数量 (M)FLOPS (G)NCNN 时延 (ms)Lite 时延 (ms)权重/日志下载配置PicoDet-ShuffleNetV2 1x416×41630.044.61.171.5315.0610.63picodet_shufflenetv2_1x_416_coco.pdparamspicodet_shufflenetv2_1x_416_coco.ymlPicoDet-MobileNetV3-large 1x416×41635.652.03.552.8020.7117.88picodet_mobilenetv3_large_1x_416_coco.pdparamspicodet_mobilenetv3_large_1x_416_coco.ymlPicoDet-LCNet 1.5x416×41636.352.23.103.8521.2920.8picodet_lcnet_1_5x_416_coco.pdparamspicodet_lcnet_1_5x_416_coco.ymlPicoDet-LCNet 1.5x640×64040.657.43.10---picodet_lcnet_1_5x_640_coco.pdparamspicodet_lcnet_1_5x_640_coco.ymlPicoDet-R18640×64040.757.211.10---picodet_r18_640_coco.pdparamspicodet_r18_640_coco.yml从源码结构看这一组变体仅替换PicoDet.backbone字段如 picodet_shufflenetv2_1x_416_coco.yml 中声明backbone: ShuffleNetV2、act: leaky_relu颈部与检测头完全复用说明 PicoDet 的骨架-颈部-头部三件套具备良好的即插即用特性其中 LCNet 1.5x 系列即后续官方 FAQ 中推荐的transpose 算子较少、便于在部分硬件上部署的变体。从配置看架构ESNet CSPPAN PicoHead 逐字段拆解三件套的声明方式所有 legacy 配置均通过_BASE_继承共享文件。以 picodet_s_320_coco.yml 为例_BASE_: [ ../../datasets/coco_detection.yml, ../../runtime.yml, _base_/picodet_esnet.yml, _base_/optimizer_300e.yml, _base_/picodet_320_reader.yml, ] pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x0_75_pretrained.pdparams weights: output/picodet_s_320_coco/model_final find_unused_parameters: True use_ema: true cycle_epoch: 40 snapshot_epoch: 10 ESNet: scale: 0.75 feature_maps: [4, 11, 14] act: hard_swish channel_ratio: [0.875, 0.5, 0.5, 0.5, 0.625, 0.5, 0.625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5] CSPPAN: out_channels: 96 PicoHead: conv_feat: name: PicoFeat feat_in: 96 feat_out: 96 num_convs: 2 num_fpn_stride: 4 norm_type: bn share_cls_reg: True feat_in_chan: 96字段含义说明pretrain_weights指定 ESNet 对应 scale 的 ImageNet 预训练权重S 系列为ESNet_x0_75M 为ESNet_x1_0L 为ESNet_x1_25是迁移训练的关键入口find_unused_parameters: True开启 DDP 未用参数检测与 ESNet 中部分分支不参与所有阶段计算有关use_ema: true启用指数滑动平均EMA更新模型参数是 PicoDet 精度提升的重要手段cycle_epoch: 40/snapshot_epoch: 10控制周期性调整输入尺寸与快照保存节奏的辅助超参ESNet.scale全局通道缩放系数S/M/L 分别为 0.75 / 1.0 / 1.25ESNet.feature_maps: [4, 11, 14]指定骨干输出送入 FPN 的 3 个特征层索引CSPPAN 输入为 3 层ESNet.channel_ratio13 个 stage 逐层通道配比是该骨干的核心设计——在保持精度的前提下对不同 stage 分配差异化通道数S 系列整体比值更小以换取更低参数量CSPPAN.out_channels颈部输出通道S/M/L 分别为 96 / 128 / 160PicoHead.conv_feat指向PicoFeat卷积子网num_fpn_stride: 4表示在 4 个 FPN 层级上并行执行分类/回归子网share_cls_reg: True表示分类与回归共享特征提取。PicoFeat 与 PicoHead 的源码实现PicoFeat与PicoHead实现在 ppdet/modeling/heads/pico_head.pyPicoFeat位于 L68PicoHead位于 L196。从源码可以看到PicoFeat在每个 FPN stage 上构建由filter_size5的深度可分离卷积cls_conv_dwgroupsfeat_out 1×1 逐点卷积cls_conv_pw组成的卷积块卷积层均设置lr_scale2.并且在使用 SE 模块时强制share_cls_regTrue。这种先分组卷积降通道、再逐点卷积提特征的设计与硬开关激活hard_swish配合是 PicoDet 在移动端低时延的关键来源。骨干-颈部-头部的默认连线定义在base/picodet_esnet.ymlarchitecture: PicoDet PicoDet: backbone: ESNet neck: CSPPAN head: PicoHead CSPPAN: use_depthwise: True num_csp_blocks: 1 num_features: 4 PicoHead: fpn_stride: [8, 16, 32, 64] prior_prob: 0.01 reg_max: 7 cell_offset: 0.5 loss_class: {name: VarifocalLoss, use_sigmoid: True, iou_weighted: True, loss_weight: 1.0} loss_dfl: {name: DistributionFocalLoss, loss_weight: 0.25} loss_bbox: {name: GIoULoss, loss_weight: 2.0} assigner: name: SimOTAAssigner candidate_topk: 10 iou_weight: 6 nms: name: MultiClassNMS nms_top_k: 1000 keep_top_k: 100 score_threshold: 0.025 nms_threshold: 0.6要点解读CSPPANuse_depthwise: True启用深度可分离卷积、num_csp_blocks: 1控制每个 PAN 层的 CSP 块数量、num_features: 4表示输出 4 个尺度特征stride 8/16/32/64与PicoHead.fpn_stride对应损失组合分类用 VarifocalLossVFLiou_weighted: True按 IoU 加权、边框用 GIoULoss权重 2.0、分布回归用 DistributionFocalLossDFL权重 0.25reg_max: 7表示分布回归的桶数上限标签分配采用 SimOTAAssignercandidate_topk: 10候选正样本数、iou_weight: 6IoU 在代价矩阵中的权重这是 PicoDet 摆脱 anchor 依赖、实现无锚框检测的核心机制NMS 后处理nms_top_k: 1000、keep_top_k: 100、score_threshold: 0.025、nms_threshold: 0.6直接决定最终输出框数量与召回/误检的平衡推理端可通过这些参数调节。训练超参与数据管线训练 300 epoch 的优化器配置见base/optimizer_300e.ymlepoch: 300 LearningRate: base_lr: 0.4 schedulers: - name: CosineDecay max_epochs: 300 - name: LinearWarmup start_factor: 0.1 steps: 300 OptimizerBuilder: optimizer: {momentum: 0.9, type: Momentum} regularizer: {factor: 0.00004, type: L2}即Momentum SGD0.9 L2 权重衰减 4e-5 300 步线性 warmup0.1 倍起步 余弦退火base_lr: 0.4是 4 卡训练下的值若改用单卡或 8 卡需要按线性比例缩放。另外base目录还提供了optimizer_100e.yml与 320/416/640 三种分辨率的 reader 基类。数据读取与增强见base/picodet_320_reader.yml训练侧核心策略是BatchRandomResize目标尺寸在[256, 288, 320, 352, 384]中随机选取、random_interp随机插值配合 RandomCrop、RandomFlip(0.5)、RandomDistort实现尺度抖动增强eval_height/eval_width: 320为评估与测试统一分辨率batch_size: 128为 4 卡训练时的单卡 batchdrop_last: true。640 输入规格的 picodet_l_640_coco.yml 额外将batch_size降为 32、base_lr调整为 0.3以适配高分辨率下更大的显存与计算开销。训练、评估与推理实战以下命令基于 configs/picodet/README.md 的官方流程配置路径已适配 legacy 模型库。单卡训练带评估export CUDA_VISIBLE_DEVICES0 python tools/train.py -c configs/picodet/legacy_model/picodet_s_320_coco.yml --eval多卡训练export CUDA_VISIBLE_DEVICES0,1,2,3 python -m paddle.distributed.launch --gpus 0,1,2,3 \ tools/train.py -c configs/picodet/legacy_model/picodet_s_320_coco.yml --eval⚠️ 官方发布配置均由 4 卡训练得到若改变 GPU 卡数LearningRate.base_lr必须按卡数线性缩放如单卡时 base_lr 需缩小 4 倍若训练时显存溢出OOM优先调小TrainReader.batch_size同时等比例降低base_lr。评估python tools/eval.py -c configs/picodet/legacy_model/picodet_s_320_coco.yml \ -o weights./output/picodet_s_320_coco/model_final.pdparams推理python tools/infer.py -c configs/picodet/legacy_model/picodet_s_320_coco.yml \ -o weights./output/picodet_s_320_coco/model_final.pdparams迁移学习只需替换配置文件中的pretrain_weights字段即可在自有数据集上继续训练例如pretrain_weights: https://paddledet.bj.bcebos.com/models/picodet_l_640_coco.pdparams部署导出模型与转换到 Lite / ONNX原文档提供了 legacy 版本各模型的部署模型清单均已预先导出文件同样托管于权重服务器deploy/third_engine/与deploy/paddlelite/目录模型输入尺寸ONNXPaddle Lite (fp32)Paddle Lite (fp16)PicoDet-S320×320picodet_s_320_coco.onnxpicodet_s_320.tarpicodet_s_320_fp16.tarPicoDet-S416×416picodet_s_416_coco.onnxpicodet_s_416.tarpicodet_s_416_fp16.tarPicoDet-M320×320picodet_m_320_coco.onnxpicodet_m_320.tarpicodet_m_320_fp16.tarPicoDet-M416×416picodet_m_416_coco.onnxpicodet_m_416.tarpicodet_m_416_fp16.tarPicoDet-L320×320picodet_l_320_coco.onnxpicodet_l_320.tarpicodet_l_320_fp16.tarPicoDet-L416×416picodet_l_416_coco.onnxpicodet_l_416.tarpicodet_l_416_fp16.tarPicoDet-L640×640picodet_l_640_coco.onnxpicodet_l_640.tarpicodet_l_640_fp16.tarPicoDet-ShuffleNetV2 1x416×416picodet_shufflenetv2_1x_416_coco.onnxpicodet_shufflenetv2_1x.tarpicodet_shufflenetv2_1x_fp16.tarPicoDet-MobileNetV3-large 1x416×416picodet_mobilenetv3_large_1x_416_coco.onnxpicodet_mobilenetv3_large_1x.tarpicodet_mobilenetv3_large_1x_fp16.tarPicoDet-LCNet 1.5x416×416picodet_lcnet_1_5x_416_coco.onnxpicodet_lcnet_1_5x.tarpicodet_lcnet_1_5x_fp16.tar若需自行导出与转换流程如下命令模板来自 configs/picodet/README.md1. 导出推理模型python tools/export_model.py -c configs/picodet/legacy_model/picodet_s_320_coco.yml \ -o weights./output/picodet_s_320_coco/model_final.pdparams \ --output_diroutput_inference如需去掉后处理如导出 ONNX 时追加-o export.post_processFalse如需不导出 NMS追加-o export.nmsFalse部分 ONNX 场景只支持单输入与固定 shape 输出推荐不导出 NMS。2. 转换 Paddle Lite需pip install paddlelite版本 2.10# FP32 paddle_lite_opt --model_diroutput_inference/picodet_s_320_coco \ --valid_targetsarm --optimize_outpicodet_s_320_coco_fp32 # FP16 paddle_lite_opt --model_diroutput_inference/picodet_s_320_coco \ --valid_targetsarm --optimize_outpicodet_s_320_coco_fp16 --enable_fp16true3. 转换 ONNX需paddle2onnx与onnx版本分别 0.9.2 与 1.10.1paddle2onnx --model_dir output_inference/picodet_s_320_coco/ \ --model_filename model.pdmodel \ --params_filename model.pdiparams \ --opset_version 11 \ --save_file picodet_s_320_coco.onnx # 可选用 onnxsim 简化模型pip install onnxsim 0.4.1 onnxsim picodet_s_320_coco.onnx picodet_s_processed.onnx转换完成后即可接入 deploy/third_engineNCNN/MNN/OpenVINO/ONNXRuntime 等或 deploy/lite 等部署链路进行端侧推理。引用 PP-PicoDet在研究中引用本模型系列时请使用官方技术报告misc{yu2021pppicodet, title{PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices}, author{Guanghua Yu and Qinyao Chang and Wenyu Lv and Chang Xu and Cheng Cui and Wei Ji and Qingqing Dang and Kaipeng Deng and Guanzhong Wang and Yuning Du and Baohua Lai and Qiwen Liu and Xiaoguang Hu and Dianhai Yu and Yanjun Ma}, year{2021}, eprint{2111.00902}, archivePrefix{arXiv}, primaryClass{cs.CV} }【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表