ROI Align 10s,1min和10min的三种理解。


本文从10秒,1分钟,10分钟的三种方式去理解ROI Align。

10s

ROI Pooling的改进版,解决了映射误差均分误差问题,提高了后续处理的准确率ROI Align取消量化操作,主要是利用虚拟像素的方法,即用双线性插值的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作。

1min

原理

因为feature map当中是一叠矩阵,而矩阵下标均为整数,可是我们预测框预测结果并不为整数,ROI pooling采取的方式是向下取整,把它强行变成整数框,使得它的框和feature map的边界一致。每次这样做时,都会丢失有关该目标的部分信息。这降低了整个模型的精度。

在这里插入图片描述

在 ROI 中,卷积图被数字化(上图左上图):目标特征图的单元边界被迫与输入特征图的边界重新对齐。因此,每个目标单元格的大小可能不同(左下图),而这使得物体的预测边框与真实边框存在一个差距,这个差距在大物体检测时,误差可以接受,但在小物体检测时,误差就显得尤为难以接受。Mask R-CNN 使用ROI Align,它不会取整单元格的边界(右上)并使每个目标单元具有相同的大小(右下)。它还应用插值来更好地计算单元格内的特征图值。例如,通过应用插值,现在左上角的最大特征值从 0.8 变为 0.88。

Roi Pooling vs Roi Align

在这里插入图片描述

Faster RCNN中的Roi Pooling
  • 首先,我们经过一些卷积层得到了如图左侧的输入特征图。
  • 然后根据region proposal(区域提议),我们使用一个 7×5 的区域作为 RoI Pooling 的输入,以输出 2×2 的特征图。
  • 每个黑色矩形都经过四舍五入以具有整数长度以供以后进行池化。
  • 对于输出特征图的每个值,它们只选取每个黑色矩形的最大值,称为最大池化(Max Pooling)。

在这里插入图片描述

Mask R-CNN 中的 RoIAlign
  • 不是将黑色矩形四舍五入以获得整数长度,而是使用相同大小的黑色矩形。
  • 基于特征图值重叠的区域,取各单元格中心位置,使用双线性插值得到中间池化特征图,如图右下角所示。
  • 然后在这个中间池化特征图上执行最大池化(Max pooling)。

10min

ROI Pooling的问题

数据丢失。
在这里插入图片描述

量化中的 RoI 池化损失(深蓝色和浅蓝色),数据增益(绿色)

背景

模型采用大小为512x512x3(宽 x 高 x RGB)的图像输入,VGG16 将其映射到16x16x512特征图。比例因子是32。
在这里插入图片描述

模型特征映射过程

在这里插入图片描述
接下来,我们使用其中一个建议的 RoI(145x200 box)并尝试将其映射到特征图上。因为不是我们所有的对象尺寸都可以除以 32,所以我们将 RoI 放置在不与网格对齐的位置。

  • (9.25,6) — 左上角
  • 6.25——宽度
  • 4.53 — 高度

在这里插入图片描述

再次选择池化层的大小为3x3,因此最终结果形状为3x3x512(这只是一个任意示例,以便更容易在图像上显示。您的池化层可能具有不同的大小)。

ROI Align的细节

在这里插入图片描述

映射和池化时的量化

RoI Pooling 和 RoI Align 的主要区别在于量化。RoI Align 没有使用量化来进行数据池化。而Fast R-CNN则两次应用了量化。第一次是在映射过程中,第二次是在池化过程中。

在这里插入图片描述

ROI Align框大小

如上,我们可以通过将原始 RoI 划分为 9 个大小相等的框并在每个框内应用双线性插值来跳过它。

在这里插入图片描述

将box放入映射的 RoI 中。每个框的大小由映射的 RoI 的大小和池化层的大小决定。我们使用的是 3 × 3 3\times3 3×3 的池化层,因此我们必须将映射的 RoI ( 6.25 × 4.53 6.25\times4.53 6.25×4.53 ) 除以 3。这给了我们一个高度为1.51和宽度为2.08的框。

在这里插入图片描述

采样点的分布

我们注意到左上角,它覆盖了六个不同的网格单元。现在要为池化层提取值,我们必须从中采样一些数据。要对数据进行采样,我们必须在该框内创建四个采样点。

我们可以通过将框的高度和宽度除以 3来计算每个点的位置。
计算第一个点(左上角)坐标,如下所示:

  • X = X b o x + ( w i d t h / 3 ) ∗ 1 = 9.94 X = X_{box} + (width/3) * 1 = 9.94 X=Xbox+(width/3)1=9.94
  • Y = Y b o x + ( h e i g h t / 3 ) ∗ 1 = 6.50 Y = Y_{box} + (height/3) * 1 = 6.50 Y=Ybox+(height/3)1=6.50

要计算第二个点(左下角),我们只需要更改 Y:

  • X = X b o x + ( w i d t h / 3 ) ∗ 1 = 9.94 X = X_{box} + (width/3) * 1 = 9.94 X=Xbox+(width/3)1=9.94
  • Y = Y b o x + ( h e i g h t / 3 ) ∗ 2 = 7.01 Y = Y_{box} + (height/3) * 2 = 7.01 Y=Ybox+(height/3)2=7.01
    现在,当我们拥有所有点时,我们可以将双线性插值应用于此框的样本数据。双线性插值通常用于图像处理中对颜色进行采样,其方程如下所示:
    在这里插入图片描述

图形解释如下:
在这里插入图片描述

第一个点的双线性插值

我们从盒子中取出第一个点时,我们可以将它与最近的相邻单元格连接(连接到单元格的正中间,去代表单元格的值),除非它已经被占用。在这种情况下,我们的点坐标为(9.44, 6.50)。单元格左上角最近的中间是(9.50, 6.50)(如果我们的点在网格上仅高 0.1,则为 (9.50, 5.50))。然后我们必须选择一个左下角,最近的一个是(9.50, 7.50)。按照同样的规则,我们选择(10.50, 6.50)和(10.50, 7.50)作为右上角和右下角的点。图上是线性插值的计算过程。

在这里插入图片描述

第二点的双线性插值
  • 左上角:(10.50, 6.50)
  • 左下角:(10.50, 7.50)
  • 右上角:(11.50, 6.50)
  • 右下角:(11.50, 7.50)

在这里插入图片描述

第三点的双线性插值
  • 左上角:(9.50, 6.50)
  • 左下角:(9.50, 7.50)
  • 右上角:(10.50, 6.50)
  • 右下角:(10.50, 7.50)

在这里插入图片描述

第四点的双线性插值
  • 左上角:(10.50, 6.50)
  • 左下角:(10.50, 7.50)
  • 右上角:(11.50, 6.50)
  • 右下角:(11.50, 7.50)

现在我们已经计算了所有的点,并且可以对它们应用Max Pooling(最大值池化):
在这里插入图片描述

第一个box的池化

在这里插入图片描述

RoIAlign的池化过程

在这里插入图片描述

此过程适用于每一层,因此最终结果包含 512 层(与特征图输入相同)

请注意,即使我们没有将采样点放在特征图中的所有单元格中,我们也会通过双线性插值从它们中提取数据。

在这种情况下,单元格 11x6、11x7、11x8、11x9、11x10、13x6、13x7、13x8、13x9、13x10、15x6、15x7、15x8、15x9、15x10 里面不会有任何点。我们看上面第二个点计算(第一个框内的第二个点),即使该点位于单元格 10x6 中,它仍然使用单元格 11x6 和 11x7 进行双线性插值。

我们可以比较一下 RoIAlign 和 RoIPooling 的数据丢失/数据增益,我们可以看到 RoIAlign 使用了整个区域,因此也更加精细。

效果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湘粤Ian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值