AItudio平台使用以及Paddleetecion的使用进阶。

374 阅读3分钟

如何开始训练

简单的训练步骤已经在上一篇第一篇技术博客——PaddleDetection训练自己的数据集并部署到边缘计算设备全过程 - 掘金 (juejin.cn),已经足够让你从零开始训练自己的demo了,下面是进阶版。

Paddledetection结构导读

image.png

configs是你的模型选择,你这这里选着你的模型并配置模型文件,这里以yolov3为例为例 cd configs/ssd/ssd—mobileNet_voc.yml

architecture: YOLOv3		# 网络主体
use_gpu: true			# 是否使用GPU训练
max_iters: 80000		# 最大训练batch数
log_smooth_window: 20
save_dir: output
snapshot_iter: 2000		# 每多少个batch进行一次模型存储(如果是在eval模式下会同时保存mAP最优模型)
metric: VOC			# 数据集格式
map_type: 11point		# mAP的评判标准
pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/ResNet34_pretrained.tar		# 预训练模型
weights: output/yolov3_r34_voc/model_final		# 模型权重文件地址(预测的时候的模型文件)
num_classes: 20			# 目标种类数【务必要改!如果背景需要认为是单独的标签则要在目标种类数的基础上加1,与后面的“with_background”同步设置!!!】
use_fine_grained_loss: false	
 
YOLOv3:
  backbone: ResNet		# 主干特征提取网络:(存放地址:PaddleDetection/ppdet/modeling/backbones/resnet.pyyolo_head: YOLOv3Head		# yolo_head函数:(存放地址:PaddleDetection/ppdet/modeling/anchor_heads/yolo_head.pyResNet:				# 主干特征提取网络的配置【不建议修改!】
  norm_type: sync_bn
  freeze_at: 0
  freeze_norm: false
  norm_decay: 0.
  depth: 34
  feature_maps: [3, 4, 5]
 
YOLOv3Head:			# yolo_head的配置【不建议修改!】
  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]]
  norm_decay: 0.
  yolo_loss: YOLOv3Loss
  nms:
    background_label: -1
    keep_top_k: 100
    nms_threshold: 0.45
    nms_top_k: 1000
    normalized: false
    score_threshold: 0.01
 
YOLOv3Loss:			# 损失函数的计算
  # batch_size here is only used for fine grained loss, not used
  # for training batch_size setting, training batch_size setting
  # is in configs/yolov3_reader.yml TrainReader.batch_size, batch
  # size here should be set as same value as TrainReader.batch_size
  batch_size: 8			# batchsize大小【根据自己的需求更改,需要和 'yolov3_reader.yml'中保持一致!】
  ignore_thresh: 0.7		# 忽略iou小于多少的候选框
  label_smooth: false
 
LearningRate:			#【根据自己的需求更改】
  base_lr: 0.001		# 初始学习率【根据自己的需求更改】
  schedulers:
  - !PiecewiseDecay
    gamma: 0.1			# 衰减率
    milestones:			# 里程碑(每到一个里程碑学习率会在原有基础上乘以衰减率gamma)
    - 55000
    - 62000
  - !LinearWarmup		# 学习率预热
    start_factor: 0.		# 起始学习率
    steps: 1000			# 多少个batch后到达base_lr(初始学习率)
 
OptimizerBuilder:		# 优化器配置【不建议修改!】
  optimizer:
    momentum: 0.9
    type: Momentum
  regularizer:
    factor: 0.0005
    type: L2
 
_READER_: 'yolov3_reader.yml'	# 数据读取配置文件【需要到'yolov3_reader.yml'中修改batch_size和bufsize】
TrainReader:			# 训练集信息
  dataset:
    !VOCDataSet
    dataset_dir: dataset/voc	# 数据集存放目录【务必要改!建议使用绝对路径(以"/home/aistudio/"开头)】
    anno_path: trainval.txt	# 索引文件【务必要改!一定要改成相对"dataset_dir"的路径!!!】
    use_default_label: true	# 是否使用默认标签【务必要改!训练自己的数据集一定要改成false!!!】
    with_background: false	# 背景是否算作一个标签【需要与前面的“num_classes”是否加1同步设置!!!】
 
EvalReader:			# 验证集信息
  inputs_def:
    fields: ['image', 'im_size', 'im_id', 'gt_bbox', 'gt_class', 'is_difficult']
    num_max_boxes: 50		# 一幅图上最多有多少个目标
  dataset:
    !VOCDataSet
    dataset_dir: dataset/voc	# 数据集存放目录【务必要改!建议使用绝对路径(以"/home/aistudio/"开头)】
    anno_path: test.txt		# 索引文件【务必要改!一定要改成相对"dataset_dir"的路径!!!】
    use_default_label: true	# 是否使用默认标签【务必要改!训练自己的数据集一定要改成false!!!】
    with_background: false	# 背景是否算作一个标签【需要与前面的“num_classes”是否加1同步设置!!!】
 
TestReader:
  dataset:
    !ImageFolder
    use_default_label: true	# 是否使用默认标签【务必要改!训练自己的数据集一定要改成false!!!】
    with_background: false	# 背景是否算作一个标签【需要与前面的“num_classes”是否加1同步设置!!!】

其他模型的配置文件大同小异,如果只是想要开启训练只需要修改务必修改的部分。 其中最重要的就是路径配置。配置ssd则需要

TrainReader:
  inputs_def:
    image_shape: [3, 300, 300]
    fields: ['image', 'gt_bbox', 'gt_class']
  dataset:
    !VOCDataSet
    anno_path: train.txt             #需要修改
    dataset_dir: /home/aistudio/work #需要修改
    use_default_label: false         #默认为True ,修改为false,下同
  sample_transforms:
  
  EvalReader:
  inputs_def:
    image_shape: [3, 300, 300]
    fields: ['image', 'gt_bbox', 'gt_class', 'im_shape', 'im_id', 'is_difficult']
  dataset:
    !VOCDataSet
    anno_path: val.txt                        #修改
    dataset_dir: /home/aistudio/work          #修改
    use_default_label: false           
  sample_transforms:
  
  TestReader:
  inputs_def:
    image_shape: [3,300,300]
    fields: ['image', 'im_id', 'im_shape']
  dataset:
    !ImageFolder
    anno_path: /home/aistudio/work/label_list.txt    #修改
    use_default_label: false
  sample_transforms: