RoIPooling 、RoIAlign的区别
结果上比较:
- 绿色意味着用于池化的额外数据。
- 黄色代表原来的数据
- 蓝色(两种阴影)表示池化是丢失数据。
ROI Pooling:
数据的池化映射
将数据池化成 3x3x512 的矩阵的图:
从图显然看出丢失了一行数据由于4/3取整为1 ,6/3 = 2
RoI Align
首先先说理解,感觉上就是根据像素点位置关系,计算一个不存在位置的像素点(近似的),并且使用这个像素点。
RoI分割成多个框
如果查看第一个框(左上角),可以注意到它覆盖了6个不同的网格单元格。为了提取池化层的值,我们必须从池化层中采样一些数据。为了对数据进行采样,我们必须在盒子里创建 四个采样点。
就是这些新位置的近似像素值,用他们进行池化。
采样点分布
通过方框的高度和宽度除以3 来计算每个点的位置。
在我们的例子中,我们计算第一个点(左上角)的坐标如下: - X = X_box + (width/3) * 1 = 9.94
- Y = Y_box + (height/3) * 1 = 6.50
为了计算第二点(左下角),我们只需要改变Y: - X = X_box + (width/3) * 1 = 9.94
- Y = Y_box + (height/3) * 2 = 7.01
现在,当我们有了所有的点我们可以应用双线性插值对这个方框进行数据采样。图像处理中常用双线性插值对颜色进行采样,其方程如下:
当您从我们的方框中取出第一个点时,除非它已经被取走了,您将它与最邻近的单元格连接(正好在中间)。在本例中,我们的点的坐标是(9.44,6.50)。单元格左上角最接近的中间位置是(9.50,6.50(如果我们的点只比网格高0.01,那么它应该是(9.50,5.50))。然后我们必须选择一个左下角的点,最近的是(9.50,7.50)遵循同样的规则,我们选择(10.50,6.50)和(10.50,7.50)作为右上角和右下角的点。在RoI上面,您可以看到整个计算过程,从而得到第一个点(0.14)的值。0.14就是近似像素点
后面同理,仅仅放图。
看的别人的
原文连接