PaddleDetection-YOLOv3模型配置文件解读

2021SC@SDUSC

本周分析PaddleDetection的YOLOv3相关配置文件

config/yolov3_darknet53_270e_coco.yml参数解读

_BASE_: [
  './_base_/models/yolov3_darknet53.yml',  #models配置
  './_base_/optimizers/yolov3_270e.yml',   #optimizers配置
  './_base_/datasets/coco.yml',            #datasets配置
  './_base_/readers/yolov3_reader.yml',    #readers配置
  './_base_/runtime.yml',                  #runtime配置
]

_base_/models/yolov3_darknet53.yml参数解读 

architecture: YOLOv3                            # 检测模型的名称
pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/DarkNet53_pretrained.tar # 模型的预训练权重,默认是从指定url下载
weights: output/yolov3_darknet/model_final      # 用于模型验证或测试的训练好的权重
use_fine_grained_loss: false                    # 是否采用grained_loss
load_static_weights: True                       # 是否加载静态图模型

# YOLOV3结构,包括了以下主要组
YOLOv3:
  backbone: DarkNet   #主干网络类名
  neck: YOLOv3FPN     #neck FPN类名
  yolo_head: YOLOv3Head #Head类名
  post_process: BBoxPostProcess  #BBox后处理类名

# 实例化类中具体参数

DarkNet:#初始化
  depth: 53 #网络层数
  return_idx: [2, 3, 4]  # 主干网络返回的主要阶段特征用于FPN作进一步的特征融合
  norm_type: sync_bn  #同步BN

YOLOv3FPN:#初始化
  feat_channels: [1024, 768, 384]   #FPN融合后的特征通道数
                                                  
                                                   # 根据特征图尺寸,在特征图的每个位置生成N个大小、长宽比各不同anchor
                                                   # N = anchor_sizes * aspect_ratios
YOLOv3Head:#初始化
  anchors: [[10, 13], [16, 30], [33, 23],
            [30, 61], [62, 45], [59, 119],
            [116, 90], [156, 198], [373, 326]]     #anchor大小
  anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]]  #anchor索引
  loss: YOLOv3Loss                                 #loss

YOLOv3Loss:                #初始化
  ignore_thresh: 0.7       #正例阈值
  downsample: [32, 16, 8]  #下采样倍数
  label_smooth: true       #是否采用label_smooth

BBoxPostProcess:           #初始化
  decode:
    name: YOLOBox          #类名
    conf_thresh: 0.005     #阈值
    downsample_ratio: 32   #下采样比例
    clip_bbox: true        #是否clip_bbox
  nms:                     #nms实例化
    name: MultiClassNMS    # nms 类型参数,可以设置为[MultiClassNMS, MultiClassSoftNMS, MatrixNMS], 默认使用 MultiClassNMS
    keep_top_k: 100        #bbox最大个数
    score_threshold: 0.01  #置信度阈值
    nms_threshold: 0.45    #nms阈值
    nms_top_k: 1000        #nms最大框个数
    normalized: false      #是否正则化
    background_label: -1   #是否有背景类

 _base_/optimizers/yolov3_270e.yml解读

epoch: 270   #训练epoch数

LearningRate:       #实例化学习率
                    # 初始学习率, 一般情况下8卡gpu,batch size为2时设置为0.02
                    # 可以根据具体情况,按比例调整
                    # 比如说4卡V100,bs=2时,设置为0.01
  base_lr: 0.001    #学习率
    # if epoch < 216:
    #    learning_rate = 0.1
    # elif 216 <= epoch < 243:
    #    learning_rate = 0.1 * 0.1
    # else:
    #    learning_rate = 0.1 * (0.1)**2
  schedulers:       #实例化优化器策略
  - !PiecewiseDecay #分段式衰减
    gamma: 0.1      #衰减系数
    milestones:     #衰减点[列表]
    - 216           #在epoch为216时学习率衰减一次
    - 243           #在epoch为243时学习率衰再减一次
                    # 在训练开始时,调低学习率为base_lr * start_factor,然后逐步增长到base_lr,这个过程叫学习率热身,按照以下公式更新学习率
                    # linear_step = end_lr - start_lr
                    # lr = start_lr + linear_step * (global_step / warmup_steps)
                    # 具体实现参考[API](fluid.layers.linear_lr_warmup)
  - !LinearWarmup   #学习率从非常小的数值线性增加到预设值之后,然后再线性减小。
    start_factor: 0.#初始值
    steps: 4000     #线性增长步长

OptimizerBuilder:  #构建优化器
  optimizer:       #优化器
    momentum: 0.9  #动量系数
    type: Momentum #类型
  regularizer:     #正则初始化
    factor: 0.0005 #正则系数
    type: L2       #L2正则

该文件为模型的一些优化参数设置。

_base_/datasets/coco.yml解读

metric: COCO      # 验证模型的评测标准,可以选择COCO或者VOC
                  # 用于训练或验证的数据集的类别数目,注意这里不含背景类
                  # RCNN系列中包含背景类,即81=80 + 1(背景类)
num_classes: 80   #类别数量



TrainDataset:                             #训练数据
  !COCODataSet                            #COCO数据集
    image_dir: train2017                  # 图片文件夹相对路径,路径是相对于dataset_dir,图像路径= dataset_dir + image_dir + image_name
    anno_path: annotations/instances_train2017.json # anno_path,路径是相对于dataset_dir
    dataset_dir: dataset/coco             # 数据集相对路径,路径是相对于PaddleDetection

EvalDataset:                             #验证数据
  !COCODataSet                           #COCO数据集
    image_dir: val2017                   #图片文件夹相对路径,路径是相对于dataset_dir,图像路径= dataset_dir + image_dir + image_name
    anno_path: annotations/instances_val2017.json  #标签目录,路径是相对于dataset_dir
    dataset_dir: dataset/coco            #数据集相对路径,路径是相对于PaddleDetection

TestDataset:                             #测试数据
  !ImageFolder                           
    anno_path: annotations/instances_val2017.json  #标签目录,路径是相对于dataset_dir

_base_/readers/yolov3_reader.yml解读

worker_num: 2  #数据读取线程数
TrainReader:  # 训练过程中模型的输入设置
  inputs_def:
    fields: ['image', 'gt_bbox', 'gt_class', 'gt_score', 'im_shape', 'scale_factor']    # 包括图片,图片长宽高等基本信息,图片id,标记的目标框,类别等信息
    num_max_boxes: 50    # num_max_boxes,每个样本的groud truth的最多保留个数,若不够用0填充。
  sample_transforms:   #单张图片数据前处理,数据增强,下面是各种数据增强方法,放入列表中
    - DecodeOp: {}
    - MixupOp: {alpha: 1.5, beta: 1.5}
    - RandomDistortOp: {}
    - RandomExpandOp: {fill_value: [123.675, 116.28, 103.53]}
    - RandomCropOp: {}
    - RandomFlipOp: {}
  batch_transforms:    #数据批处理
    # 多尺度训练时,从list中随机选择一个尺寸,对一个batch数据同时同时resize
    - BatchRandomResizeOp: {target_size: [320, 352, 384, 416, 448, 480, 512, 544, 576, 608], random_size: True, random_interp: True, keep_ratio: False}
    - NormalizeBoxOp: {}
    - PadBoxOp: {num_max_boxes: 50}
    - BboxXYXY2XYWHOp: {}
    - NormalizeImageOp: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}
    - PermuteOp: {}
    - Gt2YoloTargetOp: {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: 8    # 1个GPU的batch size,默认为1。需要注意:每个iter迭代会运行batch_size * device_num张图片
  shuffle: true    # 是否shuffle
  drop_last: true  # 注意,在某些情况下,drop_last=false时训练过程中可能会出错,建议训练时都设置为true
  mixup_epoch: 250     # mixup -1表示不做Mixup数据增强。注意,这里是epoch为单位


EvalReader:  #验证数据读取
  inputs_def:
    fields: ['image', 'im_shape', 'scale_factor', 'im_id']  #输入数据定义
    num_max_boxes: 50
  sample_transforms:#数据前处理
    - DecodeOp: {}
    - ResizeOp: {target_size: [608, 608], keep_ratio: False, interp: 2}
    - NormalizeImageOp: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}
    - PadBoxOp: {num_max_boxes: 50}
    - PermuteOp: {}
  batch_size: 1
  drop_empty: false

TestReader:   #测试数据读取,有些前处理需要保持一致
  inputs_def:
    image_shape: [3, 608, 608]                               #输入图片大小
    fields: ['image', 'im_shape', 'scale_factor', 'im_id']   #输入数据定义
  sample_transforms: #数据前处理
    - DecodeOp: {}
    - ResizeOp: {target_size: [608, 608], keep_ratio: False, interp: 2}
    - NormalizeImageOp: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}
    - PermuteOp: {}
  batch_size: 1

 /_base_/runtime.yml解读

use_gpu: true     # 是否使用GPU加速
log_iter: 50      # 默认打印log的间隔
save_dir: output  # 训练权重的保存路径
snapshot_epoch: 2 # 模型保存间隔,如果训练时eval设置为True,会在保存后进行验证

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值