faster-rcnn 多尺度目標檢測
阿新 • • 發佈:2019-02-19
因為專案需要對小物體進行目標檢測,首先想到了用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/裡面的快取檔案。