深入理解ROI Pooling

  

深入理解ROI Pooling

  Original Fast R-CNN architecture. Source: arxiv/pdf/1504.08083.pdf

  本文主要讨论Fast R-CNN论文中使用的ROI Pooling(上图中蓝色矩形框部分)。

  什么是ROI

  ROI是Region of Interest的缩写,是原始图像上的一个Proposed Region。提取ROI的方法有很多,本文不详细讨论。

  Fast R-CNN是如何工作的Feature extraction

  Fast R-CNN通过卷积神经网络进行Feature提取,生成Feature Map。

  

深入理解ROI Pooling

  VGG16 feature extraction output size

  上述例子中,输入图像的大小为512 x 512 x 3(Width x Height x Channels),输出的Feature Map大小为16 x 16 x 512,卷积神经网络使用VGG16。

  注意,这里我们的神经网络输入的图像的Width和Height是输出的Feature Map的Width和Height的32倍(512 / 32=16);为了保持一致,对应的所有ROI都需要缩小到原有大小的1/32。

  Sample ROIs

  下图为单幅图片上4个ROI的示例。实际的Fast R-CNN可能会生成成百上千个这样的ROI框。

  

深入理解ROI Pooling

  Regions of Interest, Image Source: Stephanie Booth flickr/photos/bunny/

  注意:ROI不是Bounding Box,它们看起来很相似,但是ROI还需要经过进一步的处理才能生成Bounding Box。

  How to get RoIs from the feature map?

  了解了ROI和Feature Map之后,我们看看如何将ROI投射到Feature Map上。

  

深入理解ROI Pooling

  Mapping our RoIs onto the output of VGG16

  如上图所示,每个ROI都有自己的坐标和大小。为方便说明问题,我们只关注其中一个ROI,其它的都是一样的。

  

深入理解ROI Pooling

  该ROI的大小为145×200,在原始图像中左上角的坐标为192×296,为了将该ROI投射到Feature Map上,我们需要将ROI的大小和位置对应缩放到原始大小的1/32。

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

  可以看到,只有y坐标值是可以被整除的,其它数值都是浮点数。图像的像素是不存在浮点数的,因此有一个 Quantization 的操作。

  Quantization of coordinates on the feature map

  Quantization是将连续的取值转换为有限的多个离散值的过程。

  

深入理解ROI Pooling

  Original RoI on the feature map

  为了解决浮点数必须转化为整数的问题,常规的做法是对浮点数进行向下取整。如下图所示:

  

深入理解ROI Pooling

  Quantized RoI

  Quantization ROI相对于原始的ROI缺失了深蓝色的区域,多了绿色的区域。也就是说Quantization ROI与原始的ROI覆盖的区域已经不一致了。

  

深入理解ROI Pooling

  ROIAlign可以解决Quantization ROI与原始的ROI覆盖的区域不同的问题,这里我们暂不关心这个差异。

  ROI Pooling

  ROI投射到Feature Map之后,我们就可以应用ROI Pooling了。这里QQ账号拍卖初学者可能会有一个疑问:为什么要使用ROI Pooling呢?原因是,ROI Pooling Layer之后的Fully Connected Layer的输入是固定,所以需要通过ROI Pooling将所有的ROI变成固定大小。

  

深入理解ROI Pooling

  Original Fast R-CNN architecture. Source: arxiv/pdf/1504.08083.pdf

  这里我们Quantization ROI大小为4x6x512,Fully Connect Layer的输入大小为3x3x512。

  

深入理解ROI Pooling

  Mapped RoI and pooling layer

  Height方向上:4 / 3=1.33

  Width方向上: 6 / 3=2

  再次应用Quantization操作,对每个1×2块应用Max Pooling操作,最终生成3×3的Pooling ROI。

  

深入理解ROI Pooling

  由于应用了Quantization向下取整,ROI中最后一行数据再次被丢弃了。(还有另外一种非等分的保留所有数据的做法,应该都是可以的)

  

深入理解ROI Pooling

  完整的ROI Pooling过程如下:

  

深入理解ROI Pooling

  Data pooling process

  ROI Pooling最终生成的结果是这样的:

  

深入理解ROI Pooling

  Full-size pooling output

  至此,一个ROI的ROI Pooling过程完成了。使用同样的步骤对剩下的ROI应用ROI Pooling,从而生成成百上千个3x3x512的Matrix。这些生成的Matrix被送入Fully Connect Layer,继续进行后续的BBox生成和分类预测。

  另一种ROI Pooling方法

  上面提到的ROI Pooling过程丢弃了最后的一行数据,在网上看到另外一种处理方法,个人理解这两种逻辑都是没问题的,只是不同的处理方法而已。

  这个例子中我们假设Feature Map的大小为8×8(如下图所示),ROI Pooling后的ROI大小为2×2。

  

深入理解ROI Pooling

  假设我们有一个Region Proposal,左上和右下角坐标分别为(0,3)和(7,8),如下图所示:

  

深入理解ROI Pooling

  这里ROI的width和Height均不能被2(ROI Pooling输出的大小)整除,上一个ROI Pooling处理方法中,直接向下取整,把余下的数据丢弃了。这里的处理方法保留所有数据。

  

深入理解ROI Pooling

  对每个Pooling Section应用Max Pooling。

  

深入理解ROI Pooling

  完整的ROI Pooling过程如下:

  

深入理解ROI Pooling

  参考材料

  towardsdatascience/understanding-region-of-interest-part-1-roi-pooling-e4f5dd65bb44

  deepsense.ai/region-of-interest-pooling-explained/

  本文作者:[半杯茶的小酒杯]

  本文链接: banbeichadexiaojiubei/index.php/2021/12/10/%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3roi-pooling/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值