zoukankan      html  css  js  c++  java
  • faster-rcnn代码阅读-roi-data层

    这一节讲述roi-data层,和这一层有关的结构图如下:

    roi-data层的prototxt定义如下:

    layer {
      name: 'roi-data'
      type: 'Python'
      bottom: 'rpn_rois'
      bottom: 'gt_boxes'
      top: 'rois'
      top: 'labels'
      top: 'bbox_targets'
      top: 'bbox_inside_weights'
      top: 'bbox_outside_weights'
      python_param {
        module: 'rpn.proposal_target_layer'
        layer: 'ProposalTargetLayer'
        param_str: "'num_classes': 2"
      }
    }

    这一层接着上一节的proposal层,主要的操作是对RPN阶段输出的proposal做进一步的筛选,从中选出背景和前景,得到rois,然后计算rois的回归目标。因为第二阶段的rois回归是和类别一一对应的,第二阶段全连接网络预测出的回归目标值bbox_pred的shape为(num_rois, 4*num_classes),所以最后需要将计算出的rois的回归目标值放入与其类别相对应的位置。这一层的详细操作如下:

    1、取gt的x1, y1, x2, y2列,再补个全是0的第一列(表示batch_inds),然后将前面proposal层得到的rpn_rois和这样一个新的矩阵在第一个维度上合并,得到all_rois;

    2、用于训练的rois的BATCH_SIZE=128,其中前景rois占比为0.25,有32个,背景rois有96个,因此,需要从all_rois中采样;

    3、在all_rois中,若某个rois和任意一个gt的overlap大于或等于0.5,则该rois为前景,其类别为与之overlap最大的那个gt的类别。若某个rois和所有gt的overlap的最大值大于或等于0.1,并且小于0.5,则该rois为背景。这样便筛选出了前景和背景rois,每个rois都和一个gt对应(和它overlap最大的那个gt);

    4、计算每个rois相对于它的gt的偏移量(回归目标targets),这个过程和rpn-data层中计算RPN阶段的回归目标一样。然后还需要将targets减去事先设定的均值,除以事先设定的标准差,最后将rois的类别添加在targets的第一列,得到bbox_target_data;

    5、将rois的回归目标值放入与rois的类别相对应的位置,得到bbox_targets,并将bbox_inside_weights对应位置的4个值赋为1,而bbox_targets, bbox_inside_weights其他位置的值都为0,bbox_outside_weights在bbox_inside_weights大于0的位置值为1,其他位置值为0。

    总结一下,这一层的输出有rois, labels, bbox_targets, bbox_inside_weights, bbox_outside_weights。第二阶段全连接网络的输出bbox_pred将和其中的bbox_targets, bbox_inside_weights, bbox_outside_weights作为第二阶段loss_bbox的输入。roi-data层的代码链接见这里

  • 相关阅读:
    hdu5289 RMQ+二分
    poj1459 最大流Dinic
    poj2391 最大流+拆点
    poj1087&&hdu1526 最大流
    NOI2004 郁闷的出纳员
    Treap入门(转自NOCOW)
    poj 2892
    vijos 1512
    对拍程序
    poj 3264
  • 原文地址:https://www.cnblogs.com/pursuiting/p/11208930.html
Copyright © 2011-2022 走看看