最新公告
  • 欢迎光临数据科学与编程,我们是数据学科学兴趣交流小组立即加入我们
  • 图解 Fast RCNN & RoI Pooling

    1 How Fast R-CNN works?
    Fast R-CNN 的过程可以分为5步:
    • Feature Extraction:使用ConvNet只对图像进行一次计算提取特征图;
    • Sample RoIs在原图上选择性搜索生产 region proposals ;
    • ROI Projection将选择性搜索生成的 region proposals 投影到CNN提取的特征图上;
    • ROI PoolingROI Pooling 层将 ROI Projection后的特征变成固定大小的特征图输出;
    • 分类和回归最后,通过后续的FC层分别生成bbox和class。

    图解 Fast RCNN & RoI Pooling

    本文,我们将重点讨论Fast R-CNN论文中描述的RoI Pooling(上图浅蓝色矩形)。

    1.1 Feature Extraction

    Fast R-CNN采用512x512x3(宽x高x RGB)的图像输入,然后VGG16将其映射到一个16x16x512特征映射,如下图所示。

    图解 Fast RCNN & RoI Pooling

    或许您也已经注意到输入图像的宽度和高度正好是输出的特征矩阵的32倍(512/32=16)。这一点很重要,因为所有的ROI都必须根据这个倍数进行缩小。

    1.2 Sample RoIs

    如下图所示,假设有4个不同的RoI,实际上远远不止这么多,通常会根据选择性搜索算法搜索出几千个RoI

    图解 Fast RCNN & RoI Pooling

    1.3 RoI project:How to get RoIs from the feature map?
    现在,当我们知道有那些是RoI后,要能够将它们映射到VGG16的输出特性图上。

    图解 Fast RCNN & RoI Pooling

    每个RoI都有它的原始坐标和大小。从现在起,我们只关注其中一个:

    图解 Fast RCNN & RoI Pooling

    如上图红框RoI,其原始大小为145×200,把这些数字除以32(比例因子)可以得到:

    • width: 200/32 = 6.25
    • height: 145/32 = ~4.53
    • x: 296/32 = 9.25
    • y: 192/32 = 6

    因为最后输出的feature map是16*16*channel,也就是说我们正在处理一个16×16 网格,所以更关心整数。

    【Quantization of coordinates on the feature map】
    量化是将输入从一大组值(如实数)约束到离散集(如整数)的过程
    如果我们将原始的RoI放在特征图上,它将如下所示:

    图解 Fast RCNN & RoI Pooling

    我们不能在它上面应用池层,因为一些“单元(cell)”被分割了。量化的作用是,在将结果放入矩阵之前,将其四舍五入,9.25变成9,4.53变成4,等等。如下图所示,

    图解 Fast RCNN & RoI Pooling

    您可以注意到我们刚刚丢失了一堆数据(深蓝色),而获得了新数据(绿色):

    图解 Fast RCNN & RoI Pooling

    我们不必处理它,因为它仍然可以工作,但是这个过程有一个不同的版本叫做RoI Align,它可以修复这个问题。
    1.4 RoI Pooling

    你可能会问:我们为什么要应用RoI Pooling?这是个好问题。如果你看看Fast R-CNN的原始设计:

    图解 Fast RCNN & RoI Pooling

    在RoI Pooling之后,有一个固定大小的全连接层。因为我们的 RoI 有不同的大小,所以我们必须将它们组合成相同的大小(在我们的示例中是3x3x512)。假设RoI大小为4x6x512,正如您所想象的,我们直接将4除以3将会得到小数,此时,又是量化发挥作用的地方。

    图解 Fast RCNN & RoI Pooling

    当6可以除以3,得到2,但是当你把4除以3时,我们只剩下1.33。在应用相同的方法(向下取整)后,feature map如下:

    图解 Fast RCNN & RoI Pooling

    因为量化,我们又失去了最后一行:

    图解 Fast RCNN & RoI Pooling

    现在我们可以将数据集中到3x3x512矩阵中

    图解 Fast RCNN & RoI Pooling

    在本例中,我们应用了Max Pooling,但在您的模型中可能有所不同。这个过程是在整个RoI矩阵上完成的,而不仅仅是在最顶层。最终结果如下:

    图解 Fast RCNN & RoI Pooling

    1.5 分类和回归

    同样的过程应用于原始图像中的每个RoI,因此最终我们可能会有成百上千个3x3x512矩阵。这些矩阵中的每一个都必须通过后续的FC层分别生成bbox和class。
     

    2 Summary
    需要再次说明的是:Fast R-CNN应用了两次量化。第一次在RoI Project过程中,第二次在RoI Pooing过程中。还有一件事要说明:由于量化过程,我们丢失了很多数据。准确地说,就是:

    图解 Fast RCNN & RoI Pooling

    这是一个问题,因为每个“cell”都包含大量信息,有一种方法可以解决这个问题(RoI Align),后续会继续介绍,敬请关注。

    References:
    1. https://arxiv.org/pdf/1504.08083.pdf
    2. https://towardsdatascience.com/understanding-region-of-interest-part-1-roi-pooling-e4f5dd65bb44
    本站上原创文章未经作者许可,不得用于商业用途,仅做学习交流使用,本站免责声明。转载请注明出处,否则保留追究法律责任的权利。《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
    数据科学与编程 » 图解 Fast RCNN & RoI Pooling

    发表评论

    • 52会员总数(位)
    • 321资源总数(个)
    • 20本周发布(个)
    • 2 今日发布(个)
    • 334稳定运行(天)

    提供最优质的博文资源集合

    立即阅览 了解详情