目标:为了使得检测网络可以输入任意size的图片,使用ROIPooling在网络中某一个阶段将不同尺度的图片ROI pooling成相同的尺度,使得fc的存在也无法写死输入图片的size。
ROIPooling:
方法:直接Pooling,若尺寸不对应则直接取整
缺点:
由于 RoIPooling 采用的是 INTER_NEAREST(即最近邻插值) ,在resize时,对于 缩放后坐标不能刚好为整数 的情况,采用了 粗暴的舍去小数,相当于选取离目标点最近的点,损失一定的空间精度。
例如:一张图片输入VGG16,则得到的尺寸缩小为1/32,如下图中,图片大小为800,则恰好为25,但区域块大小为665经过VGG后则为20.78,则直接处理为20,再通过ROIPooling(即,将所有不同的尺寸全部Pooling处理为相同的大小)处理为7*7,则20/7--> 2,由下图可知,Pooling之后存在一定的位置偏移。
具体计算:
下图为一张8*8的feature map,选取其中一个5*7的region输入ROIPooling输出2*2的结果。
(1)划分为2*2=4块区域
1)5/2 = 2.5 --> 2, 剩下的为3,则2+3
2)7/2 = 3.5 -->3, 剩下的为4,则3+4
(2)取每个小区域的最大值为pooling值
ROIAlign:
改进:将最近邻插值换为双线性插值,使得即使缩放后坐标不能刚好为整数,也能通过插值得到浮点数处的值处理得到pooling后的值。
如下图所示:ROIAlign中池化的块允许为浮点数,通过双线性插值得到尺寸为浮点数的块池化后的结果,保证了空间精度。
具体计算:
下图为一张8*8的feature map,选取其中一个5*7的region输入ROIPooling输出2*2的结果。
(1)划分为2*2=4块区域
1)5/2 = 2.5 --> 2.5, 不再取整,则2.5+2.5
2)7/2 = 3.5 -->3.5,不再取整,则3.5+3.5
(2)将每小块再分为4个小区域,使用双线性插值的方法求取这四个小区域的中心点处的值
(3)取每个区域的最大值为pooling值
ROIPooling换为ROIAlign所做的改动:
本文暂时没有评论,来添加一个吧(●'◡'●)