PaddleDetection-MaskRcnn配置文件解析

2021SC@SDUSC

本周分析PaddleDetection中的MaskRcnn配置文件。

config/mask_rcnn_r50_fpn_1x_coco.yml 

# 全局配置
# 拆分成了几个文件:模型、优化器、数据、数据读取、运行时的配置
_BASE_: [
  './_base_/models/mask_rcnn_r50_fpn.yml',  #models配置
  './_base_/optimizers/rcnn_1x.yml',        #optimizers配置
  './_base_/datasets/coco_instance.yml',    #datasets配置
  './_base_/readers/mask_fpn_reader.yml',   #readers配置
  './_base_/runtime.yml',                   #runtime配置
]

configs/_base_/models/mask_rcnn_r50_fpn.yml

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


# Model Achitecture
# MaskRCNNYOLOV3结构,包括了以下主要组
MaskRCNN:
  # model anchor info flow
  anchor: Anchor #Anchor类名
  proposal: Proposal #Proposal类名
  mask: Mask #Mask类名
  # model feat info flow
  backbone: ResNet #主干网络类名
  neck: FPN #neck FPN类名
  rpn_head: RPNHead #Head成员类名
  bbox_head: BBoxHead #Head成员类名
  mask_head: MaskHead #Head成员类名
  # post process #后处理类名
  bbox_post_process: BBoxPostProcess #BBox后处理
  mask_post_process: MaskPostProcess #Mask后处理

ResNet:#初始化
  # index 0 stands for res2
  depth: 50 #网络层数
  norm_type: bn #BN类型
  freeze_at: 0 #冻结权重
  return_idx: [0,1,2,3] # 主干网络返回的主要阶段特征用于FPN作进一步的特征融合
  num_stages: 4 #输出层数,指上面的索引个数

FPN: #特征金字塔类名
  in_channels: [256, 512, 1024, 2048] #FPN输入通道数
  out_channel: 256 #FPN输出通道数
  min_level: 0 #从0开始 [0,1,2,3]
  max_level: 4 #到4结束 [0,1,2,3]
  spatial_scale: [0.25, 0.125, 0.0625, 0.03125] #变换尺度

RPNHead: #RPNHead类名
  rpn_feat: #rpn特征
    name: RPNFeat #类名
    feat_in: 256 #输入通道数
    feat_out: 256 #输出通道数
  anchor_per_position: 3 #anchor个数
  rpn_channel: 256 #rpn通道数

Anchor:#锚框
  anchor_generator: #产生锚框
    name: AnchorGeneratorRPN #类名
    aspect_ratios: [0.5, 1.0, 2.0] #锚框比例
    anchor_start_size: 32 #产生锚框尺寸大小
    stride: [4., 4.] #步长
  anchor_target_generator: #目标框
    name: AnchorTargetGeneratorRPN #产生目标框类名
    batch_size_per_im: 256 #输入图片尺寸
    fg_fraction: 0.5 #RPN阈值
    negative_overlap: 0.3 #负例iou置信度
    positive_overlap: 0.7 #正例iou置信度
    straddle_thresh: 0.0  #目标框阈值

Proposal: #目标框
  proposal_generator: #生成目标框
    name: ProposalGenerator #生成目标框类名
    min_size: 0.0 #最小尺寸
    nms_thresh: 0.7 #nms阈值
    train_pre_nms_top_n: 2000 #训练时产生最多框数
    train_post_nms_top_n: 2000 #训练时经后处理后产生最多框数
    infer_pre_nms_top_n: 1000 #推理时产生最多框数
    infer_post_nms_top_n: 1000 #推理时经后处理后产生最多框数
  proposal_target_generator: #目标框后处理
    name: ProposalTargetGenerator #目标框后处理类名
    batch_size_per_im: 512 #图片尺寸
    bbox_reg_weights: [0.1, 0.1, 0.2, 0.2] #bbox权重
    bg_thresh_hi: [0.5,] #最大阈值 在bg_thresh_hi、bg_thresh_lo区间为背景
    bg_thresh_lo: [0.0,] #最小阈值 在bg_thresh_hi、bg_thresh_lo区间为背景
    fg_thresh: [0.5,] #被选正例iou阈值     
    fg_fraction: 0.25 #类别阈值   

BBoxHead: #BBox头
  bbox_feat: #bbox特征
    name: BBoxFeat  #bbox特征类名
    roi_extractor:  #roi提取
      name: RoIAlign #RoIAlign
      resolution: 7 #像素值
      sampling_ratio: 2 #采样率
    head_feat:  #head特征
      name: TwoFCHead  #就是两个全连接类名
      in_dim: 256  #输入维度
      mlp_dim: 1024  #中间维度
  in_feat: 1024  #特征维度

BBoxPostProcess: #BBox后处理
  decode: #解码
    name: RCNNBox  # RCNNBox类名
    num_classes: 81 #物体类别+北京类
    batch_size: 1 #输入batch数
  nms: #非极大值抑制
    name: MultiClassNMS #非极大值抑制类名
    keep_top_k: 100  #最多框数
    score_threshold: 0.05 #置信度阈值
    nms_threshold: 0.5 #iou阈值

Mask:  #掩膜
  mask_target_generator: #产生掩膜
    name: MaskTargetGenerator #产生掩膜类名
    mask_resolution: 28  #像素值

MaskHead: #掩膜头
  mask_feat: #掩膜特征
    name: MaskFeat  #掩膜特征名
    num_convs: 4 #卷积个数
    feat_in: 256 #输入特征维度
    feat_out: 256  #输出特征维度
    mask_roi_extractor: #ROI提取
      name: RoIAlign #RoIAlign
      resolution: 14 #像素值
      sampling_ratio: 2 #采样率
    share_bbox_feat: False #是否贡献bbox特征
  feat_in: 256 #特征维度


MaskPostProcess: #掩膜后处理
  mask_resolution: 28 #掩膜像素值

configs/_base_/optimizers/rcnn_1x.yml

epoch: 12 #训练epoch数

学习率部分详解可参考yolov3中的此部分
LearningRate: #学习率类名
							# 初始学习率, 一般情况下8卡gpu,batch size为2时设置为0.02
                    # 可以根据具体情况,按比例调整
                    # 比如说4卡V100,bs=2时,设置为0.01
  base_lr: 0.01  #学习率
  schedulers:  #实例化优化器策略
  - !PiecewiseDecay  #分段式衰减
    gamma: 0.1 #衰减系数 
    milestones: [8, 11]  #衰减点[列表]
  - !LinearWarmup #学习率从非常小的数值线性增加到预设值之后,然后再线性减小。
    start_factor: 0.3333333333333333 #初始值
    steps: 500 #线性增长步长

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

 configs/_base_/readers/mask_fpn_reader.yml

worker_num: 2   #数据读取线程数
TrainReader: # 训练过程中模型的输入设置
  sample_transforms: #单张图片数据前处理,数据增强,下面是各种数据增强方法,放入列表中
  - DecodeOp: {}
  - RandomFlipImage: {prob: 0.5, is_mask_flip: true}
  - NormalizeImage: {is_channel_first: false, is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
  - ResizeImage: {target_size: 800, max_size: 1333, interp: 1, use_cv2: true}
  - Permute: {to_bgr: false, channel_first: true}
  batch_transforms:#数据批处理
  - PadBatch: {pad_to_stride: 32, use_padded_im_info: false, pad_gt: true}
  batch_size: 1 # 1个GPU的batch size,默认为1。需要注意:每个iter迭代会运行batch_size * device_num张图片
  shuffle: true  #数据是否随机
  drop_last: true #是否丢弃最后与设置维度不匹配的数据 # 注意,在某些情况下,drop_last=false时训练过程中可能会出错,建议训练时都设置为true


EvalReader: #验证数据读取
  sample_transforms: #单张图片数据前处理,数据增强,下面是各种数据增强方法,放入列表中
  - DecodeOp: {}
  - NormalizeImageOp: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
  - ResizeOp: {interp: 1, target_size: [800, 1333], keep_ratio: True}
  - PermuteOp: {}
  batch_transforms: #数据批处理
  - PadBatchOp: {pad_to_stride: 32, pad_gt: false}
  batch_size: 1 # 1个GPU的batch size,默认为1。需要注意:每个iter迭代会运行batch_size * device_num张图片
  shuffle: false  #数据是否随机
  drop_last: false # 注意,在某些情况下,drop_last=false时训练过程中可能会出错,建议训练时都设置为true
  drop_empty: false  #丢弃空数据


TestReader: #测试数据读取,有些前处理需要保持一致
  sample_transforms: #单张图片数据前处理,数据增强,下面是各种数据增强方法,放入列表中
  - DecodeOp: {}
  - NormalizeImageOp: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
  - ResizeOp: {interp: 1, target_size: [800, 1333], keep_ratio: True}
  - PermuteOp: {}
  batch_transforms: #数据批处理
  - PadBatchOp: {pad_to_stride: 32, pad_gt: false}
  batch_size: 1 # 1个GPU的batch size,默认为1。需要注意:每个iter迭代会运行batch_size * device_num张图片
  shuffle: false #数据是否随机
  drop_last: false #是否丢弃最后与设置维度不匹配的数据 # 注意,在某些情况下,drop_last=false时训练过程中可能会出错,建议训练时都设置为true
'''

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值