从ROI Pooling到ROI Align

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/hzhj2007/article/details/79476145

    ROI Align 是何凯明在2017年的论文Mask-RCNN中提出的,该方法很好地解决了ROI Pooling操作中两次量化造成的区域不匹配(mis-alignment)问题。本文将先从实验结果入手,然后分析ROI Pooling产生局限性的具体原因和ROI Align的解决方法,最后就两种方法的反向传播公式进行简单说明。

实验对比

    首先通过论文中针对ROI Align和ROI Pooling的实验结果感受下ROI Align的强大。

    翻译过来就是,(c)表中基于ResNet-50-C4框架的结果中,ROI Align的分割效果明显好于ROI Pooling 和ROI Warp的效果;平均池化和最大化池化后的结果差不多,论文中多是用的平均池化的方法。(d)表中基于ResNet-50-C5框架的实验中,使用ROI Align在检测和分割领域的AP都比ROI Pooling的结果要高;池化输入的特征图比网络输入图的缩小比例越大,则ROI Align的效果越明显(缩小32倍的AP30.9大于缩小16倍的AP30.3)。

ROI Pooling的局限性

    ROI Pooling是针对ROI的Pooling操作,整个过程中涉及的两次量化分别发生在对ROI坐标和对ROI划分为等大子区域上的量化。ROI可以有不同的获得方法,如在Faster R-CNN中是由RPN回归得到,故ROI的坐标一般为浮点数,此处需要量化为整数;ROI均分为等大的子区域时,若不能整除,则需要量化。如下图,665*665的矩形框经主干网络后的缩放步长为32,此框的大小也变为665/32=20.78,此时ROI Pooling将其量化为20;池化层的输出大小为7*7,等分后的子区域大小为20/7=2.86,此时将等分后的子区域大小量化为2。图中绿色栅格与其临近红色矩形框间的空白区域显示了经过两次量化后的偏差。由缩放步长可知,该特征图上1个像素的偏差在原图上就是32个像素的差别,这对小物体的检测效果影响很大。


图片1来源:https://leanote.com/api/file/getImage?fileId=5a168ad8ab644140060025d3

ROI Align的思想和实现方法

    ROI Align从ROI Pooling局限性的源头上进行了改进,也就是取消了量化操作,对于量化中产生的坐标为浮点数的像素,利用双线性插值计算其像素值。值得注意的是,ROI Align并不需要对两步量化中产生的浮点数坐标的像素值都进行计算,而是设计了一套优雅的流程。

`遍历每一个候选区域,保持浮点数边界不做量化。

将候选区域分割成k x k个单元,每个单元的边界也不做量化。

在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。

这里对上述步骤的第三点作一些说明:这个固定位置是指在每一个矩形单元(bin)中按照固定规则确定的位置。比如,如果采样点数是1,那么就是这个单元的中心点。如果采样点数是4,那么就是把这个单元平均分割成四个小方块以后它们分别的中心点。显然这些采样点的坐标通常是浮点数,所以需要使用插值的方法得到它的像素值。在相关实验中,作者发现将采样点设为4会获得最佳性能,甚至直接设为1在性能上也相差无几。事实上,ROI Align 在遍历取样点的数量上没有ROIPooling那么多,但却可以获得更好的性能,这主要归功于解决了misalignment的问题。值得一提的是,我在实验时发现,ROI Align在VOC2007数据集上的提升效果并不如在COCO上明显。经过分析,造成这种区别的原因是COCO上小目标的数量更多,而小目标受misalignment问题的影响更大(比如,同样是0.5个像素点的偏差,对于较大的目标而言显得微不足道,但是对于小目标,误差的影响就要高很多)。

`

图2 Mask R-CNN中截图

    论文中ROI Align的实现方法如上图所示,。其中,虚线框表示feature map,实线框表示一个ROI,Pooling输出大小为22,每个子区域中有四个采样点。ROI Align基于双线性插值的方法,利用feature map上距离采样点最近的四个像素得到其像素值。整个过程中没有对ROI,均分ROI产生的子区域(bins)和采样点进行量化。每个bin中采样点的数目和位置存在一定的规则,即若采样点数为1,则该点位于bin的中心位置;若采样点数为4,则采样点的位置为均分该bin为4个小矩形后各自的中心点。通常这些采样点的坐标为浮点数,所以需要用到插值的方法获得其像素值。利用该方法对图1处理后的结果如下所示。


图片3来源:https://leanote.com/api/file/getImage?fileId=5a168afaab644140060025d6 

ROI Align的反向传播

    通常,池化方法的反向传播公式如下。


    式中,代表池化前特征图上的点,代表池化后第r个bin中的第j个点,i(r,j)代表像素点的来源(最大化池化的时候是最大像素值所在位置的坐标)。由公式可知,只有当池化中利用到当前点的像素值(即满足i=i*(r,j))时,才会在处回传梯度。

    类比于ROI Pooling,ROI Align的反向传播需要做如下修改:池化后i*(r,j)是一个浮点数坐标,在池化前的特征图中,每一个与i*(r,j)横纵坐标差值小于1的像素点(即双线性插值时特征图上的四个点),都应该接受池化后点回传的梯度,故ROI Align的反向传播公式如下。


    公式中,d(.)表示像素点的距离,Δh和Δw表示与i*(r,j)横纵坐标的差值,这里作为双线性插值的系数乘在原始梯度上。


参看文献:

  1. http://blog.leanote.com/post/afanti.deng@gmail.com/b5f4f526490b 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值