Roi Pooling:
出自论文,Fast R-CNN,作者Ross Girshick
ROI Pooling在faster RCNN中提出。主要有2个缺点,
首先,ROI Pooling涉及到的2次量化操作,每进行一次都会有精度的损失。第一次是ROI pooling之前预测的边界框是个float数值,而不是整数,这样就涉及到一次取整的操作,取整后才可以输入ROI Pooling。第二次是ROI Pooling需要对提取的ROI做pooling操作,输出一个7*7大小的feature map,即7*7个bin。这样ROI的长度或者宽度除以7,得到的也是一个float数值,而非整数,这个时候又涉及到一次量化取整的操作。如上图所示,除以7后得到的是一个红色虚线框,但是这时候由于是float类型,(x1, y1)、(x2, y2)所对应的像素都是不知道的,所以得进行量化取整,即分别求得(x1, y1)、(x2, y2)的下、上确界,得到红色实线框。然后再对每一个bin做max pooling操作,输出最终的7*7的feature map。
Roi Warping pooling:
出自论文,Instance-aware Semantic Segmentation via Multi-task Network Cascades,作者代季峰,何凯明,孙剑
缺点:
优点:
1.有梯度的传导,Roi Warping pooling中输入的ROI的区域的大小可以不定,输出的crop后的区域大小需要预先设定好。可以使用TensorFlow中自带的tf.image.crop_and_resize实现。
区别:
1.和roi pooling不一样,roi pooling计算过程中需要的是roi区域的左上角和右下角坐标,而Roi Warping pooling需要的是roi区域的中心坐标和宽高。
W,H:输入的roi区域的宽高
W’,H’:对输入roi区域进行crop和resize操作后输出的roi区域的宽高
u, v:roi区域在原始图像的坐标
U’, v’:对输入roi区域进行crop和resize操作后输出的roi区域的坐标
G:crop和resize操作,具体操作如下,分别对长,宽做插值
最终将roi区域从(x-w/2,y-h/2)*(x+w/2,y+h/2)变换为(-W‘/2,-H’/2)*(W‘/2,H’/2)
F:ROI区域
PSROIPooling(position-sensitive RoI pooling):
出自论文,R-FCN: Object Detection via Region-based Fully Convolutional Networks,作者代季峰,李益,何凯明,孙剑
缺点:
优点:
PSROIPooling是一种专门针对RFCN结构设计的roi pooling操作。在特征聚集时人工引入位置信息,从而有效改善较深的神经网络对物体位置信息的敏感程度。
前序特征图先通过一层 1*1 的卷积核生成通道数为 k*k*(C+1) 的特征图。其中k表示最终输出roi区域的大小,例如7*7,C表示分类类别数目,例如20(voc),80(coco)。然后在该特征图上,每一个候选区域(ROI)被平均分割成 k*k 个矩形单元bin。
假设roi区域的大小为w*h,则每一个bin的大小约为w/k,h/k。然后按照下面式子进行计算,
rc(I,j)表示第(i,j)个bin,第c个channel的响应。
(x0,y0)表示roi区域左上角的坐标
n表示每个bin内部的像素个数
Ɵ表示训练过程中的参数
这 k*k*(C+1) 张特征图每 C+1 张分成一组、共包含 k*K 组,每组负责向对应的矩形单元进行响应。池化每一个ROI时,各个点(一共 k*k 个),均由上一层中对应分组的对应位置区域通过平均池化获得。由此获得一组 C+1 张特征图。最后,将这些特征图经过全局平均池化,得到 C+1 维的向量,计算分类损失函数。
Roi Align:
出自论文,Mask R-CNN ,作者何凯明,Georgia Gkioxari ,Piotr Dollar Ross Girshick
ROI Align是ROI Pooling的改进版,mask RCNN中提出。
优点:
缺点:
首先在输入ROI Align之前的边界框的点还是和ROI pooling一样,采用同样的思来得到,同样是一个float数值,但是这个数值对应的位置的像素不需要进行双向性插值得到。ROI Align操作同样是需要输出一个7*7的feature map。再经过ROI Align之后,与ROI pooling一样,也是得到7*7个float类型的框的位置(x1, y1)、(x2, y2),也就是bin区域。如上图中的红色虚线框。对于每一个bin区域,构造其中间的N个点,N需要预先设置,上图中N=4,这样对其平均分成3*3块,bin区域的中间就会生成4个需要的点,这4个红色的点(ai, bi)就是需要的坐标点,同样这4给红色点的坐标也是float类型,从上、下、左、右4个整数值位置的像素使用双线性插值得到。最终对每一个bin区域的4个像素求平均,也就是average pooling操作,得到每个bin的输出,最终输出7*7的feature map。
PrROI Pooling(Precise RoI Pooling ):
出自论文,Acquisition of Localization Confidence for Accurate Object Detection作者Borui Jiang , Ruixuan Luo , Jiayuan Mao , Tete Xiao , Yuning Jiang
优点:
对于每一个bin区域,假设(x1, y1)、(x2, y2)为其中一个bin区域的左上角和右下角坐标,图中红色虚线框。基于每个bin中的整数值位置的像素点就可以积分出整个区域的像素值。
IC函数计算每一个连续的x,y方向的偏移的乘积,在1个像素以内的偏移,使用该像素(i,j)计算,即该像素上下左右1个像素以内的区域都会被计算到。超过一个像素的偏移的,使用下一个整数像素点(i+1,j)或者(i,j+1)计算。然后该偏移的乘积和(i,j)的像素值wij乘积得到f(x,y)。从(x1, y1)到(x2, y2)对f(x,y)求积分,即可以得到整个bin区域的像素的和,然后求平均,就得到该bin区域的输出。最终每一个bin区域都输出1个数值,形成最终的7*7输出的feature map。
总结: