Roi pooling 和 RoiAlign

RoI Pooling 、 RoI Align

注意:RoI在原图

参考:https://blog.csdn.net/qq_29598161/article/details/108137399

RoI Pooling:

  1. 原图的候选框映射到feature map上,例如665* 665 映射到feature map25* 25上为665/32(缩放比例)=20.78,取整为20,左上角顶点坐标也会映射一次,坐标也会取整,不会落到bin内部,这是第一次量化
  2. 如果pooling输出为7*7,那么会把上面映射的feature划分成49个同等大小(feature长宽大小不一样bin就是矩形,如下面gif所示)的bin,每个bin大小为20/7=2.86,取整后为2,这是第二次量化
  3. 每个bin里取最大,max pooling,得到7*7大小的feature map

反向传播in RoI Pooling

在ROI层反向传播,对每个proposals的网格做如下判断, x i x_i xi中的i是否对应当前ROI,换句话说就是 i = i ∗ ( r , j ) i = i ∗ ( r , j ) i=i(r,j)表示特征图上的第 i i i节点是否被候选区域 r r r的第 j j j个节点选为最大值输出。如果是就累加下一个proposals,这样就求出$ \frac{\partial L}{\partial x_{i}} $

动图

RoI Align(2018):

由于上述roi pooling过程的两次量化(取整操作)会造成misalignment,为了做精细的语义分割,roialign实现了pixel-to-pixel alignment,没有取整操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qh75DGe4-1685506927848)(C:\Users\86188\Pictures\works\roialign.png)]

下图align输出为2* 2,和我解释的7*7不一样:

在这里插入图片描述

  1. 原图的RoI映射到feature map上不取整(Figure 3中align输出为2* 2),假设还是665/32=20.78,保留浮点数
  2. 直接将映射的feature map分割为7* 7大小(align输出大小)的feature map,划分成几个同等大小的区域
  3. 文章中采样点数为4,表示对每个bin,平分四份,取中心点位置(红叉),中心点的像素采用双线性插值法计算(中心和其所在的feature方格的四个顶点,左上角顶点才是方格的值对应的点),一个bin得到四个值(左上角)
  4. 每个bin分别取max作为其值,得到最终输出。

对于有较多小物体的图片使用RoIAlign会更加精确。

关于最终的采样结果对采样点的位置,以及采样点的个数并不敏感。

单线性插值

已知数据 (x0, y0) 与 (x1, y1),要计算 [x0, x1] 区间内某一位置 x 在直线上的y值

这里写图片描述

这里写图片描述

双线性插值

有两个方向和对应的值

在两个方向分别进行一次单线性插值

这里写图片描述

我们想得到未知函数 f 在点 P = (x, y) 的值

已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值

首先在 x 方向进行线性插值

这里写图片描述

然后在 y 方向进行线性插值

这里写图片描述

对比:

pooling

在这里插入图片描述

align

在这里插入图片描述

M6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjc4MjE1MA==,size_16,color_FFFFFF,t_70)

猜你喜欢

转载自blog.csdn.net/qq_52038588/article/details/130966393