本文最后更新于:2024年5月7日 下午
Roi 特征处理过程中会遇到需要变换为固定尺寸的情形,本文介绍 Roi 特征池化方法。
RoI
**RoI(Region of Interest)**是从原始图像或特征中提取的区域。
-
对于 $H \times W \times C$ 的特征
-
一般地,取 Bbox $ [X_{min}, Y_{min}, X_{max}, Y_{max}]$,这四个坐标 可以不为整数
-
当需要将上述 Bbox 框定的特征变化为 $h \times w \times C$ 时就需要 Roi 的 Pooling 操作
RoiPooling
- 假设 feature map 上原始的 RoI 如下所示,左上角坐标(9.25, 6):
- RoiPooling 会对 bbox 取整,得到 $[9, 6, 15, 10]$,宽 6 ,高 4,都是量化取整的结果,这样会多引入部分额外数据 (绿色),也可能丢失数据 (蓝色)
-
经过 bbox 量化我们得到了整数范围的 bbox,假设我们需要 pooling 的目标尺寸为 $3 \times 3$
-
对于不能整除的情况,则会再次量化,舍弃部分像素,以最大池化为例
- 这个过程是在整个RoI 矩阵上完成的,而不仅仅是在最顶层。所以最终的结果是这样的:
- 因此总体来说 RoiPooling 过程会对原始 Roi 有些处理:
- bbox 量化多出的数据是绿色的,深蓝是过程中丢失的数据,浅蓝色是Pooling 量化中丢失的数据
RoIAlign
-
RoiPooling 过程量化导致信息偏差,RoIAlign 不再对数据进行量化、不再取整,就带着小数硬算,实在取不着的值就线性插值,得到的结果会细腻合理一些。
-
还是考虑上文的情形,将原始RoI分成9个等大小的小格子,并在每个盒子内应用双线性插值。
-
目标为 $3 \times 3$ 的池化层,所以我们必须将映射的RoI ( 6.25x4.53) 除以3。这样我们就得到了一个高为 1.51 ,宽为 2.08 的方框。
- 划分成 $3 \times 3$ 范围:
- 对于每个格子,取其中 1/3 位置的四个点,通过线性插值计算出值:
- 依据这四个值可以计算 Avgpooling 或 Maxpooling
- 计算获得的特征更加细腻平滑
RoIWarp
- RoIWarp 是将 RoI 进行了量化(就像 RoiPooling一样),之后再对数据进行插值(就像 RoiAlign 一样)。
- 数据丢失/额外数据:
效果
- Mask R-CNN 有比较几种 Pooling 方式的效果:
参考资料
文章链接:
https://www.zywvvd.com/notes/study/deep-learning/layer/roi-pooling/roi-pooling/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信支付

支付宝支付