详解 Mask-RCNN 中的 “RoIAlign” 作用 / 双线性插值的方法

1. RoIAlign的产生背景

首先设想一个场景,假设从一个图像中锚定了一个人的边界框
在这里插入图片描述
图1 锚定一个目标人物的边界框

这个时候,要提取边界框中的人的特征,显然应该用 CNN 网络来做这个工作。CNN 处理之后会形成一个特征图。按照一般的处理方式,会使用 RoI Pooling 来缩小特征图的尺寸。但是在 Mask-RCNN 中提出了一个 RoIAlign 的方式,使得得到的小特征图可以更加的精确和信息完整。

2. RoI Pooling

举例来说,如果我们现在得到了一个特征图,特征图尺寸是 5 × 7 5×7 5×7,要求将此区域缩小为 2 × 2 2×2 2×2。此时,因为 5 / 2 = 2.5 {5}/{2}=2.5 5/2=2.5,是个非整数,所以此时系统会对其进行取整的分割,即将 “ 5 5 5 ”分割成 “ 3 + 2 3+2 3+2 ”,将 “ 7 7 7 ” 分割成 “ 3 + 4 3+4 3+4 ”,然后取每个区域的最大值作为本区域的值,整个过程如下所示:在这里插入图片描述
图2 整个RoI Pooling 的过程

3. RoI Align

可以知道,使用 R o I P o o l i n g RoI Pooling RoIPooling 存在一个很大的问题:

  • 很粗糙地选用了一个值来代替一个区域的值,而且每个区域的尺寸还有很大的差距。

R o I A l i g n RoI Align RoIAlign 的过程如下:
在这里插入图片描述
图3 整个RoI Align 的过程

  • 因为最终要将这个 5 × 7 5×7 5×7 的特征图处理成 2 × 2 2×2 2×2 的特征图。所以先将要进行 R o I A l i g n RoI Align RoIAlign 的过程转换成 2 × 2 2×2 2×2 个相同规模的范围,这个过程中不做任何量化处理。
    在这里插入图片描述
  • 将这 4 4 4 个模块(①,②,③,④)内部同样进行这样的处理,再细分成 4 4 4 个规模相同的区域(图中虚线表示)。
    在这里插入图片描述
  • 然后对于每一个最小的区域(包含不止一个像素点)确定其中心点(图中的红色 × × × )然后使用双线性插值法得到这个 × × × 号所在位置的值作为 最小格子区域 的值。
    在这里插入图片描述
  • 对于每一个 小区域(①,②,③,④)都会有 4 4 4 个这样的值,把这 4 4 4 个值取他们的最大值作为每个 小区域(①,②,③,④) 的值。这样最终就可以得到 4 4 4 个小区域的 4 4 4 个值,作为最终的特征图输出结果。

R o I A l i g n RoI Align RoIAlign 提出的这种方式可以避免过程中丢失原特征图的信息,中间过程全程不量化来保证最大的信息完整性。

4. 双线性插值

双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。

首先确定几个量:

  • 四个像素点 Q 11 , Q 12 , Q 21 , Q 22 Q_{11}, Q_{12},Q_{21},Q_{22} Q11,Q12,Q21,Q22
  • 他们的坐标分别是 ( x 1 , y 1 ) , ( x 1 , y 2 ) , ( x 2 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_1,y_2),(x_2,y_1),(x_2,y_2) (x1,y1),(x1,y2),(x2,y1),(x2,y2)
  • 他们的像素值分别是 f ( Q 11 ) , f ( Q 12 ) , f ( Q 21 ) , f ( Q 22 ) f(Q_{11}),f(Q_{12}),f(Q_{21}),f(Q_{22}) f(Q11),f(Q12),f(Q21),f(Q22)
  • 横向插值插入的两个点 R 1 , R 2 R_1,R_2 R1,R2,其坐标分别为 ( x , y 1 ) , ( x , y 2 ) (x,y_1),(x,y_2) (x,y1),(x,y2)
  • 纵向插值插入的一个点 P P P,其坐标是 ( x , y ) (x,y) (x,y)
    在这里插入图片描述
    插值的目的:

图像扩展,由已知的像素点的值来计算出来原本不存在的像素点。当然你也可以把扩展的地方的像素全部用 0 0 0 来表示,但是看起来是一种不太聪明的做法,会让像素的质量下降的很厉害。所以为了尽可能的让扩展的像素不太过于偏离原图像,使用插值的方式。

插值的方法:

  • 先横向插,再纵向插
  • 先纵向插,再横向插

计算过程:

  • 首先来计算横向的插值,由 Q 22 , Q 12 Q_{22},Q_{12} Q22,Q12 得到 R 2 R_2 R2 的过程:

    f ( Q 22 ) − f ( Q 12 ) x 2 − x 1 ≈ f ( Q 22 ) − f ( R 2 ) x 2 − x \frac{f(Q_{22})-f(Q_{12})}{x_2-x_1} \approx\frac{f(Q_{22})-f(R_2)}{x_2-x} x2x1f(Q22)f(Q12)x2xf(Q22)f(R2)

    交叉相乘:

    ( f ( Q 22 ) − f ( Q 12 ) ) × ( x 2 − x ) ≈ ( f ( Q 22 ) − f ( R 2 ) ) × ( x 2 − x 1 ) ({f(Q_{22})-f(Q_{12})})×(x_2-x)\approx({f(Q_{22})-f(R_{2})})×(x_2-x_1) (f(Q22)f(Q12))×(x2x)(f(Q22)f(R2))×(x2x1)

    化简一下:

    f ( R 2 ) ≈ x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) f(R_{2}) \approx \frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22}) f(R2)x2x1x2xf(Q12)+x2x1xx1f(Q22)

  • 同样地,计算横向插值,由 Q 11 , Q 21 Q_{11},Q_{21} Q11,Q21 得到 R 1 R_1 R1 的过程:

    f ( Q 21 ) − f ( Q 11 ) x 2 − x 1 ≈ f ( Q 21 ) − f ( R 1 ) x 2 − x \frac{f(Q_{21})-f(Q_{11})}{x_2-x_1} \approx\frac{f(Q_{21})-f(R_1)}{x_2-x} x2x1f(Q21)f(Q11)x2xf(Q21)f(R1)

    计算步骤同上,化简结果:

    f ( R 1 ) ≈ x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) f(R_{1}) \approx \frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21}) f(R1)x2x1x2xf(Q11)+x2x1xx1f(Q21)

  • 然后结合 R 1 , R 2 R_1,R_2 R1,R2 y y y 方向插值得到 P P P

    f ( R 2 ) − f ( R 1 ) y 2 − y 1 ≈ f ( R 2 ) − f ( P ) y 2 − y \frac{f(R_{2})-f(R_{1})}{y_2-y_1} \approx\frac{f(R_{2})-f(P)}{y_2-y} y2y1f(R2)f(R1)y2yf(R2)f(P)

    经过化简:

    f ( P ) ≈ y 2 − y y 2 − y 1 f ( R 1 ) + y − y 1 y 2 − y 1 f ( R 2 ) f(P) \approx \frac{y_2-y}{y_2-y_1}f(R_{1})+\frac{y-y_1}{y_2-y_1}f(R_{2}) f(P)y2y1y2yf(R1)+y2y1yy1f(R2)

    将得到的 f ( R 1 ) , f ( R 2 ) f(R_{1}),f(R_{2}) f(R1),f(R2) 的化简结果带入到 f ( P ) f(P) f(P) 的公式里面:

    f ( P ) ≈ f ( Q 11 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x 2 − x ) ( y 2 − y ) + f ( Q 21 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x − x 1 ) ( y 2 − y ) + f ( Q 12 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x 2 − x ) ( y − y 1 ) + f ( Q 22 ) ( x 2 − x 1 ) ( y 2 − y 1 ) ( x − x 1 ) ( y − y 1 ) f(P) \approx \frac{f(Q_{11})}{(x_2-x_1)(y_2-y_1)}(x_2-x)(y_2-y)+\frac{f(Q_{21})}{(x_2-x_1)(y_2-y_1)}(x-x_1)(y_2-y)+\frac{f(Q_{12})}{(x_2-x_1)(y_2-y_1)}(x_2-x)(y-y_1)+\frac{f(Q_{22})}{(x_2-x_1)(y_2-y_1)}(x-x_1)(y-y_1) f(P)(x2x1)(y2y1)f(Q11)(x2x)(y2y)+(x2x1)(y2y1)f(Q21)(xx1)(y2y)+(x2x1)(y2y1)f(Q12)(x2x)(yy1)+(x2x1)(y2y1)f(Q22)(xx1)(yy1)

所以,最后可以得到 P P P 点的像素值,无论是先进行横向插值还是纵向插值,最后的出的 P P P 点的像素值是一样的。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值