从RoI pooling到RoI Align

RoI pooling与RoI Align都是在感兴趣区域生成的feature map上下采样,使得固定输出特定尺寸(一般为7x7)的新的feature map,再进行后续的分类与框的回归。
由于要进行框的回归,所以位置的准确度就尤为重要

对于RoI pooling:
从RoI pooling到RoI Align
1.从卷积网络feat_stride=32出来后,图片缩小为原图的1/32,比如原图为800x800,输出大小即为25x25。
2.原图中的感兴趣区域假设为655x655,经过卷积后输出为655/32=20.78,在RoI pooling中会进行取整,得到20x20,这里是第一次量化,输出得到的特征图为20x20。
3.假定pooled_w=7,pooled_h=7,即pooling后固定成7x7大小的特征图,所以,将上面在 feature map上映射的20x20的 region proposal划分成49个同等大小的小区域,每个小区域的大小20/7=2.86,即2.86x2.86,此时,进行第二次量化,故小区域大小变成22。
4.每个2x2的小区域里,取出其中最大的像素值,作为这一个区域的‘代表’,这样,49个小区域就输出49个像素值,组成7
7大小的feature map。

由于两次量化后,原本的20x20区域偏差成为14x14,,这样像素的偏差会在回归框的定位时产生影响。

对于RoI Align:
从RoI pooling到RoI Align
1.从卷积网络feat_stride=32出来后,图片缩小为原图的1/32,比如原图为800x800,输出大小即为25x25。
2.原图中的感兴趣区域假设为655x655,经过卷积后输出为655/32=20.78,保留浮点数。
3.假定pooled_w=7,pooled_h=7,即pooling后固定成7x7大小的特征图,所以,将上面在 feature map上映射的20.78x20.78的 region proposal划分成49个同等大小的小区域,每个小区域的大小20.78/7=2.97,即2.97x2.97。
4.假定采样点数为4,即表示,对于每个2.972.97的小区域,平分四份,每一份取其中心点位置,而中心点位置的像素,采用双线性插值法进行计算,这样,就会得到四个点的像素值,如下图。最后,取四个像素值中最大值作为这个小区域(即:2.972.97大小的区域)的像素值,如此类推,同样是49个小区域得到49个像素值,组成7*7大小的feature map。
从RoI pooling到RoI Align
四个叉叉的像素值是通过双线性插值算法计算得到的。

总结:RoI Align主要是为了解决RoI pooling在回归框定位时出现偏差,在对于小目标的精细回归问题上,精度更高。