目标检测之ROI Pooling层解析

参考:
1
2

  1. ROIs Pooling是Pooling层的一种,特点是输入特征图尺寸不固定,但是输出特征层尺寸固定。

  2. ROI即region of interests,指的是特征图上的框。

  3. 在fast rcnn中,roi是指的是selective search完成之后得到的候选框在特征图上的映射。如下图:
    目标检测之ROI Pooling层解析_第1张图片

  4. 而在faster rcnn中是在rpn之后产生的,然后再把各个候选框映射到特征图上,得到ROI。往往经过rpn之后得到的不仅仅只有一个候选框,所以一般指的是对多个ROI进行池化。

  5. 目标检测的过程可以分为如下两个阶段:
    阶段一:region proposal:给定一张image找出所有object可能存在的位置,这个阶段的输出是所有object可能位置的bounding box。这些bounding box称为region proposals或者regions of interests(ROI)。
    阶段二:final classification:确定上一阶段的每个region proposal是否属于某类目标或者背景类。
    目标检测的这两个阶段可能存在的问题是:
    (1)产生大量的region proposals会导致performance problems。很难达到实时目标检测。
    (2)处理速度方面suboptimal
    (3)无法做到端到端训练
    这个因为这三个存在的问题,所以提出了roi pooling。
    roi pooling层能实现training和testing的显著加速,并且提高检测精度,roi pooling层有2个输入:
    输入一:从具有多个卷积核池化的深度网络中获得固定大小的feature maps。
    输入二:一个表示所有roi 的N * 5的矩阵,N表示roi的数目,第一列表示图像Index,其余4列表示其余的左上角和右下角坐标。

  6. roi的输入由两部分组成:
    第一部分是特征图:在fast rcnn中,位于roi pooling之前,在faster rcnn中是与rpn共享那个特征图。
    第二部分是rois:在fast rcnn中,指的是selective search的输出,在faster rcnn中指的是rpn的输出,一堆矩形候选框,形状是1 * 5 * 1 * 1.(4个坐标+1个index)。坐标的参考系不是针对feature map这张图的,而是针对原图的(神经网络最开始的输入)

  7. roi polling的输出:输出是batch个vector,其中batch的值等于roi的个数,vector的大小为channel * w * h。

  8. roi pooling的过程就是将一个个大小不同的box矩形框,都映射成大小固定的矩形框(w * h)

  9. roi pooling的过程可以详解如下:
    第一步:先把roi中的坐标映射到feature map上,映射规则是:把各个坐标除以“输入图片与feature map大小的比值”,就得到feature map上的box坐标。
    第二步:使用pooling得到输出,由于输入图片大小不一,在pooling的过程中需要计算pooling后的结果对应到feature map上所占的范围,然后在那个范围上取max或者取average。
    roi pooling的过程也可以用如下三步来理解:
    第一步:根据输入的image,将roi映射到feature map的对应位置
    第二步:将映射后的区域划分为相同大小的sections(sections的数量与输出维度相同)
    第三步:对每个section进行max pooling操作
    这样就可以从不同大小的方框得到固定大小的相应的feature maps,输出feature map的大小不取决于roi和卷积feature map的大小。

  10. roi pooling例子讲解:
    考虑一个8 * 8的feature map,一个roi,以及输出大小为2 * 2
    第一步:下图是一个8 * 8的feature map
    目标检测之ROI Pooling层解析_第2张图片
    第二步:region proposal投影,投影之后的位置在上图的feature map上表示出来就是下图中的黑框框出的部分。坐标(0,3),(7,8)给出的左下角坐标和右上角坐标
    目标检测之ROI Pooling层解析_第3张图片
    第三步:把投影之后的区域划分为(2 * 2)个sections,因为输出大小是2 * 2.
    目标检测之ROI Pooling层解析_第4张图片
    第四步:对每个sections做max pooling,就是取划分后的小区域里的最大值,得到结果如下:
    目标检测之ROI Pooling层解析_第5张图片

  11. roi pooling的作用:
    (1)用于目标检测任务
    (2)允许对cnn中的feature map进行reuse
    (3)显著加速训练和测试的速度
    (4)允许端到端的形式训练目标检测系统

你可能感兴趣的:(计算机视觉)