这一节讲述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。