1、ROI pooling
fast-rcnn论文提出,常用于two stage的方法中,实质是将原始feature map中不同大小的proposal区域,通过切分和max pooling,得到大小相等的目标feature区域,原理如下:
ROI pooling存在取整量化的精度损失,如下图,原始图像大小800*800,bbox大小665*665,在25*25的feature map层,目标feature map大小为665/32=20.78,ROI pooling直接取整量化为20*20,因此存在0.78x32=25个像素的定位精度损失。
2、ROI Align
针对ROI pooling取整量化导致的定位精度损失,何凯明在mask rcnn中提出了ROI Align,即不取整,利用小数周围的像素值双线性插值获得最终的像素值。示意如下图:
step1:将feature map上的bbox等分为N*N个bin(N*N为pooling的输出大小)
step2:每个bin均匀取4个采样点(实验效果最好)
step3:对每个采样点邻近grid的四个角点进行双线性插值,得到采样点值
step4:对每个bin的4个采样点计算max pooling,得出每个bin的pooling输出值
3、Precise ROI (PrRoI) pooling
PrRoI是旷视在ECCV2018论文Acquisition of Localization Confidence for Accurate Object Detection中提出,在RoI Align不取整量化的基础进一步改进:
1、首先对feature map的进行双线性插值,将离散的feature map wi,j变为连续的feature map f(x, y),插值系数为IC(x, y, i, j),其中(i, j)为离散坐标,(x, y)为连续坐标。
2、和RoI align一样划分bin,但是每个bin内部不再设置采样点,而是采用二维积分计算区域总像素值,再除以区域面积,所得均值作为bin的pooling输出。
通过计算公式可知,PrRoI是可导的,而RoI pooling和RoI align不可导,只能传递导数/梯度。