- 最近想写的东西有点多,先随便写点吧,也让我屡屡思路——说白了就是太懒
model {
faster_rcnn {
num_classes: 3 //获取要识别的类数
image_resizer {
keep_aspect_ratio_resizer {
min_dimension: 128 //最小的图片像素
max_dimension: 1024 //最大的图片像素
}
}
feature_extractor { // 特征提取的配置
type: "faster_rcnn_resnet101"
first_stage_features_stride: 16 //rpn特征图的输出
}
first_stage_anchor_generator { //构建Anchor
grid_anchor_generator { //构建过程二选一,是使用grid_anchor_generator还是ssd_anchor_generator 使用传入的参数对grid_anchor_generator进行初始化
height_stride: 16 //锚点的高度 default = 16
width_stride: 16 //锚点的高度 default = 16
scales: 0.1
scales: 0.25
scales: 0.5
scales: 0.75
scales: 1.0
scales: 2.0
aspect_ratios: 0.5
aspect_ratios: 1.0
aspect_ratios: 1.5
aspect_ratios: 2.0
}
}
first_stage_box_predictor_conv_hyperparams { //卷积神经网络的参数
op: CONV
regularizer {
l2_regularizer { //选择一种归一化方法
weight: 0.00002
}
}
initializer {
truncated_normal_initializer { //选择一种初始化方法
stddev: 0.00999999977648
}
}
}
first_stage_nms_score_threshold: 0.0 //用于第一层的nms的值 default=0.0
first_stage_nms_iou_threshold: 0.66 //第一层中重叠率的阈值 default=0.7
first_stage_max_proposals: 100 //多少个rpn提出的nms进入第二阶段 default=300
first_stage_localization_loss_weight: 2.0 //第一阶段的定位的损失权重在反向中的比例 default=1.0
first_stage_objectness_loss_weight: 1.0 第一阶段总物品判断的损失比例 default=1.0
initial_crop_size: 14 //ROI 池化层上切取的输出的大小
maxpool_kernel_size: 2 //在ROI pooling上切取的feature map上进行池化是的核的大小
maxpool_stride: 2 // 上面的有了核的大小,现在是步长
second_stage_box_predictor { //第二个识别阶段的参数
mask_rcnn_box_predictor {
fc_hyperparams {
op: FC
regularizer {
l2_regularizer {
weight: 0.0000012
}
}
initializer { //初始化权重的方式
variance_scaling_initializer { //选择一种初始化方法
factor: 1.0
uniform: true
mode: FAN_AVG
}
}
}
use_dropout: true
dropout_keep_probability: 1.0
}
}
second_stage_post_processing { //在第二阶段的box的预测上的预处理
batch_non_max_suppression {
score_threshold: 0.300000011921 //前景box的最低阈值 default = 0.0
iou_threshold: 0.600000023842 //进行融合是的IOU阈值 default = 0.6
max_detections_per_class: 40 //每一个类别最多返回多少个检测 default = 100
max_total_detections: 40 // 总共最多返回多少个 default = 100
}
score_converter: SOFTMAX // Score converter to use
}
second_stage_localization_loss_weight: 2.0 //第二阶段定位的损失比例
second_stage_classification_loss_weight: 1.0 //第二阶段的识别的损失比例
}
}
train_config {
batch_size: 1
data_augmentation_options { // 数据扩容的选项
random_horizontal_flip {
}
}
data_augmentation_options {
random_crop_image {
}
}
data_augmentation_options {
random_adjust_brightness {
}
}
optimizer {
momentum_optimizer {
learning_rate {
manual_step_learning_rate {
initial_learning_rate: 0.000300000014249
schedule {
step: 1
learning_rate: 0.000300000014249
}
schedule {
step: 900000
learning_rate: 2.99999992421e-05
}
schedule {
step: 1200000
learning_rate: 3.00000010611e-06
}
}
}
momentum_optimizer_value: 0.8666625
}
use_moving_average: false // default=false
}
gradient_clipping_by_norm: 10.0 如果大于0,在将梯度在这个值进行截断
fine_tune_checkpoint: "/********/model.ckpt"
// 如果是从一个检测(detection)模型进行恢复,则分类
// 数量必须相等,如果不定则检查点要从一个识别(classification)模型恢复
from_detection_checkpoint: true //default=false
}
num_classes: 该参数为必调项,与该模型设计需要检测的缺陷种类数量相同。
image_resizer: 该参数为原始图像的缩放尺寸指示,通常有两种配置方式:
keep_aspect_ratio_resizer:输入图像的大小是可变的,但是需要保持长宽比,
它有两个子参数:min_dimension和max_dimension,表示最小和最大维度,例如:
min_dimension :800
max_dimension:1000
image_resizer配置-固定长宽比
其含义是对于任一个图片,最短的边最小是800,最长的边最大是1024。举例:假设输入的图像尺寸是100 * 100,则会调整到800 * 800;输入为2000 * 2000,会调整为1024 * 1024,输入为900 * 1000,则首先会将短边调整到800,然后长边按比例调整到(800 / 900) * 1000。
feature_extractor:表示用于特征提取的backbone网络的选型
First_stage_features_stride表示第一阶段特征提取步长,根据经验,训练时可以保持 16 不变,如果待检测目标比较密集且较小,则可以尝试将其修改为8,以降低特征提取步长,提高特征提取密度,从而提升模型效果。修改为4的话会导致及结算量巨大,而且容易导致训练的过度抖动,难以拟合,因此建议最小改成8。
first_stage_anchor_generator:用于指示在RPN网络在feature map上生成锚点的策略。
对RPN的性能有较大影响,因为它直接影响着提取出来的候选框区域的数量、大小、密度等因素。如果生成的proposals太少,或者尺度不合理,则可能导致对于大小目标检测的失衡,或者对部分目标的漏检;而设置的太多,则又会增加训练难度,加大运算量,同时使得RPN网络拟合困难。因此,需要根据具体情况具体分析后,结合经验值进行合理的设定。
first_stage_anchor_generator {
grid_anchor_generator {
height_stride: 16
width_stride: 16
scales: 0.1
scales: 0.25
scales: 0.5
scales: 1.0
scales: 2.0
aspect_ratios: 0.5
aspect_ratios: 1.0
aspect_ratios: 1.5
aspect_ratios: 2.0
}
}
相邻的Anchor中心点横向间隔为16,纵向间隔也是16。
对于每一个anchor中心点,以它为中心围绕其生成20个anchor。这20个anchor的尺寸分别为0.1, 0.25,0.5,1.0,2.0;长宽比分别为0.5,1.0,1.5,2.0。也就是说,分别会以中心点坐标为中心,生成长0.1,宽0.10.5;长0.10.5,宽0.1 … … 的共20个anchor,所有的长宽分别是[scales] x [aspect_ratios]。
在模型训练时,可通过加密scales以及aspec_ratios来对RPN网络产生影响,但是要注意把握计算量、训练拟合难度、数据特征等因素质检的权衡,否则很容易导致模型的RPN网络不收敛,从而使得训练一直震荡。