1. 程式人生 > >目標檢測框架py-faster-rcnn修改anchor_box

目標檢測框架py-faster-rcnn修改anchor_box

算法 框架 ams const fas nbsp 這一 res weight

眾所周知,anchor_box控制了回歸框的大小,我們有時候檢測的是大物體或小物體時,需要調整回歸框的大小的時候,得改一下anchor_box。
基於rgb公開的py-faster-rcnn修改anchor_box的步驟有一下幾步:
1、修改py-faster-rcnn-my/lib/rpn下的三個文件:
1)generate_anchors.py。將以下兩行修改成你想要的模樣,然後執行這個文件,記下
執行後得到的結果的len。記anchor_box的個數。默認設置得到的是9個。因為是3個scale,3個ratios,從而得到的anchor_box的尺寸一共9種。
#def generate_anchors(base_size=6, ratios=[0.5, 1, 2],
# scales=2**np.arange(3, 6)):

2)修改anchor_target_layer.py中的這一行:
anchor_scales = layer_params.get(‘scales‘, (8, 16, 32))
這個(8,16,32)是根據1)中scales生成的,2**np.arange(3, 6)即2的3 4 5次方,
3)修改proposal_layer.py中的這一行:
anchor_scales = layer_params.get(‘scales‘, (8, 16, 32))
這個與2)類似。

2、修改train.prototxt和test.prototxt。這兩個文件的修改方法類似,我們就寫其中一個:

layer {
name: "rpn_cls_score"
type: "Convolution"
bottom: "rpn/output"
top: "rpn_cls_score"
param { lr_mult: 1.0 }
param { lr_mult: 2.0 }
convolution_param {
#num_output: 18 # 2(bg/fg) * 9(anchors)
#根據你的anchor_box的個數修改。如果你第一步得到的尺寸是8個,那麽這裏就是16
kernel_size: 1 pad: 0 stride: 1
weight_filler { type: "gaussian" std: 0.01 }
bias_filler { type: "constant" value: 0 }
}
}

layer {
name: "rpn_bbox_pred"
type: "Convolution"
bottom: "rpn/output"
top: "rpn_bbox_pred"
param { lr_mult: 1.0 }
param { lr_mult: 2.0 }
convolution_param {
#num_output: 36 # 4 * 9(anchors)
#同上,修改為anchors的尺寸個數的4倍。
kernel_size: 1 pad: 0 stride: 1
weight_filler { type: "gaussian" std: 0.01 }
bias_filler { type: "constant" value: 0 }
}
}
layer {
name: ‘rpn_cls_prob_reshape‘
type: ‘Reshape‘
bottom: ‘rpn_cls_prob‘
top: ‘rpn_cls_prob_reshape‘
#reshape_param { shape { dim: 0 dim: 18 dim: -1 dim: 0 } }
#修改dim的第二個為 2×anchor_box的個數

}

修改好後,開訓,應該不會報錯。記得要清楚上次訓練是保存的一些cache。
如果報錯了,請留言與我聯系。

這個只是一些比較機械化的總結,希望大家通過這個為切入點,不斷捋熟源碼。才能隨心所欲的實現自己的算法。

目標檢測框架py-faster-rcnn修改anchor_box