Roi Pooling,Roi Warping pooling,PSROIPooling,Roi Align,PrROI Pooling大总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_14845119/article/details/86378389

Roi Pooling

出自论文,Fast R-CNN,作者Ross Girshick

ROI Pooling在faster RCNN中提出。主要有2个缺点,

  1. 需要进行2次量化取整的操作,会带来精度的损失
  2. ROI区域中的像素是离散化的,没有梯度的更新,不能进行训练的调节

首先,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区域的量化还存在,但是Roi Warping pooling之后的7*7区域的生成进行了双线性插值,没有位置的信息丢失。

优点:

    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区域

 

 

PSROIPoolingposition-sensitive RoI pooling):

出自论文,R-FCN: Object Detection via Region-based Fully Convolutional Networks,作者代季峰,李益,何凯明,孙剑

缺点:

  1. PSROIPooling之前的roi区域的量化还存在,但是PSROIPooling之后的7*7区域的生成没有量化。

优点:

  1. PSROIPooling包含有明确的相对位置信息在里面,使用不同的层分别学习不同的bin的值。
  2. 对整张图中的所有roi区域同时并行进行pooling操作,加快了处理速度。

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中提出。

优点:

  1. 改进了ROI pooling中2次量化操作,从而使得精度有保障。
  2. 对每一个bin内部的N个插值的像素使用双线性插值进行跟新,有梯度的传导

缺点:

  1. ROI区域中的每个bin区域中引入了新的参数,即需要插值的点的数目N。并且这个N是预先设定的,无法根据feature map做自适应调整。
  2. 这N个点的梯度只与其上下左右4个整数位置的像素点有关,而不是整个区域的像素点都有梯度的传递。

首先在输入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 PoolingPrecise RoI Pooling ):

出自论文,Acquisition of Localization Confidence for Accurate Object Detection作者Borui Jiang , Ruixuan Luo  , Jiayuan Mao  , Tete Xiao , Yuning Jiang

优点:

  1. 不涉及任何量化取整操作
  2. 解决了ROI Align中插值像素点数目N的问题,这里不再有该参数,整个feature map是一个连续的整体。
  3. 整个区域的像素值通过求积分得到,所以,所有的像素值都有梯度的传递。

对于每一个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。

 

 

总结:

猜你喜欢

转载自blog.csdn.net/qq_14845119/article/details/86378389