如何开始训练
简单的训练步骤已经在上一篇第一篇技术博客——PaddleDetection训练自己的数据集并部署到边缘计算设备全过程 - 掘金 (juejin.cn),已经足够让你从零开始训练自己的demo了,下面是进阶版。
Paddledetection结构导读
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.py)
yolo_head: YOLOv3Head # yolo_head函数:(存放地址:PaddleDetection/ppdet/modeling/anchor_heads/yolo_head.py)
ResNet: # 主干特征提取网络的配置【不建议修改!】
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: