理解 Fast R-CNN 中卷积特征图和区域提议之间的关系

信息处理 计算机视觉
2022-02-19 13:32:13

在此处可用的论文 Fast R-CNN中,我试图了解区域提议和卷积特征图之间的关系。

所以据我了解,Fast R-CNN 接收一张图像和一组区域建议用于对象检测,目标是获取每个建议并从一组类中给它一个分类,以及一个边界框(或者没有背景区域的情况)。在使用区域提案合并它们等之后可以进行更多处理,但通常这是它的工作方式。

我不明白的是区域建议与卷积特征图的关系。在第 2.2 节中,作者声明他们通过使用一些图像网络架构预训练网络来测试他们的架构,我们将通过用 RoI 池化层替换最大池化层来修改它们,然后是一些用于回归和分类的完全连接的兄弟层。我的问题是区域提案之间的关系是什么,比如说一个区域(x,y,h,w)由左上角和高度和宽度以及卷积特征图给出,它可能具有与原始图像不同的空间维度(肯定还有更多通道)(见下图)?如果特征图具有与原始图像相同的空间维度,那肯定是有意义的,但否则我不确定。 在此处输入图像描述

1个回答

符号

  • 假设您有一个尺寸为 WxHx3的输入图像I
  • ROI提案x0,y0,w0,h0
  • 当您通过特征提取器转发图像时,您会得到一个大小为 WfxHfXC大小的特征图F。

该关系是一种空间关系

ROI 不影响特征图的输出通道数。该关系是一种空间关系,它将输入 ROI 映射到特征图上具有相同通道数的特征图上的等效空间块。因此,输出特征图中的 ROI 的大小为 UxVxC,与特征图具有的通道数相同。

通过 CNN 跟踪输入像素

现在让我们跟踪 CNN 连续层之间的像素 x0,y0。

为简单起见,我将仅考虑以下层类型(在文章中使用的特征提取器 VGG 16 中也是如此,对于其他层,可以应用相同的逻辑,但有小的变化):

  • 具有“SAME”填充的卷积层,kernel = 3,stride = 1,用 Conv 表示
  • 步幅 = 2 的池化层,用 Pool 表示

现在当我们将图像插入卷积层时会发生什么?换句话说,输入像素 x0,y0 在卷积输出中映射到哪个像素?

卷积层的输出大小使用以下公式计算:输出大小计算因此在我们的例子中,我们将得到输出大小等于输入大小,并且卷积响应中的像素对输入中的像素 x0,y0映射到卷积输出中的像素 x0,y0。

对于步长为 2 的轮询层,如果输入大小为 WxH,则输出大小将为 W/2xH/2,因此输入中的像素 x0,y0 映射到 floor(x0/2), floor(y0/2 )

跟踪摘要(鉴于我们的简化案例)

  • 输入中的卷积 x0,y0 将映射到输出中的 x0,y0
  • 池化 x0,y0 将映射到 x0/2,y0/2

将图像中的 x0,y0 转换为输出特征图中的 x0^,y0^

因此,如果我们有一个 CNN,其 Conv->Conv->Pool->Conv->Conv->Pool .... 输入中的像素 x0,y0 将映射到像素 floor(x0/2^(num of池层)),y0/2^(池层数)

ROI 映射

让我们以特征提取器为 VGG16 的情况为例,该网络在文章中使用。所有卷积层给出的输出大小与输入大小相同,轮询大小是输入大小的一半。输入大小为 224X224,特征图为 7X7 -> 输入图像中的像素 x0,y0 映射到特征图中的 x0/32,y0/32。

roi x0,y0,w,h 映射到 x0/32,y0/32,h/32,w/32