Detectron 创建blob的过程

1

主要是从roidb生成blobs的过程


以上便是整体的流程图,那么简单说一下detectron产生anchor的过程

相对于之前faster产生一系列的anchor不同,FPN在每一个level上面都会创建属于该level感受野的anchor,假设stride为4,8,16,32,64,那么在每一个stride上面,会产生一种面积的,长宽比分别为0.5,1,2的三种anchor,相比于之前的一下子产生多种面积多种长宽比的anchor要更加合理。

def _generate_anchors(base_size, scales, aspect_ratios):
    """Generate anchor (reference) windows by enumerating aspect ratios X          #每一个base_size对应一个scales,固定为8
    scales wrt a reference (0, 0, base_size - 1, base_size - 1) window.
    """
    anchor = np.array([1, 1, base_size, base_size], dtype=np.float) - 1
    anchors = _ratio_enum(anchor, aspect_ratios)
    anchors = np.vstack(
        [_scale_enum(anchors[i, :], scales) for i in range(anchors.shape[0])]
    )
    return anchors

在rpn.py里面有

        # Add RPN targets
        if cfg.FPN.FPN_ON and cfg.FPN.MULTILEVEL_RPN:
            # RPN applied to many feature levels, as in the FPN paper
            rpn_blobs = _get_rpn_blobs(
                im_height, im_width, foas, all_anchors, gt_rois                  #这里的这个函数产生五个level的blob,保存成5个字典
            )
            for i, lvl in enumerate(range(k_min, k_max + 1)):
                for k, v in rpn_blobs[i].items():
                    blobs[k + '_fpn' + str(lvl)].append(v)                        #将产生的五个字典对应到对应的blob里面
        else:
            # Classical RPN, applied to a single feature level
            rpn_blobs = _get_rpn_blobs(
                im_height, im_width, [foa], all_anchors, gt_rois
            )
            for k, v in rpn_blobs.items():
                blobs[k].append(v)

最后在rpn部分,blob里面的键值一共有23个,是哪23个呢?

一共有5个level,每一个level都会有

rpn_labels_int32_wide_fpn_x,rpn_bbox_targets_wide_fpn_x, rpn_bbox_inside_weights_wide_fpn_x,rpn_bbox_inside_weights_wide_fpn_x这四个参数,所以一共有20个

再加上roidb,data和im_info这三个参数,最后一共是23个


解析一下这几个blob里面存储的是什么

rpn_labels_int32_wide_fpn_x:存储的是对应level的anchor的label也即是背景还是前景

rpn_bbox_targets_wide_fpn_x:存储的是对应level的anchor的bbox的target,也即回归的目标

rpn_bbox_inside_weights_wide_fpn_x: 存储的是对应的回归目标的权重,只对正样本的权重做出设置,其他的为0,x,y,w,h四个参数的权重设置为1

rpn_bbox_inside_weights_wide_fpn_x: 对整个minibatch做平均的时候用到的,只统计参与训练的样本的个数,然后用1除以这个个数做归一化


roidb:roidb里面存储的是最原始从数据的标注里面加在的一些列的信息,包括label等等,具体包含的内容如下

    valid_keys = [
        'has_visible_keypoints', 'boxes', 'segms', 'seg_areas', 'gt_classes',
        'gt_overlaps', 'is_crowd', 'box_to_gt_ind_map', 'gt_keypoints'

    ]

data:存储的是对应的roidb里面的图片以及缩放的尺度信息;

im_info:缩放后的图片的大小以及尺度的信息


blob里面存储的是一个batch的图片信息,假设cfg.TRAIN.IMS_PER_BATCH=2,那么blob一次存储的将是两张图片的信息,例如,此时blobs['data']存储的是两张图片的RGB存储,以此类推

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值