faster rcnn中这三层是单独生成的层,也是复现最复杂的层
anchor_target_layer作用:从众多的anchor中选取出正负样本供rpn网络学习(实际上就是把anchor和gt进行配对,配对后将这一对送给loss进行训练).
注意的点:从众多的anchor中随机选取128个正样本(iou > 0.5),128个负样本( 0 < iou < 0.4).如果正样本个数不够,就用负样本填充满256.这个地方不会用nms过滤,也不会选取score靠前的多少个anchor.自己注意正负样本的定义!
rpn_proposal_layer作用:这一层的输入是所有的anchor生成的所有的proposal,数量巨大,所以先排序,选rpn_pre_nms_top_n个proposal,然后再用nms过滤一次,再从剩下的里面选rpn_post_nms_top_n个proposal.说白了就是一个减少proposal个数,并增加proposal质量的层.最后给proposal_target_layer层2000个proposal
proposal_target_layer作用:这层接到rpn_proposal_layer给的proposal,主要完成proposal跟gt的配对,然后传给loss进行学习
注意的点:2000个proposal只选取128个roi,其中1/4为正样本,即32个为正样本;3/4作为负样本,即96个为负样本.如果正样本不够32,就拿负样本补128个roi.自己注意正负样本的定义!
实际上只有rpn_proposal_layer才是按分数取的,anchor_target_layer和proposal_target_layer很相似,都在做与gt的匹配以供训练
nms在训练中只用一次,即在rpn_proposal_layer对proposal进行过滤
在测试的时候用两次一次在rpn_proposal_layer,一次在出来的结果后对所有的输出结果进行nms一次