概述
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,会在保存后进行验证
最后
以上就是温暖小懒猪为你收集整理的PaddleDetection-YOLOv3模型配置文件解读的全部内容,希望文章能够帮你解决PaddleDetection-YOLOv3模型配置文件解读所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复