ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PaddleDetection YOLO 系列模型参数配置全解析:以 PP-YOLO ResNet50vd-DCN 1x COCO 为例

PaddleDetection YOLO 系列模型参数配置全解析:以 PP-YOLO ResNet50vd-DCN 1x COCO 为例 PaddleDetection YOLO 系列模型参数配置全解析以 PP-YOLO ResNet50vd-DCN 1x COCO 为例【免费下载链接】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本文以ppyolo_r50vd_dcn_1x_coco.yml为范例系统讲解 PaddleDetection 中 YOLO 系列PP-YOLO / YOLOv3 / PP-YOLOv2模型配置文件的组成结构与每个关键参数的语义、取值范围与调优思路。读完本文你将能够独立读懂任意 YOLO 系列模型配置掌握数据、优化器、Reader、模型结构、运行时五大子配置的分工与联动关系并能在不改动仓库的前提下自主改写参数、训练、评估与推理。PaddleDetection 采用一个入口配置 多个_BASE_子配置的组合式配置管理方式通过 ppdet/core/config/schema.py 中的_BASE_机制将多个 YAML 文件递归合并为一个完整配置对象。以 configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml 为例其入口文件本身只有 9 行全部技术细节都拆分在 5 个子配置文件中_BASE_: [ ../datasets/coco_detection.yml, # 数据配置 ../runtime.yml, # 运行时配置 ./_base_/ppyolo_r50vd_dcn.yml, # 模型结构配置 ./_base_/optimizer_1x.yml, # 优化器配置 ./_base_/ppyolo_reader.yml, # 数据读取配置 ] snapshot_epoch: 16 weights: output/ppyolo_r50vd_dcn_1x_coco/model_final可以看到入口配置在继承 5 个子配置后仅追加了两项snapshot_epoch: 16覆盖 runtime.yml 中的同名项即每 16 个 epoch 保存一次快照与weights模型权重输出路径。这种公共配置下沉到_BASE_、差异配置上浮到入口的设计使得同一份数据配置、优化器配置、Reader 配置可以被 YOLO 系列多个模型复用。下面按五个子配置文件逐一展开。一、数据配置文件coco_detection.yml数据配置位于 configs/datasets/coco_detection.yml定义了数据集类型、类别数以及训练/评估/测试三套数据集的路径与字段# 数据评估类型 metric: COCO # 数据集的类别数 num_classes: 80 # TrainDataset TrainDataset: !COCODataSet # 图像数据路径相对 dataset_dir 路径os.path.join(dataset_dir, image_dir) image_dir: train2017 # 标注文件路径相对 dataset_dir 路径os.path.join(dataset_dir, anno_path) anno_path: annotations/instances_train2017.json # 数据文件夹 dataset_dir: dataset/coco # data_fields data_fields: [image, gt_bbox, gt_class, is_crowd] EvalDataset: !COCODataSet # 图像数据路径相对 dataset_dir 路径os.path.join(dataset_dir, image_dir) image_dir: val2017 # 标注文件路径相对 dataset_dir 路径os.path.join(dataset_dir, anno_path) anno_path: annotations/instances_val2017.json # 数据文件夹os.path.join(dataset_dir, anno_path) dataset_dir: dataset/coco TestDataset: !ImageFolder # 标注文件路径相对 dataset_dir 路径 anno_path: annotations/instances_val2017.json关键参数说明metric: COCO评估指标类型决定tools/eval.py使用 COCO 的 mAPIoU0.5:0.95评测协议。若使用 VOC 数据集则改为metric: VOC。num_classes: 80类别总数会通过配置系统的共享参数机制自动注入到YOLOv3Head、YOLOv3Loss、BBoxPostProcess等模块见 ppdet/modeling/heads/yolo_head.py 中__shared__ [num_classes, data_format]因此模型配置中无需重复指定。路径拼接规则image_dir、anno_path均相对于dataset_dir最终路径为os.path.join(dataset_dir, image_dir)与os.path.join(dataset_dir, anno_path)所以数据目录应放在仓库根目录下的dataset/coco中目录内需包含train2017/、val2017/与annotations/。data_fields训练时需要送入网络的标注字段包括图像、GT 框、GT 类别与is_crowd标记评估与测试阶段无需此字段。!COCODataSet/!ImageFolderYAML 中的!标签由 ppdet/core/config/yaml_helpers.py 注册的构造器解析将标签对应的 Python 类如COCODataSet用映射参数实例化这是 PaddleDetection 配置驱动模型构建的核心机制。EvalDataset中仓库实际配置还包含allow_empty: true允许评估集中出现无标注图像避免个别空图中断评估TestDataset的anno_path同时支持 COCO JSON 或像 VOClabel_list.txt这样的文本格式相关说明见配置文件内注释。二、优化器配置文件optimizer_1x.yml优化器配置位于 configs/ppyolo/base/optimizer_1x.yml1x表示 1 倍学习率策略对应的还有2x配置训练轮数加倍。完整内容如下# 总训练轮数 epoch: 405 # 学习率设置 LearningRate: # 默认为8卡训学习率 base_lr: 0.01 # 学习率调整策略 schedulers: - !PiecewiseDecay gamma: 0.1 # 学习率变化位置(轮数) milestones: - 243 - 324 # Warmup - !LinearWarmup start_factor: 0. steps: 4000 # 优化器 OptimizerBuilder: # 优化器 optimizer: momentum: 0.9 type: Momentum # 正则化 regularizer: factor: 0.0005 type: L2关键参数说明epoch: 405总训练轮数。PP-YOLO 采用更大的 batch size 更长训练策略405 轮对应的实际上近似 1x约 273k iteration对应 COCO 常规 1x 训练量。base_lr: 0.01基础学习率注释明确默认为 8 卡训练学习率即 8 卡、每卡batch_size24、总 batch 192 场景下的取值。若调整 GPU 卡数或 batch size需要按线性缩放规则如卡数减半则学习率减半同步调整相关说明可参考 configs/ppyolo/README_cn.md 中的注意事项。!PiecewiseDecay分段衰减策略gamma: 0.1表示在milestones第 243、324 轮处将学习率乘以 0.1即 405 轮训练中学习率经历0.01 → 0.001 → 0.0001两段衰减。!LinearWarmup线性预热start_factor: 0.表示从 0 倍基础学习率开始steps: 4000表示用 4000 步线性升至base_lr用于缓解大 batch 训练初期的梯度不稳定问题。注意 Warmup 调度器排在PiecewiseDecay之后两个调度器按顺序叠加生效。OptimizerBuilder优化器构建器。type: Momentum配合momentum: 0.9使用带动量的 SGDregularizer使用L2权重衰减factor: 0.0005。梯度裁剪仓库中的 optimizer_1x.yml 还包含clip_grad_by_norm: 35.即按范数裁剪梯度、阈值 35用于防止训练初期梯度爆炸这是入门教程中未提及但实际生效的配置改写配置时应予以保留。三、数据读取配置文件ppyolo_reader.ymlReader 配置位于 configs/ppyolo/base/ppyolo_reader.yml定义了训练/评估/测试三个阶段的数据预处理流水线transforms、batch 组织方式与多进程读取参数# 每张GPU reader进程个数 worker_num: 2 # 训练数据 TrainReader: inputs_def: num_max_boxes: 50 # 训练数据transforms sample_transforms: - Decode: {} - Mixup: {alpha: 1.5, beta: 1.5} - RandomDistort: {} - RandomExpand: {fill_value: [123.675, 116.28, 103.53]} - RandomCrop: {} - RandomFlip: {} # batch_transforms batch_transforms: - BatchRandomResize: {target_size: [320, 352, 384, 416, 448, 480, 512, 544, 576, 608], random_size: True, random_interp: True, keep_ratio: False} - NormalizeBox: {} - PadBox: {num_max_boxes: 50} - BboxXYXY2XYWH: {} - NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True} - Permute: {} - Gt2YoloTarget: {anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]], anchors: [[10, 13], [16, 30], [33, 23], [30, 61], [62, 45], [59, 119], [116, 90], [156, 198], [373, 326]], downsample_ratios: [32, 16, 8]} # 训练时batch_size batch_size: 24 # 读取数据是否乱序 shuffle: true # 是否丢弃最后不能完整组成batch的数据 drop_last: true # mixup_epoch大于最大epoch表示训练过程一直使用mixup数据增广 mixup_epoch: 25000 # 是否通过共享内存进行数据读取加速需要保证共享内存大小(如/dev/shm)满足大于1G use_shared_memory: true # 评估数据 EvalReader: # 评估数据transforms sample_transforms: - Decode: {} - Resize: {target_size: [608, 608], keep_ratio: False, interp: 2} - NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True} - Permute: {} # 评估时batch_size batch_size: 8 # 测试数据 TestReader: inputs_def: image_shape: [3, 608, 608] # 测试数据transforms sample_transforms: - Decode: {} - Resize: {target_size: [608, 608], keep_ratio: False, interp: 2} - NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True} - Permute: {} # 测试时batch_size batch_size: 1训练阶段 transforms 逐项解析Decode解码 JPEG/PNG 图像为 RGB 张量是所有流水线的第一步。Mixup {alpha: 1.5, beta: 1.5}Mixup 数据增广按 Beta 分布采样权重将两张图像及标注线性混合alpha/beta控制混合强度PP-YOLO 是较早将 Mixup 引入 YOLO 训练流程的模型之一。RandomDistort随机亮度/对比度/饱和度扰动。RandomExpand {fill_value: [123.675, 116.28, 103.53]}随机扩展画布填充值取 ImageNet 的 RGB 均值与下方NormalizeImage的 mean 一致保证填充区域在归一化后接近 0。RandomCrop/RandomFlip随机裁剪与随机水平翻转是检测任务的标准几何增广。BatchRandomResizebatch 级随机尺寸训练target_size在 320~608 之间以 32 为步长随机选取与三个检测头的下采样倍数 32/16/8 对齐random_interp: True随机插值方式keep_ratio: False表示直接拉伸至目标尺寸。这是 PP-YOLO 多尺度训练MS training的具体实现。NormalizeBox将 GT 框坐标归一化到 0~1便于与归一化后的预测对齐。PadBox {num_max_boxes: 50}将每张图的 GT 框 pad 到固定数量num_max_boxes: 50与inputs_def一致用于组 batch。BboxXYXY2XYWH将框格式由[x1, y1, x2, y2]转为[cx, cy, w, h]与 YOLO 系列的解码格式对齐。NormalizeImage {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}ImageNet 均值和标准差归一化is_scale: True表示先除以 255 再减均值除标准差。Permute将 HWC 布局转为 NCHW满足 Paddle 卷积的输入要求。Gt2YoloTarget核心 GT 编码器把归一化 GT 框按anchors、anchor_masks和downsample_ratios: [32, 16, 8]编码为 YOLO 训练目标中心点偏移、宽高对数、目标度、类别三个下采样率分别对应 FPN 的三层输出特征图。batch 组织与读取性能参数batch_size: 24每张 GPU 的训练 batch size8 卡总 batch 为 192。shuffle: true/drop_last: true每个 epoch 打乱数据丢弃末尾不足一个 batch 的样本保证 batch 完整对 BN/同步 BN 尤为重要。mixup_epoch: 25000Mixup 使用的最大 epoch 数大于总 epoch405等价于全程开启 Mixup。worker_num: 2每张 GPU 的 DataLoader 子进程数数据预处理在子进程中并行执行以掩盖 IO 延迟。use_shared_memory: true通过共享内存如/dev/shm加速跨进程数据传输。仓库在 ppdet/data/reader.py 中有对应实现Windows/macOS 下自动关闭共享内存Linux 下若共享内存小于 1G1024M会自动降级为普通进程通信并打印警告因此训练前应检查/dev/shm容量。评估与测试阶段差异EvalReader与TestReader的 transforms 明显更精简仅 Decode → Resize → NormalizeImage → Permute不含任何随机增广Resize {target_size: [608, 608], keep_ratio: False, interp: 2}固定缩放至 608×608interp: 2对应双线性插值TestReader还通过inputs_def.image_shape: [3, 608, 608]显式声明输入张量形状用于导出模型时固定输入维度。评估 batch size 为 8测试 batch size 为 1逐张推理。四、模型配置文件ppyolo_r50vd_dcn.yml模型结构配置位于 configs/ppyolo/base/ppyolo_r50vd_dcn.yml是整份配置的核心。PP-YOLO 沿用 YOLOv3 的Backbone FPN Neck YOLO Head三段式架构同时引入了 CoordConv、DropBlock、SPP、IoU-Aware、Matrix NMS 等改进# 模型结构类型 architecture: YOLOv3 # 预训练模型地址 pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_ssld_pretrained.pdparams # norm_type norm_type: sync_bn # 是否使用ema use_ema: true # ema_decay ema_decay: 0.9998 # YOLOv3 YOLOv3: # backbone backbone: ResNet # neck neck: PPYOLOFPN # yolo_head yolo_head: YOLOv3Head # post_process post_process: BBoxPostProcess # backbone ResNet: # depth depth: 50 # variant variant: d # return_idx, 0 represent res2 return_idx: [1, 2, 3] # dcn_v2_stages dcn_v2_stages: [3] # freeze_at freeze_at: -1 # freeze_norm freeze_norm: false # norm_decay norm_decay: 0. # PPYOLOFPN PPYOLOFPN: # 是否coord_conv coord_conv: true # 是否drop_block drop_block: true # block_size block_size: 3 # keep_prob keep_prob: 0.9 # 是否spp spp: true # YOLOv3Head YOLOv3Head: # anchors anchors: [[10, 13], [16, 30], [33, 23], [30, 61], [62, 45], [59, 119], [116, 90], [156, 198], [373, 326]] # anchor_masks anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]] # loss loss: YOLOv3Loss # 是否使用iou_aware iou_aware: true # iou_aware_factor iou_aware_factor: 0.4 # YOLOv3Loss YOLOv3Loss: # ignore_thresh ignore_thresh: 0.7 # downsample downsample: [32, 16, 8] # 是否label_smooth label_smooth: false # scale_x_y scale_x_y: 1.05 # iou_loss iou_loss: IouLoss # iou_aware_loss iou_aware_loss: IouAwareLoss # IouLoss IouLoss: loss_weight: 2.5 loss_square: true # IouAwareLoss IouAwareLoss: loss_weight: 1.0 # BBoxPostProcess BBoxPostProcess: decode: name: YOLOBox conf_thresh: 0.01 downsample_ratio: 32 clip_bbox: true scale_x_y: 1.05 # nms 配置 nms: name: MatrixNMS keep_top_k: 100 score_threshold: 0.01 post_threshold: 0.01 nms_top_k: -1 background_label: -1全局训练技巧配置pretrain_weights预训练权重这里使用 SSLD 蒸馏得到的ResNet50_vd_ssld_pretrained.pdparams更优预训练模型是 PP-YOLO 精度提升的关键之一。训练时框架会自动下载到本地缓存-1表示不加载预训练。norm_type: sync_bn使用同步批归一化多卡训练时跨卡同步统计量需要 Paddle 编译支持 NCCL单卡场景下可改回bn。use_ema: true/ema_decay: 0.9998指数滑动平均对权重做平滑得到更稳健的最终模型ema_decay越大平滑越强、对训练后期越敏感。BackboneResNet50vd-DCNdepth: 50/variant: dResNet-50 的 vd虚残差variant: d结构变体。return_idx: [1, 2, 3]返回第 2~4 阶段res3/res4/res5索引 0 对应 res2的特征图送入 FPN对应 ppdet/modeling/backbones/resnet.py 中return_idx参数。dcn_v2_stages: [3]仅在第 4 阶段索引 3使用可变形卷积 v2DCNv2这是 PP-YOLO 骨干网络ResNet50vd-DCN中 DCN 部分的来源在扩大感受野的同时只增加有限计算量。freeze_at: -1不冻结任何 stage-1表示不冻结freeze_norm: false表示不冻结 BN 层参数。实际训练时也可配合-o命令行参数临时覆盖。norm_decay: 0.BN 层参数不参与 L2 权重衰减避免 BN 的 scale/shift 被正则化。NeckPPYOLOFPNPP-YOLO 的 Neck 在标准 FPN 基础上叠加了多个模块其实现位于 ppdet/modeling/necks/yolo_fpn.pycoord_conv: true在 FPN 入口使用 CoordConv将坐标通道拼接到输入上帮助网络感知空间位置源码中开启时ConvLayer CoordConv。drop_block: true / block_size: 3 / keep_prob: 0.9在 FPN 中使用 DropBlock 正则化按block_size × block_size的块状区域随机丢弃特征keep_prob: 0.9表示保留概率源码中 DropBlock 的构造参数为[block_size, keep_prob]。spp: true使用空间金字塔池化SPP用多个不同池化核提取多尺度上下文。HeadYOLOv3HeadanchorsCOCO 数据集上聚类得到的 9 组先验框按从小到大排列。anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]]将 9 个 anchor 分配到三个检测层[6,7,8]最大 anchor→ 下采样 32 的深层大感受野特征图[3,4,5]→ 下采样 16 的中层[0,1,2]最小 anchor→ 下采样 8 的浅层小目标特征图。源码 ppdet/modeling/heads/yolo_head.py 中的parse_anchor会校验 mask 索引不越界。iou_aware: true / iou_aware_factor: 0.4IoU-Aware 分支在输出通道中额外预测一个 IoU 预测值开启时每个 anchor 输出num_classes 6个通道见 yolo_head.py推理时用预测 IoU 修正分类分数iou_aware_factor控制修正权重。LossYOLOv3Loss IouLoss IouAwareLossYOLOv3Loss 的实现位于 ppdet/modeling/losses/yolo_loss.py并通过__inject__ [iou_loss, iou_aware_loss]注入两个子损失ignore_thresh: 0.7目标度损失中的 ignore 阈值anchor 与 GT 的 IoU 低于该阈值时才计入负样本损失见obj_loss中iou_max ignore_thresh的掩码逻辑 yolo_loss.py。downsample: [32, 16, 8]三个检测层的下采样倍数须与 Reader 中Gt2YoloTarget.downsample_ratios及YOLOBox.downsample_ratio保持一致。label_smooth: false是否使用标签平滑开启时按delta min(1/num_classes, 1/40)软化正负标签见 yolo_loss.py。scale_x_y: 1.05Grid Sensitive 系数对中心点 sigmoid 输出做缩放x scale * sigmoid(x) - 0.5*(scale-1)见 yolo_loss.py缓解 grid 边界附近中心点难以预测的问题。注意该值需与后处理YOLOBox.scale_x_y保持一致否则训练与推理解码不一致。IouLoss {loss_weight: 2.5, loss_square: true}IoU 损失项loss 1 - iou²再乘权重 2.5实现见 ppdet/modeling/losses/iou_loss.py使回归目标从 L1 距离升级为 IoU 度量。IouAwareLoss {loss_weight: 1.0}IoU-Aware 分支的监督损失继承自 IouLoss。后处理BBoxPostProcessdecode.name: YOLOBoxYOLO 解码器将 head 原始输出解码为真实坐标conf_thresh: 0.01过滤低置信度框clip_bbox: true将框裁剪到图像边界内scale_x_y: 1.05与训练一致。nms.name: MatrixNMS矩阵 NMS论文 Solver 提出的高效 NMS比传统 NMS 更适合并行加速。其参数在 ppdet/modeling/layers.py 的MatrixNMS类中实现score_threshold: 0.01置信度阈值、post_threshold: 0.01抑制后保留阈值、keep_top_k: 100最终保留框数、nms_top_k: -1NMS 前保留框数-1 表示不截断、background_label: -1无背景类。配置文件还支持use_gaussian、gaussian_sigma等参数本配置未启用高斯加权。五、运行时配置文件runtime.yml运行时配置位于 configs/runtime.yml是所有模型的公共运行时入口# 是否使用gpu use_gpu: true # 日志打印间隔 log_iter: 20 # save_dir save_dir: output # 模型保存间隔时间 snapshot_epoch: 1仓库实际文件还包含更多运行环境选项可按需扩展use_gpu: true use_xpu: false use_mlu: false use_npu: false log_iter: 20 save_dir: output snapshot_epoch: 1 print_flops: false print_params: false # 导出模型相关配置 export: post_process: True # 导出时是否将后处理包含进网络 nms: True # 导出时是否将NMS包含进网络 benchmark: False # 性能测试模式开启后不导出后处理与NMS fuse_conv_bn: False # 导出时是否融合ConvBNuse_gpu: true主运行设备开关另有use_xpu/use_mlu/use_npu对应飞桨的其他硬件后端。log_iter: 20每 20 个 iteration 打印一次训练日志。save_dir: output模型与日志输出根目录。snapshot_epoch: 1每 1 个 epoch 保存一次快照PP-YOLO 入口配置中覆盖为 16即每 16 轮保存一次。print_flops/print_params开启后打印模型 FLOPs 与参数量便于评估模型规模。export控制tools/export_model.py导出推理模型时是否将后处理含 NMS固化进网络benchmark: True时仅导出纯网络部分用于测速。六、配置的加载与覆盖机制BASE与命令行 -o理解配置机制有助于精确定位某个参数从哪来、如何覆盖_BASE_递归合并入口 YAML 中的_BASE_列表按顺序被读取并递归展开合并后的结果再与入口文件自身的字段合并入口字段优先级更高最终得到一个完整配置树该机制由 ppdet/core/config/schema.py 与 ppdet/core/config/yaml_helpers.py 共同实现。!标签实例化!COCODataSet、!PiecewiseDecay、!LinearWarmup等标签会构造对应的 Python 类实例实现配置即对象。__inject__/__shared__注入__inject__将子模块如iou_loss注入父模块__shared__将num_classes、norm_type等公共参数自动同步到多个模块避免重复配置见 ppdet/modeling/heads/yolo_head.py 与 ppdet/modeling/losses/yolo_loss.py。命令行-o覆盖训练、评估、推理脚本均支持-o keyvalue在命令行临时覆盖任意配置项无需修改 YAML 文件例如调整学习率-o LearningRate.base_lr0.005。七、基于该配置的训练、评估与推理实战在完成上述配置理解后可按以下流程使用该模型命令均来自仓库 docs/tutorials/GETTING_STARTED_cn.md配置项以本文ppyolo_r50vd_dcn_1x_coco为例1. 数据准备按照第一节的路径约定将 COCO 数据集放置于dataset/coco目录包含train2017/、val2017/子目录与annotations/instances_train2017.json、annotations/instances_val2017.json标注文件。2. 单卡训练python tools/train.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml3. 多卡训练python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 \ tools/train.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml注意base_lr: 0.01与batch_size: 24是按 8 卡设定若 GPU 数与 batch size 改变需要同步调整学习率与训练轮数可参考 configs/ppyolo/README_cn.md 的说明。4. 评估python tools/eval.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml \ -o weightshttps://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_1x_coco.pdparamsweights也可指向本地训练产出如output/ppyolo_r50vd_dcn_1x_coco/model_final。如需边训练边评估在训练命令后追加--eval即可。5. 单图推理python tools/infer.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml \ --infer_imgdemo/000000014439.jpg \ -o weightsoutput/ppyolo_r50vd_dcn_1x_coco/model_final \ --output_dirinfer_output/推理阶段使用TestReader输入图像会被缩放到 608×608batch size 为 1输出结果保存在--output_dir指定的目录。6. 导出部署模型python tools/export_model.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml \ -o weightsoutput/ppyolo_r50vd_dcn_1x_coco/model_final导出行为受 configs/runtime.yml 中export段控制默认将后处理与 NMS 固化进网络若做纯网络测速可设置export.benchmarkTrue。导出后的模型可供 deploy/python/infer.py 等部署脚本加载使用。八、配置改写要点速查对 YOLO 系列配置做自定义修改时优先检查以下联动一致性改动目标需要同步修改的位置一致性要求输入尺寸TrainReaderbatch_transforms 的 target_size 列表、EvalReader/TestReader的Resize、TestReader.inputs_def.image_shape训练/评估/测试尺寸策略可不同但目标尺寸应为 32 的倍数检测层下采样Gt2YoloTarget.downsample_ratios、YOLOv3Loss.downsample、YOLOBox.downsample_ratio三者必须一致anchor 调整YOLOv3Head.anchors、anchor_masks、Gt2YoloTarget.anchors、anchor_masks两处 anchors 与 masks 必须完全一致类别数num_classes共享参数自动注入同时更新数据集标注与IouLoss等无需手动改Grid SensitiveYOLOv3Loss.scale_x_y、YOLOBox.scale_x_y训练与推理解码必须一致GPU 数与 batch sizeLearningRate.base_lr、TrainReader.batch_size、训练轮数需按线性缩放规则联动调整其中Reader 中的 anchors/masks/downsample_ratios 必须与 Head/Loss/后处理中的对应配置保持一致是最容易出错、也最影响收敛与精度的约束改动时务必成对修改。综上PaddleDetection 的 YOLO 系列配置由数据、优化器、Reader、模型结构、运行时五个子配置协同构成数据与 Reader 决定喂什么、怎么喂优化器决定怎么学模型结构决定学什么运行时决定在哪跑、怎么存。以 docs/tutorials/config_annotation/ppyolo_r50vd_dcn_1x_coco_annotation.md 为起点结合 configs/ppyolo 目录下的实际配置与 ppdet/modeling 中的源码实现开发者可以快速上手自定义训练属于自己的 YOLO 系列检测模型。【免费下载链接】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),仅供参考
返回列表