1、anchor_target_layer.py
首先产生K*A个anchor,K=w*h,w和h分别是map图的宽和高
然后去掉超出边界的anchor,剩下N个
利用剩下的N个anchor和N1个gt-box计算overlap,维度是N*N1
接下来定义正负样本,正样本为1,负样本为0,其余为-1,不参与反传,通常RPN的batch为256,选择cfg.TRAIN.RPN_FG_FRACTION * cfg.TRAIN.RPN_BATCHSIZE为最终正样本数量,如果已有的正样本超过这个数,删掉多余的正样本,cfg.TRAIN.RPN_BATCHSIZE - np.sum(labels == 1),负样本数量这个样子来获得,一旦已有的负样本大于这个数,也是删掉多余的负样本,置位-1
最终返回全部anchor,只不过对应的标签大部分设置为-1,不参与最后的计算和反传了
2、proposal layer
利用已经生成的2*A张map图,和bbox预测来的坐标位移来生成proposal
对于每一个anchor,利用bbox的位移生成proposal
然后将超出边界的proposal减掉超出部分
根据每个anchor的得分,排序,选取topN个,经验是6000
然后nms之后选取topN个,经验是300,返回这300个proposal的坐标,并且在加上一个维度,设置为0,最后返回300*5个proposal
3、proposal_target_layer
首先利用传进来的proposal,决定哪些为正样本,哪些是负样本,最后剩下N张,返回N*1的label,N*5的rois,N*(4*cls)的bbox_targets,N*(4*cls)的bbox_inside_weights