我们的模型取一个大小为 512x512x3 (宽度x高度x RGB)的图像输入,VGG16将其映射为一个 16x16x512的feature map。比例因子是 32 。
接下来,我们将使用其中一个proposed RoIs ( 145x200box),并尝试将其映射到feature map上。因为不是所有的对象维度都可以整除以32,所以我们没有将RoI与网格对齐。
- (9.25,6)— top left corner
- 6.25— width
- 4.53 — height
再一次,我们选择池化层的大小为 3x3,所以最终的形状是 3x3x512(这只是一个任意的例子,以便更容易在图像上显示。你的池化层可能有不同的大小)。
每个框的大小由映射的RoI的大小和池化层的大小决定。我们使用了一个 3x3 的池化层,所以我们必须将映射的RoI ( 6.25x4.53)除以3。这样我们就得到了一个高为 1.51 ,宽为 2.08 的方框(我在这里约简以使它更容易)。现在我们可以把我们的方框放入映射的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)的值。
第二个点
这一次我们从:
- top-left: (10.50, 6.50)
- bottom-left: (10.50, 7.50)
- top-right: (11.50, 6.50)
- bottom-right: (11.50, 7.50)
第三个点:
- top-left: (9.50, 6.50)
- bottom-left: (9.50, 7.50)
- top-right: (10.50, 6.50)
- bottom-right: (10.50, 7.50)
第四个点:
- top-left: (10.50, 6.50)
- bottom-left: (10.50, 7.50)
- top-right: (11.50, 6.50)
- bottom-right: (11.50, 7.50)
计算出每个点值后 我们按照Max Pooling进行池化操作