当前位置: 代码迷 >> 综合 >> endernewton/tf-faster-rcnn:RPN模块理解记录self._proposal_layer()与self._proposal_top_layer()函数区别
  详细解决方案

endernewton/tf-faster-rcnn:RPN模块理解记录self._proposal_layer()与self._proposal_top_layer()函数区别

热度:55   发布时间:2023-12-14 00:22:59.0

1.self._proposal_layer():
主要功能:用于筛选网络计算出来的候选框,一般网络计算出来的候选框的数目为W x H x num_anchors,W、H代表输入RPN网络特征层的宽、高,num_anchors代表每个特征点的锚框数量。self._proposal_layer()函数中使用非极大值抑制的方法来对网络计算出来的候选框进行筛选。非极大值抑制对应函数为:tf.image.non_max_suppression()
2.self._proposal_top_layer():
主要功能:与self._proposal_layer()的功能一样,此函数对于框的筛选方法是:直接按网络计算候选框的前后景分类得分从高到底排序,选取前N个框作为最终的候选框输入分类网络。对于函数为:tf.nn.top_k()
3.为什么要对网络计算出来的候选框进行再一次筛选?
因为直接通过网络计算出来的W x H x num_anchors个候选框,很多候选框都是overlapping,因此需要将重复的框剔除,以及还有很多候选框通过网络计算出来的得分就已经可以确认其区域内是背景,像这种框也应该被丢弃,通过这样的方法筛选之后,最终还会有百级别的候选框会送入分类网络。

_region_proposal 部分(RPN)

  1. _region_proposal 的下面有三个主要的方法:
    _proposal_layer
    _anchor_target_layer
    _proposal_target_layer
    第一个主要生成推荐区域proposal和前景背景得分 rpn_scores, 第二个主要生成第一次anchor的label,rpn_bbox_targets,以及前景背景的label,rpn_labels。第三个生成256个rois的label, 以及这些rois的label,bbox_targets;有点绕,我们仔细梳理下:

  2. _anchor_target_layer 主要功能是计算获得属于rpn网络的label。
    通过对所有的anchor与所有的GT计算IOU,由此得到 rpn_labels, rpn_bbox_targets, rpn_bbox_inside_weights, rpn_bbox_outside_weights这4个比较重要的第一次目标label,通过消除在图像外部的 anchor,计算IOU >=0.7 为正样本,IOU <0.3为负样本,得到在理想情况下应该各自一半的256个正负样本(实际上正样本大多只有10-100个之间,相对负样本偏少)。

  3. _proposal_layer 有二个主要功能。 1使用经过rpn网络层后生成的rpn_box_prob把anchor位置进行第一次修正. 2按照得分排序,取前12000个anchor,再nms,取前面2000个(但是这个数字在test的时候就变成了6000和300,这就是最后结果300个框的来源)。最终返回
    proposals , scores,也就是rois, roi_scores。

  4. _proposal_target_layer主要功能是计算获得属于最后的分类网络的label。
    使用上一步得到的 proposals , scores,生成最后一步需要的labels, bbox_targets, bbox_inside_weights, bbox_outside_weights。

    因为之前的anchor位置已经修正过了,所以这里又计算了一次经过 proposal_layer 修正后的的box与 GT的IOU来得到label, 但是阈值不一样了,变成了大于等于0.5为1,小于为0,并且这里得到的正样本很少,通常只有2-20个,甚至有0个,并且正样本最多为64个,负样本则有比较多个;相应的也重新计算了一次bbox_targets。

  相关解决方案