ROI Pooling

ROI Pooling广泛应用在CNN目标检测中,例如在一幅图像中检测目标物体(在街景中检测多个行人和车辆,ROI poolig通过对输入特征应用最大值池化得到固定尺寸的feature map.
在目标检测模型中,通常分为两个部分:
1.区域选择(Region Proposal):在给定的Image中选择所有可能的目标区域,这一步骤的输出结果是一系列目标区域的bounding box
2. 分类:对于步骤一中所有的区域,判断该区域所属类别(目标类别之一或者背景区域)

这样就出现一个问题,在步骤一中需要尽量多的选择候选框,确保高召回率,否则一旦漏选,该区域将不会被判定所属类别,但是这样一来选择的候选框在步骤二的时候大部分都会被判定为背景区域,造成大量的额外运算。
存在问题:

  1. 生成过多的Region使得运行速度缓慢
  2. 无法进行端到端训练,不能在一次运行中训练整个结构的所有组成部分

ROI Pooling
这时可以增加ROI Pooling层
对于ROI Pooling层的输入分为两部分:
1.一个固定大小的feature map (经过若干卷积层和池化层处理)
2.一个N5的矩阵,N代表roi个数 第一列代表ROI的index,后四列分别代表ROI区域左上和右下的坐标
ROI Pooling层将N个ROI区域中的每一个区域都映射到feature map上并且缩放到固定大小的size(例如 7
7 对于VGG而言)
对于feature map映射区域大小缩放到固定大小的具体处理步骤如下:

  1. 将Region Proposal 划分为面积相同的n*n的区域 这里的n与上述固定大小的size相等 对于VGG而言 这里的n等于7
  2. 获取nn区域中每个区域最大的值
    这样就可以将一系列Region Proposal 对应的矩形区域resize到固定大小。
    ROI Pooling层可以起到加速的作用 对于不同大小,不同区域的 Region Proposal 可以使用同一个feature map,即只用对原始图像进行一次卷积操作即可,避免了对不同Region Proposal都要进行卷积操作带来的时间损失
    ROI Pooling 示例
    对于8
    8的feature map输入 需要得到2*2的输出
    ROI Pooling
    对于一个Region Proposal :(0,3),(7,8)
    ROI Pooling

结果如下:
ROI Pooling