![](/style/images/good.png)
![](/style/images/bad.png)
深入理解ROI Pooling
source link: http://www.banbeichadexiaojiubei.com/index.php/2020/12/10/%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3roi-pooling/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
深入理解ROI Pooling
![0_lbtiFIOBUetVXsZt.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_lbtiFIOBUetVXsZt.png)
本文主要讨论Fast R-CNN论文中使用的ROI Pooling(上图中蓝色矩形框部分)。
什么是ROI
ROI是Region of Interest的缩写,是原始图像上的一个Proposed Region。提取ROI的方法有很多,本文不详细讨论。
Fast R-CNN是如何工作的
Feature extraction
Fast R-CNN通过卷积神经网络进行Feature提取,生成Feature Map。
![0_OVMjbYdDqpf3avlh.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_OVMjbYdDqpf3avlh.png)
上述例子中,输入图像的大小为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框。
![0_m3fiNgEsOg1yczlc.jpg](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_m3fiNgEsOg1yczlc.jpg)
注意:ROI不是Bounding Box,它们看起来很相似,但是ROI还需要经过进一步的处理才能生成Bounding Box。
How to get RoIs from the feature map?
了解了ROI和Feature Map之后,我们看看如何将ROI投射到Feature Map上。
![0_Hu43KfpLLgJ3C8SP.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_Hu43KfpLLgJ3C8SP.png)
如上图所示,每个ROI都有自己的坐标和大小。为方便说明问题,我们只关注其中一个ROI,其它的都是一样的。
![0_Ye1ZZL6zn6QXWbxw.jpg](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_Ye1ZZL6zn6QXWbxw.jpg)
该ROI的大小为145×200,在原始图像中左上角的坐标为192×296,为了将该ROI投射到Feature Map上,我们需要将ROI的大小和位置对应缩放到原始大小的1/32。
- width: 200/32 = 6.25
- height: 145/32 = ~4.53
- x: 296/32 = 9.25
- y: 192/32 = 6
可以看到,只有y坐标值是可以被整除的,其它数值都是浮点数。图像的像素是不存在浮点数的,因此有一个Quantization的操作。
Quantization of coordinates on the feature map
Quantization是将连续的取值转换为有限的多个离散值的过程。
![0_itjjLvxulVdeHboj.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_itjjLvxulVdeHboj.png)
为了解决浮点数必须转化为整数的问题,常规的做法是对浮点数进行向下取整。如下图所示:
![0_8t04t1gf-7UiaQoi.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_8t04t1gf-7UiaQoi.png)
Quantization ROI相对于原始的ROI缺失了深蓝色的区域,多了绿色的区域。也就是说Quantization ROI与原始的ROI覆盖的区域已经不一致了。
![0_W_0kPRvx-vkLxMNm.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_W_0kPRvx-vkLxMNm.png)
ROIAlign可以解决Quantization ROI与原始的ROI覆盖的区域不同的问题,这里我们暂不关心这个差异。
ROI Pooling
ROI投射到Feature Map之后,我们就可以应用ROI Pooling了。这里初学者可能会有一个疑问:为什么要使用ROI Pooling呢?原因是,ROI Pooling Layer之后的Fully Connected Layer的输入是固定,所以需要通过ROI Pooling将所有的ROI变成固定大小。
![0_IoA3OWCLan-JDicO.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_IoA3OWCLan-JDicO.png)
这里我们Quantization ROI大小为4x6x512,Fully Connect Layer的输入大小为3x3x512。
![0_hWRZgO7YQTqjquIA.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_hWRZgO7YQTqjquIA.png)
Height方向上:4 / 3 = 1.33
Width方向上: 6 / 3 = 2
再次应用Quantization操作,对每个1×2块应用Max Pooling操作,最终生成3×3的Pooling ROI。
![0__6sxhtyFjdjVSi2q.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0__6sxhtyFjdjVSi2q.png)
由于应用了Quantization向下取整,ROI中最后一行数据再次被丢弃了。(还有另外一种非等分的保留所有数据的做法,应该都是可以的)
![0_lGS0NBC7tqpIxs6O.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_lGS0NBC7tqpIxs6O.png)
完整的ROI Pooling过程如下:
![0_SMrADTLV_u9SQ6EV-1024x402.gif](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_SMrADTLV_u9SQ6EV-1024x402.gif)
ROI Pooling最终生成的结果是这样的:
![0_PV3fmXrcohjrGFo_.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/0_PV3fmXrcohjrGFo_.png)
至此,一个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。
![Screenshot-from-2020-12-10-23-06-43.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/Screenshot-from-2020-12-10-23-06-43.png)
假设我们有一个Region Proposal,左上和右下角坐标分别为(0,3)和(7,8),如下图所示:
![Screenshot-from-2020-12-10-23-08-17.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/Screenshot-from-2020-12-10-23-08-17.png)
这里ROI的width和Height均不能被2(ROI Pooling输出的大小)整除,上一个ROI Pooling处理方法中,直接向下取整,把余下的数据丢弃了。这里的处理方法保留所有数据。
![Screenshot-from-2020-12-10-23-08-52.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/Screenshot-from-2020-12-10-23-08-52.png)
对每个Pooling Section应用Max Pooling。
![Screenshot-from-2020-12-10-23-09-21.png](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/Screenshot-from-2020-12-10-23-09-21.png)
完整的ROI Pooling过程如下:
![roi_pooling-1.gif.pagespeed.ce_.5V5mycIRNu.gif](http://www.banbeichadexiaojiubei.com/wp-content/uploads/2020/12/roi_pooling-1.gif.pagespeed.ce_.5V5mycIRNu.gif)
https://towardsdatascience.com/understanding-region-of-interest-part-1-roi-pooling-e4f5dd65bb44
https://deepsense.ai/region-of-interest-pooling-explained/
除非注明,否则均为[半杯茶的小酒杯]原创文章,转载必须以链接形式标明本文链接
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK