這一節講述proposal層,和這一層有關的結構圖如下:
proposal層的prototxt定義如下:
layer { name: 'proposal' type: 'Python' bottom: 'rpn_cls_prob_reshape' bottom: 'rpn_bbox_pred' bottom: 'im_info' top: 'rpn_rois' # top: 'rpn_scores' python_param { module: 'rpn.proposal_layer' layer: 'ProposalLayer' param_str: "'feat_stride': 16" } }
這一層的功能是對卷積網絡中RPN輸出的bbox_deltas, scores做后處理,主要步驟如下:
1、同上節中的第一步,生成anchor;
2、將anchor和RPN網絡輸出的bbox_deltas疊加,得到proposals,剔除超出圖像區域的proposal,並刪除在原圖尺度(不是輸入網絡的尺度)上長或寬小於16的proposal;
3、將proposals按分數從大到小排序,並取前12000個做NMS,overlap閾值為0.7;
4、NMS之后,proposals仍然是按分數從大到小排序的,取前2000個(如果NMS之后proposal個數小於2000,則取全部)proposals;
5、給proposals(n x 4)添加一列,表示batch_inds(都為0),添加在第一列,最后得到的proposals的shape為n x 5。
這一層的代碼鏈接見這里,此外涉及到的其他函數有bbox_transform_inv,clip_boxes,nms。