參考:
https://blog.csdn.net/wubingwei12/article/details/88184140
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網絡擬合困難。因此,需要根據具體情況具體分析後,結合經驗值進行合理的設定。
在模型訓練時,可通過加密scales以及aspec_ratios來對RPN網絡產生影響,但是要注意把握計算量、訓練擬合難度、數據特徵等因素質檢的權衡,否則很容易導致模型的RPN網絡不收斂,從而使得訓練一直震盪。