【深度学习】RoI Pooling 与 RoI Align

原文链接:https://zhuanlan.zhihu.com/p/161540817

基本概念

RoI

RoI(Region of Interest)是通过不同区域选择方法,从原始图像(original image)得到的候选区(proposal region)。需要注意的一点是RoI并不等价于bounding box, 它们可能看起来像,但是RoI只是为了进一步处理而产生的候选区域。

bounding box

boundding box* 指的是检测目标的边界矩形框。

量化

量化(quatization)是指将输入从连续值(或大量可能的离散取值)采样为有限多个离散值的过程。也可以理解为,将输入数据集(如实数)约束到离散集(如整数)的过程。

RoI Pooling 原理

RoI Pooling在Fast RCNN 中被首次提出。

RoI Pooling 直接从feature map 里截取各个兴趣区域(Region of Interest, RoI)的feature, 并换为为相同大小的feature输出。

RoI Pooling = crop feature + resize feature
在这里插入图片描述
执行步骤

1)前置条件
对于输入图片,通过候选区域方法发网得固定大小数量(Faster RCNN中为256)的候选区域坐标,。

将整个输入图片喂入基网络(如vgg, resnet等)提取图片的特征(Fast RCNN 中为vgg网络的conv5层特征)。

下面以输出目标特征图尺寸大小为2×2×512 进行说明

对齐到网格单元(snap to grid cell)
首先将一个浮点数RoI量化为特征映射的离散粒度。表现为RoI对应的特征图的与原始特征图的网格单元对齐。这里为第一次量化操作。

下图中绿色框为RoI对应的实际区域(由于经过特征尺度变换,导致RoI的坐标会可能会落到特征图的单元之间), 蓝色框代表量化(网格对齐)后的RoI所对应的特征图。(得到到量化特征图尺寸为 5×7×512 )
在这里插入图片描述
2)划分网格为子区域(bin)
粗略地将网格分为H×W (Fast RCNN 中设为 7×7)个子网格区域。将上一步得到的量化RoI 特征进一步细分为量化的空间单元(bin)。这里进行了第二次量化操作。

为了得到输出的特征图为 2×2×512,这里的量化操作就是将上一步的到量化特征图划分为 2×2个特征单元。如果无法通过直接均分得到量化的子区域,通过分别采取向上取整(ceil)和向下取整(floor)的到对应的单元尺寸大小。以当前 4×5尺寸的特征图为例,对于宽度方向4/2=2,,但是对于高度方向由于5/2=2.5 , 通过向上和向下取整整,确定高度方向特征子区域的大小分别为2和3。
在这里插入图片描述
3)最大池化操作
在每一个子区域执行聚合操作得到单元的特征值(一般是最大池化)。对上一步得到的 2×2个子区域分别做最大池化操作,得到2×2×512的目标特征图。
在这里插入图片描述
执行结果
通过RoI Pooling, 对于具有不同特征大小的的输入区域, 都可以得到相同大小输出特征。

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

RoI Align 原理

RoI Align 在 Mask RCNN 中被首次提出。

针对RoI Pooling在语义分割等精细度任务中精确度的问题提出的改进方案。

执行步骤

下面以输出目标特征图尺寸大小为2×2×512进行说明

1)遍历候选每个候选区域,保持浮点数边界不做量化(不对齐网格单元);同时平均分网格分为 H×W (这里为2×2)个子网格区域,每个单元的边界也不做量化。
在这里插入图片描述
2)对于每个区域选择4个规则采样点(分别对应将区域进一步平均分为四个区域,取每个子区域的中点)。
在这里插入图片描述
3)利用双线性插值计算得到四个采用点的像素值大小。下图为一个规则采样点所对应的邻近区域示意图
在这里插入图片描述
4)利用最大池化(max pooling)或平均池化(average pooling)分别对每个子区域执行聚合操作,得到最终的特征图。
在这里插入图片描述
执行结果
通过RoI Align, 对于具有不同特征大小的的输入区域, 都可以得到相同大小输出特征。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: RoIPoolingRoIAlign 是两种用于在目标检测中处理 Region of Interest (RoI) 的方法。 RoIPooling 是一种将 RoI 区域采样为固定大小的特征图的方法,它通过对 RoI 区域内的像素进行 max pooling 来实现。 RoIAlign 是一种改进 RoIPooling 的方法,它通过对 RoI 区域内的像素进行双线性插值来精确定位像素位置,从而更准确地处理 RoI 区域的特征。 总的来说,RoIAlignRoIPooling 更精确,但是计算量更大。 ### 回答2: RoIPooling(Region of Interest Pooling)和RoIAlign(Region of Interest Align)是在目标检测领域中常用的两种处理特征图中感兴趣区域的方法。在 Faster RCNN、Mask RCNN、YOLO等流行的目标检测算法中,都用到了RoIPoolingRoIAlignRoIPooling将图像特征分为多个像素点,然后将感兴趣的区域划分成固定尺寸的子区域,每个子区域将其中的特征点聚合成一个值。这种聚合方式可以使得不同大小的感兴趣区域都可以映射为相同尺寸的特征区域,从而方便以相同尺寸进行后续处理。但是,RoIPooling采用了近似的方式来计算感兴趣区域中特征点的聚合值,可能导致特征点的位置偏移,从而降低了目标检测的精度。 RoIAlign通过双线性插值的方式计算感兴趣区域中每个特征点的值,能够更加准确地计算出感兴趣区域的特征,提高目标检测的精度。RoIAlign对于小目标和低分辨率的图像使用效果更好,但由于需要进行双线性插值,计算复杂度也更高,计算时间更长。 综上所述,RoIPooling虽然计算速度较快,但准确度相对较低,适用于更大的感兴趣区域。RoIAlign计算准确度更高,但计算时间更长,适用于更小的感兴趣区域。在实际应用中需要根据具体情况选择和平衡二者的使用。 ### 回答3: RoIPoolingRoIAlign是在物体检测领域中广泛使用的两种特征金字塔网络用于从卷积神经网络中提取感兴趣区域(Region of Interest)的技术。 RoIPoolingRoIAlign最初是在Faster R-CNN中提出的,Faster R-CNN是目前最优秀的物体检测算法之一。这两种方法都是为了解决R-CNN中存在的空间量化问题和边界偏移问题。 RoIPooling是在特征图中提取感兴趣区域时,使用划分区域(sub-region)的方法。将RoI区域内的像素均匀划分成一个固定大小的子区域,然后在每个子区域内选择最大的值作为该子区域的输出结果。然后将这些划分的子区域进行池化操作,最终形成特征向量。 但是RoIPooling的问题是对于感兴趣区域中边界部分的像素容易丢失,从而造成检测结果误差增加。为了解决这一问题,RoIAlign应运而生。 RoIAlignRoIPooling相比,最显著的改善是在划分子区域时,使用双线性插值法计算划分子区域内的特征值,避免了对子区域中像素的量化损失。另外,RoIAlign还使用了更为精细的采样技术,防止了积累误差的产生,更加准确地提取了感兴趣区域中的特征,从而提高了检测精度。 总之,RoIPoolingRoIAlign是在物体检测中提取感兴趣区域时常用的技术,通过划分子区域和采样技术来准确提取感兴趣区域内的特征,提高检测精度,是物体检测中不可或缺的技术手段。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值