PaddlePaddle 提供了很多常见的深度学习模型,这里对 Cascade R-CNN + ResNeXt 101 + FPN
配置文档进行分析,方便大家进行调参和修改,文档名称为: cascade_rcnn_dcn_x101_vd_64x4d_fpn_1x.yml
,欢迎大家补充和指正。
# 模型检测名称
architecture: CascadeRCNN
# 最大迭代数,每一个 iter 会运行 batch_size * device_num 张图片,batch_size 在下面中 TrainReader.batch_size 设置
max_iters: 90000
# 每隔多少次迭代保存一次模型
snapshot_iter: 10000
# 根据硬件选择是否使用 GPU
use_gpu: true
# log 平滑参数
log_iter: 20
# 模型保存文件夹
save_dir: output
# 预训练模型权重
pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/ResNeXt101_vd_64x4d_pretrained.tar
# 训练结果权重保存路径
weights: output/cascade_rcnn_dcn_x101_vd_64x4d_fpn_1x/model_final
# mAP 的评估方式,这里可以选择 COCO 和 VOC 或 WIDERFACE, 其中 VOC 有 11point 和 intergral 两种评估方法
metric: COCO
# 总分类数目加一
num_classes: 81
# CascadeRCNN 检测模型的结构
CascadeRCNN:
# 提取特征的骨干结构
backbone: ResNeXt
# 采用的多尺度金字塔结构
fpn: FPN
# 区域生成网络模块,从输入图像中生成正负类的候选框
rpn_head: FPNRPNHead
# 对由 RPN 产生的 ROI 进行分类和微调,判断它是否包含目标,并修正框的位置和坐标
roi_extractor: FPNRoIAlign
# 边界框模块
bbox_head: CascadeBBoxHead
# 对 ROI 得到的正负样本进行标签分配
bbox_assigner: CascadeBBoxAssigner
# 检测模型骨干
ResNeXt:
# 归一化方法采用 Batch Normalization,对 N(样本量),H(特征图高度),W (特征图宽度)进行归一化,保留通道 C(通道数)的维度
norm_type: bn
# 网络深度
depth: 101
# 卷积核数目
feature_maps: [2, 3, 4, 5]
#
freeze_at: 2
#
group_width: 4
#
groups: 64
#
variant: d
#
dcn_v2_stages: [3, 4, 5]
# 多尺度金字塔结构
FPN:
# 最小层数
min_level: 2
# 最大层数
max_level: 6
# 通道数目
num_chan: 256
#
spatial_scale: [0.03125, 0.0625, 0.125, 0.25]
# 检测模型的 FPNRPNHead
FPNRPNHead:
# 根据特征图尺寸,在特征图每个位置生成 N 个大小比和长宽比都不同的 anchor
anchor_generator:
# 生成的 anchor 大小,以正方形边长表示面积
anchor_sizes: [32, 64, 128, 256, 512]
# 生成 anchor 的高宽比
aspect_ratios: [0.5, 1.0, 2.0]
# anchor 在宽度和高度方向上的补偿
stride: [16.0, 16.0]
# 在框回归 delta 中使用
variance: [1.0, 1.0, 1.0, 1.0]
# 候选框起始大小
anchor_start_size: 32
# 最小层数
min_level: 2
# 最大层数
max_level: 6
# 通道数
num_chan: 256
# 为 anchors 分配分类标签和回归标签
rpn_target_assign:
# 每个图像中 RPN 示例总数
rpn_batch_size_per_im: 256
# 标记为前景框的数量占总框数量的比例
rpn_fg_fraction: 0.5
# 和任何真实候选框的 IoU 大于该阈值的被定为正候选框
rpn_positive_overlap: 0.7
# 和任何真实候选框的 IoU 小于该阈值的被定为负候选框
rpn_negative_overlap: 0.3
# 超出图像外部像素数目达到该阈值的 RPN anchors 会被删除
rpn_straddle_thresh: 0.0
# 训练阶段时候选框产生阈值
train_proposal:
# 保留最小尺寸
min_size: 0.0
# nms 阈值
nms_thresh: 0.7
# 第一次分数排序
pre_nms_top_n: 2000
# 第二次分数排序
post_nms_top_n: 2000
# 测试阶段时候选框产生阈值
test_proposal:
# 保留最小尺寸
min_size: 0.0
# nms 阈值
nms_thresh: 0.7
# 第一次分数排序
pre_nms_top_n: 1000
# 第二次分数排序
post_nms_top_n: 1000
# ROI 模型设置
FPNRoIAlign:
#
canconical_level: 4
#
canonical_size: 224
# 最小层数
min_level: 2
# 最大层数
max_level: 5
# 输出的特征图大小
box_resolution: 7
# 乘法性质空间标尺因子,池化时,将 ROI 坐标变换至运算采用的标度
sampling_ratio: 2
# 对 RPN 生成的 ROI 和真实框之间的 IOU 根据阈值进行过滤,保留一定数量的 ROI,再根据背景框标签,对 ROI 进行标签赋值,得到每个 ROI 类别
CascadeBBoxAssigner:
# 每张图片抽出的 ROI 数目
batch_size_per_im: 512
# 框回归权重
bbox_reg_weights: [10, 20, 30]
# 框于真实值的 IOU 最小值
bg_thresh_lo: [0.0, 0.0, 0.0]
# 框于真实值的 IOU 最大值
bg_thresh_hi: [0.5, 0.6, 0.7]
# 单张图中前景框占所有框的比例
fg_thresh: [0.5, 0.6, 0.7]
# 前景重叠阈值,用于筛选前景框
fg_fraction: 0.25
# 检测头网络和预测输出部分
CascadeBBoxHead:
# 级联网络检测头
head: CascadeTwoFCHead
# NMS 参数
nms:
# 基于置信度的阈值过滤检测后,根据置信度保留最大的检测次数
keep_top_k: 100
# 在 NMS 中剔除 IOU 的阈值
nms_threshold: 0.5
# 过滤掉低于该置信度的边框阈值
score_threshold: 0.05
#
CascadeTwoFCHead:
#
mlp_dim: 1024
# 学习率
LearningRate:
# 学习率
base_lr: 0.02
# 学习率规划器
schedulers:
# 学习率衰减策略
- !PiecewiseDecay
gamma: 0.1
milestones: [60000, 80000]
# 训练开始时,学习率调低为 base_lr * start_factor,之后逐步增长到 base_lr
- !LinearWarmup
# 起始学习率系数
start_factor: 0.1
# 增长次数
steps: 1000
#
OptimizerBuilder:
# 默认采用 SGD + Momentum 进行训练
optimizer:
#
momentum: 0.9
#
type: Momentum
# 默认采用 SGD + Momentum 进行训练
regularizer:
#
factor: 0.0001
#
type: L2
#
_READER_: '../faster_fpn_reader.yml'
#
TrainReader:
# 单个 iter 使用数据数量相关参数
batch_size: 2