为什么MASKRCNN中使用ROIAlign替代ROIPool

最近Boss让看MaskRCNN,已经开始看代码了,突然发现之前学习的理论,有些忘了,所以写下来吧,微薄之见,有参考别人的。
​ 一般来说候选框都是由回归得到的,一般都是浮点型,但是池化又需要是尺寸固定整型,所以 R O I P o o l ROIPool ROIPool存在两次量化

​ 1>将候选框边界量化维整数坐标值

​ 2>将量化后的边界平均分割成 k ∗ k k*k kk个Bin,对一个Bin的边界进行量化。

比如:

为什么MASKRCNN中使用ROIAlign替代ROIPool

我们首先对这张图进行一个CNN提取,得到一个特征图。然后在利用 R P N RPN RPN网络在这张图上获得若干候选框,在将这些候选框映射到特征图中得到相应的特征。但是这里就会出现一个问题,我们的候选框并不都是正好对应着特征的,一般都是浮点数,所以这里出现了一个量化, R O I P o o l ROIPool ROIPool直接将进行了向下取整。

得到一个映射的区域后,需要对其进行一个 M a x P o o l i n g MaxPooling MaxPooling这里需要将这个特征区域,均分为 m ∗ m m*m mm的大小,同样的,也不总是整数,总会出现在下图所示:

为什么MASKRCNN中使用ROIAlign替代ROIPool

那么同样的, R O I P o o l ROIPool ROIPool也将其量化,得到下图。

为什么MASKRCNN中使用ROIAlign替代ROIPool

到这里我们会发现,其实从原有特征区域到最后,是经过了两次量化的。每次只是两个小数级别的误差,对于边框回归,没有太大的影响,但是对于语义上的分割,影响就非常大了,因为 M a s k R C N N MaskRCNN MaskRCNN最后是需要进行实例分割,需要像素级别的精确。在特征上1点像素的误差,放大到原图,可能是几十点像素的误差。这就对实例分割结果很不友好了。

所以在 M A S K R C N N MASKRCNN MASKRCNN中,何凯明大佬提出了 R O I A l i g n ROIAlign ROIAlign来解决这种不对齐现象。

简单来说就是, R O I A l i g n ROIAlign ROIAlign放弃了两次量化,将离散变成连续。第一次映射、第二次分割时也不做量化取整。然后采用双线性内插法,这点在原文中有提到。如图:

为什么MASKRCNN中使用ROIAlign替代ROIPool

如图,假设图中4个方框为从左到右,从上到下依此为 A B C D ABCD ABCD。以 A A A块为例,将 A A A再次划分为4块,各取它们的中点。如图:

为什么MASKRCNN中使用ROIAlign替代ROIPool

中点可以通过双线性内插法来计算得出。然后就可以取出它的值,做 M A X P o o l MAXPool MAXPool。依此类推得到最终的结果。
双线性插值是非常简单的,如果不知道的可以取百度下,5分钟足够。
今天就写到这里吧,该文大多还是取别家之言,如有侵权,请联系删除。

相关文章:

  • 2021-05-21
  • 2023-04-05
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-19
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-26
  • 2022-12-23
  • 2021-07-21
  • 2021-11-24
  • 2021-10-19
  • 2021-08-28
  • 2023-02-13
相关资源
相似解决方案