1. 程式人生 > >faster-rcnn 多尺度目標檢測

faster-rcnn 多尺度目標檢測

因為專案需要對小物體進行目標檢測,首先想到了用densebox訓練faster-rcnn

faster-rcnn論文給出的anchor是9個 ,由3(scale:128*128,256*256,512*512)* 3(ratio:1:1,1:2, 2:1)得來

新增一個64*64的scale,和 1.5:1的ratio, anchor數目變為16.

具體為修改lib/rpn/generate_anchors.py:

def generate_anchors(base_size=16, ratios=[0.5, 1,1.5, 2],  #modified
                     scales=2**np.arange(2, 6)):            #modified   
修改lib/rpn/anchor_target_layer.py:
    def setup(self, bottom, top):
        layer_params = yaml.load(self.param_str_)
        anchor_scales = layer_params.get('scales', (4,8, 16, 32))   #modified
        self._anchors = generate_anchors(scales=np.array(anchor_scales))
        self._num_anchors = self._anchors.shape[0]
        self._feat_stride = layer_params['feat_stride']

修改lib/rpn/proposal_layer.py:

def setup(self, bottom, top):
        # parse the layer parameter string, which must be valid YAML
        layer_params = yaml.load(self.param_str_)

        self._feat_stride = layer_params['feat_stride']
        anchor_scales = layer_params.get('scales', (4,8, 16, 32))  #modified
        self._anchors = generate_anchors(scales=np.array(anchor_scales))
        self._num_anchors = self._anchors.shape[0]


最後修改model的train.prototxt,將rpn_cls_score 和 rpn_bbox_pred層裡面的num_output做相應修改。

這樣就可以訓練了,訓練之前刪掉data/cache/裡面的快取檔案