0


RoI Pooling 和 RoI Align

RoI Pooling 和 RoI Align

一、背景和基本概念

1.背景

一个Label在原图上标记出一个包含目标的区域。这个框在特征提取后,大小被缩小到了什么程度?如果这个label框本身就不大,那么经过几层池化之后,是不是在最后的feature map上都没有一个位置,能够对应到这个区域?

这个问题更广义的描述:针对一个固定网络,多大的框(目标)才能在深度网络提取的特征中至少剩余一个明确的像素点,指向这个目标。

反过来看,也就是说最后一层的feature map上的一个点,映射回原图得到一片感受野,如果目标框比这个感受野还要小,会不会就是过度的特征提取?假设这个思路成立,可能这就是模型能力相对与不同大小的目标而言的一种模糊下界。

2.基本概念

RoI(Region of Interest):是通过不同区域(region)的选择方法,从原始图像(original image)得到的候选区域(proposal region)。但是RoI不等价于Bounding Box,它们可能看起来很像,但是RoI只是为了进一步处理而产生的候选区域。可以简单把RoI理解为“feature map”上的框。

Bounding Box:Bounding Box是指检测目标的边界矩形框。

二、RoI Pooling原理

1.目的

RoI Pooling是在Fast RCNN中首次被提出。RoI Pooling直接从feature map中截取各个RoI的feature,并且输出时RoI的feature变成大小一样的了。

RoI Pooling的作用本质上是为了将不同尺寸的RoI特征转换为相同尺寸的feature输出,保证其能够与下层的全连接层连接,分别执行线性分类(linear classifier)和边框回归(bounding box regressor)。

2.步骤(以输出RoI feature大小为2×2×5为例)

Step1

得到RoI(由RPN得到)

对于输入图片,通过候选区域方法得到固定大小数量(Faster RCNN中为256)的候选区域坐标。将整个输入图片喂入基网络(如vgg, resnet等)提取feature map(Fast RCNN 中为vgg网络的conv5层特征)。

Step2

对齐到网格单元(snap to grid cell):根据输入image,将ROI映射到feature map对应位置。

首先对RoI对于的feature与原始的feature map网格单元对齐,下图中绿色框为RoI对应的实际区域(由于经过特征尺度变换,导致RoI的feature坐标可能会落在feature map的单元之间),蓝色框表示网格对齐后的RoI所对应的feature。
在这里插入图片描述

Step3

划分网格为子区域:将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同)。

粗略地将网格分为

    H
   
   
    ×
   
   
    W
   
  
  
   H × W
  
 
H×W (Fast RCNN 中设为 

 
  
   
    7
   
   
    ×
   
   
    7
   
  
  
   7 × 7
  
 
7×7 )个子网格区域。将上一步得到的RoI feature进一步细分为量化的空间单元。

为了得到输出的特征图为

    2
   
   
    ×
   
   
    2
   
   
    ×
   
   
    512
   
  
  
   2×2×512
  
 
2×2×512 ,这里的操作就是将上一步的RoI feature划分为 

 
  
   
    2
   
   
    ×
   
   
    2
   
  
  
   2×2
  
 
2×2 个特征单元。如果无法通过直接均分得到子区域,通过分别采取向上取整(ceil)和向下取整(floor)的到对应的单元尺寸大小。以当前 

 
  
   
    4
   
   
    ×
   
   
    5
   
  
  
   4×5
  
 
4×5 尺寸的特征图为例,对于宽度方向 

 
  
   
    4
   
   
    /
   
   
    2
   
   
    =
   
   
    2
   
  
  
   4/2 = 2
  
 
4/2=2,但是对于高度方向由于

 
  
   
    5
   
   
    /
   
   
    2
   
   
    =
   
   
    2.5
   
  
  
   5/2 = 2.5
  
 
5/2=2.5, 通过向上和向下取整,确定宽度方向和高度方向特征子区域的大小分别为2和3。

在这里插入图片描述

Step4

最大池化操作:对每个sections进行max pooling操作。

在每一个子区域执行聚合操作得到单元的特征值(一般是最大池化)。对上一步得到的

    2
   
   
    ×
   
   
    2
   
  
  
   2×2
  
 
2×2 个子区域分别做最大池化操作,得到 

 
  
   
    2
   
   
    ×
   
   
    2
   
   
    ×
   
   
    512
   
  
  
   2×2×512
  
 
2×2×512 的RoI feature。

输出是batch个vector,其中batch的值等于RoI的个数,vector的大小为channel * w * h;RoI Pooling的过程就是将一个个大小不同的box矩形框,都映射成大小固定(w * h)的矩形框。
在这里插入图片描述

三、RoI Align原理

1.目的

RoI Pooling的Step2和Step3都会对应着轻微的区域特征错位(misaligned), 这些操作在RoI和提取到的特征之间引入了偏差。这些偏差可能不会影响对分类任务,但它对预测像素精度掩模有很大的负面影响。

所以针对RoI Pooling的缺点,提出了RoI Align提高精度(在Mask CRCNN中提出)。

2.步骤(以输出RoI feature大小为2×2×5为例)

step1

每个RoI,保持浮点数边界不做对齐(不对齐网格单元);同时平均分网格分为

    H
   
   
    ×
   
   
    W
   
  
  
   H × W
  
 
H×W (这里为 

 
  
   
    2
   
   
    ×
   
   
    2
   
  
  
   2 × 2
  
 
2×2 )个子网格区域,每个单元的边界也不做量化。

在这里插入图片描述

Step2

对于每个区域选择4个规则采样点(分别对应将区域进一步平均分为四个区域,取每个子区域的中点)。
在这里插入图片描述

Step3

利用双线性插值( 双线性插值本质上是目标像素所相邻的四个像素, 分别以像素对应的对角像素与目标像素的构成的矩形区域为权重,像素大小为值的加权和。)计算得到四个采用点的像素值大小。下图为一个规则采样点所对应的邻近区域示意图。
在这里插入图片描述

Step4

利用最大池化(max pooling)或平均池化(average pooling)分别对每个子区域执行聚合操作,得到最终的特征图。
在这里插入图片描述
输出是batch个vector,其中batch的值等于RoI的个数,vector的大小为channel * w * h;RoI Pooling的过程就是将一个个大小不同的box矩形框,都映射成大小固定(w * h)的矩形框。


本文转载自: https://blog.csdn.net/Tian__Gao/article/details/124474448
版权归原作者 Gaotianer_99 所有, 如有侵权,请联系我们删除。

“RoI Pooling 和 RoI Align”的评论:

还没有评论