目标检测实战教程03-PaddleDetection配置文件详细介绍

paddledetection配置文件详细介绍

数据集配置文件

# 数据评估类型
metric: COCO
# 类别信息,不包含背景类
num_classes: 1

# 训练集
TrainDataset:
  !COCODataSet
    # 数据图像路径
    image_dir: /home/aistudio/data/JPEGImages
    # 标注文件位置
    anno_path: /home/aistudio/data/bigtrain.json
    dataset_dir: /home/aistudio/data
    data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']

EvalDataset:
  !COCODataSet
    image_dir: /home/aistudio/data/JPEGImages
    anno_path: /home/aistudio/data/bigtest.json
    dataset_dir: /home/aistudio/data

TestDataset:
  !ImageFolder
    anno_path: /home/aistudio/data/bigtest.json

优化器配置文件(训练轮数、学习率与策略、优化器)

# 总训练轮数
epoch: 12

# 学习率设置
LearningRate:
  # 默认为8卡训学习率
  base_lr: 0.00125
  # 学习率调整策略
  schedulers:
  - !PiecewiseDecay
    gamma: 0.1
    # 学习率变化位置(轮数)
    milestones: [8, 11]
  - !LinearWarmup
    start_factor: 0.1
    steps: 1000

# 优化器
OptimizerBuilder:
  # 优化器
  optimizer:
    momentum: 0.9
    type: Momentum
  # 正则化
  regularizer:
    factor: 0.0001
    type: L2

主要包括训练轮数、学习率的策略与大小、优化器配置等内容。

数据读取配置文件

# 每张GPU reader进程个数
worker_num: 2
# 训练数据
TrainReader:
  # 训练数据transforms
  sample_transforms:
  - Decode: {}
  - RandomResize: {target_size: [[640, 1333], [672, 1333], [704, 1333], [736, 1333], [768, 1333], [800, 1333]], interp: 2, keep_ratio: True}
  - RandomFlip: {prob: 0.5}
  - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
  - Permute: {}
  batch_transforms:
  # 由于模型存在FPN结构,输入图片需要padding为32的倍数
  - PadBatch: {pad_to_stride: 32}
  # 训练时batch_size
  batch_size: 1
  # 读取数据是是否乱序
  shuffle: true
  # 是否丢弃最后不能完整组成batch的数据
  drop_last: true
  # 表示reader是否对gt进行组batch的操作,在rcnn系列算法中设置为false,得到的gt格式为list[Tensor]
  collate_batch: false

# 评估数据
EvalReader:
  # 评估数据transforms
  sample_transforms:
  - Decode: {}
  - Resize: {interp: 2, target_size: [800, 1333], keep_ratio: True}
  - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
  - Permute: {}
  batch_transforms:
  # 由于模型存在FPN结构,输入图片需要padding为32的倍数
  - PadBatch: {pad_to_stride: 32}
  # 评估时batch_size
  batch_size: 1
  # 读取数据是是否乱序
  shuffle: false
  # 是否丢弃最后不能完整组成batch的数据
  drop_last: false
  # 是否丢弃没有标注的数据
  drop_empty: false

# 测试数据
TestReader:
  # 测试数据transforms
  sample_transforms:
  - Decode: {}
  - Resize: {interp: 2, target_size: [800, 1333], keep_ratio: True}
  - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
  - Permute: {}
  batch_transforms:
  # 由于模型存在FPN结构,输入图片需要padding为32的倍数
  - PadBatch: {pad_to_stride: 32}
  # 测试时batch_size
  batch_size: 1
  # 读取数据是是否乱序
  shuffle: false
  # 是否丢弃最后不能完整组成batch的数据
  drop_last: false

此处涉及到数据增强模块,单独介绍一下。

在线增强不会成倍增加数据集的大小,而是在训练的时候进行概率变换,只要训练的epoch数足够多,就可以实现与离线增强同样的效果。而离线数据增强由于成倍扩充数据集,所以不适合数据规模较大的情况。

常用的数据增强方法有颜色亮度对比度扰动、resize、裁剪、填充、翻转等。

数据增强具体实现的源码位置PaddleDetection/ppdet/data/transform/operators.py

可以通过一个选项来将输入模型训练的图像保存到文件夹中查看,需要在配置文件中增加

- DebugVisibleImage: {}

除了单样本数据增强,还有一些多样本的数据增强,此处介绍mixup的使用方法,除了设置mixup的参数外,还需要设置这一策略的训练轮数。如果为-1表示不使用,大于训练epoch则为全程使用,小于训练epoch则为训练到指定轮数后停用这一策略。下面是ppyolo的数据读取配置文件,可以看到mixup的使用方法。

# 每张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

模型配置文件

# 模型结构类型
architecture: FasterRCNN
# 预训练模型地址
pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_cos_pretrained.pdparams

# FasterRCNN
FasterRCNN:
  # backbone
  backbone: ResNet
  # neck
  neck: FPN
  # rpn_head
  rpn_head: RPNHead
  # bbox_head
  bbox_head: BBoxHead
  # post process
  bbox_post_process: BBoxPostProcess


# backbone
ResNet:
  # index 0 stands for res2
  depth: 50
  # norm_type,可设置参数:bn 或 sync_bn
  norm_type: bn
  # freeze_at index, 0 represent res2
  freeze_at: 0
  # return_idx
  return_idx: [0,1,2,3]
  # num_stages
  num_stages: 4

# FPN
FPN:
  # channel of FPN
  out_channel: 256

# RPNHead
RPNHead:
  # anchor generator
  anchor_generator:
    aspect_ratios: [0.5, 1.0, 2.0]
    anchor_sizes: [[32], [64], [128], [256], [512]]
    strides: [4, 8, 16, 32, 64]
  # rpn_target_assign
  rpn_target_assign:
    batch_size_per_im: 256
    fg_fraction: 0.5
    negative_overlap: 0.3
    positive_overlap: 0.7
    use_random: True
  # 训练时生成proposal的参数
  train_proposal:
    min_size: 0.0
    nms_thresh: 0.7
    pre_nms_top_n: 2000
    post_nms_top_n: 1000
    topk_after_collect: True
  # 评估时生成proposal的参数
  test_proposal:
    min_size: 0.0
    nms_thresh: 0.7
    pre_nms_top_n: 1000
    post_nms_top_n: 1000

# BBoxHead
BBoxHead:
  # TwoFCHead as BBoxHead
  head: TwoFCHead
  # roi align
  roi_extractor:
    resolution: 7
    sampling_ratio: 0
    aligned: True
  # bbox_assigner
  bbox_assigner: BBoxAssigner

# BBoxAssigner
BBoxAssigner:
  # batch_size_per_im
  batch_size_per_im: 512
  # 背景阈值
  bg_thresh: 0.5
  # 前景阈值
  fg_thresh: 0.5
  # 前景比例
  fg_fraction: 0.25
  # 是否随机采样
  use_random: True

# TwoFCHead
TwoFCHead:
  # TwoFCHead特征维度
  out_channel: 1024


# BBoxPostProcess
BBoxPostProcess:
  # 解码
  decode: RCNNBox
  # nms
  nms:
    # 使用MultiClassNMS
    name: MultiClassNMS
    keep_top_k: 100
    score_threshold: 0.05
    nms_threshold: 0.5

运行配置文件

# 是否使用gpu
use_gpu: true
# 日志打印间隔
log_iter: 20
# save_dir
save_dir: output
# 模型保存间隔轮数
snapshot_epoch: 1

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年5月18日
下一篇 2022年5月18日

相关推荐