ROI Pooling

RCNN
ref 1

步骤:
1.使用Selective Search方法生成候选区域
2.对每一个候选区域使用CNN进行特征提取
3.对提取到的特征送入到每一类的SVM分类器 判断该区域是否属于该类特征
4.使用回归器精修候选框的位置

ROI Pooling_第1张图片

候选框搜索阶段:
使用selective search方法生成候选框,由于CNN提取特征时需要输入的大小固定 但是生成的候选框大小是不固定的因此需要对候选框进行缩放操作

  1. 直接缩放 不管图像的长宽比例(各向异性缩放)
  2. 先将boundingbox边界向外扩展延伸成正方形再进行裁剪,如果延伸出原始图像边界则用均值进行扩充如图B
  3. 先裁剪出boundingbox 再使用均值扩充生成正方形图像
    ROI Pooling_第2张图片
    对于上述三种处理方法 在原文中提出一种padding处理的方法 即先在候选框周围向外扩展16个像素值 之后再进行上述1,2,3的操作 对应上图中的第二,第四行

CNN特征提取阶段:
正负样本划分: 根据标注的boundingbox与候选框之间的IoU面积确定候选框是属于正样本还是负样本
如果不是针对特定任务进行 fine tuning那么卷积层所学到的特征就是基础的共享特征提取层,而全连接层提取到的特征是针对特定任务的特征,例如针对人脸性别分类,CNN的卷积层学习到的特征是人脸的共性特征而全连接层学习到的特征是针对性别的分类特征

SVM训练阶段:

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

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

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

ROI Pooling_第3张图片
这时可以增加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_第4张图片
    对于一个Region Proposal :(0,3),(7,8)
    ROI Pooling_第5张图片

结果如下:
ROI Pooling_第6张图片

NMS(非极大值抑制)

ROI Pooling_第7张图片

你可能感兴趣的:(深度学习)