卷积神经网络——RoIPool与RoIAlign的区别

RoIPool最初是在Fast RCNN中提出的,是SPP(spatial pyramid pooling)的一个特例,解决RoI(Region of Interest)大小不一致但是全连接层输入只能是固定大小的问题。但是会有错位(misalignment)的问题——由于两次量化导致执行完RoIPool后的结果与原始的Region Proposal在特征图(Feature map)中的位置发生偏移。针对小物体会更加的明显。

为了解决上面的问题,HE Kaiming等人在Mask R-CNN中提出了RoIAlign,一个更加优雅的解决方案,既可以解决全连接层输入大小固定的问题又解决了RoIPooling中出现的misalignment的问题。下面我们分别详细说一下:

RoIPooling

在SPP-net中对全连接层只接受固定输入的解决方案是添加一个SPP层。SPP层的输入的大小可以是不同的,但是输出的大小是固定的。到后面Fast R-CNN中的RoIPooling功能与SPP层类似,只不过是将RPN输出的RoI作为输入,这些RoI的大小是不同的。Fast R-CNN中RoI pooling层的输出是一个超参的配置。RoI的定义为(r,c,h,w),(r, c)是左上角坐标,(h, w)是高和宽。

RoIPool的计算过程如下(不知道图的原出处, 借用一下):

    1. 原始图片大小为800x800。假定骨干网络(这里是VGG16)的缩放步长为32,也就是最后得到的特征图的大小是原始图片大小的1/32,即25x25。
    1. 通过RPN网络选出一个665x665的RoI,RoI的坐标假定为(r, c, h, w),对应的RoI映射到特征图的大小为(665/32)x(655/32),即20.78x20.78。得到的是一个小数,会进行第一次的量化操作, 即取整得到20x20。
    1. 这里假定RoIPool层的输出为7x7。将RoI在特征图上大小为20x20的映射划分为7x7=49个小单元,每个单元的大小为20/7 = 2.86,这里进行了第二次量化操作,得到每个单元的大小为2x2。
    1. 划分好区域后执行max pool的操作,取每个单元的最大值,最终组成7x7的特征图作为全连接层的输入。

从声明的执行过程可以看出,两次量化操作使RoI在特征图上的映射发生了偏移,即Mask R-CNN中说的misalignment,这对于分类影响有限,但是对于位置回归或者像素级别的语义分割会产生很大的负面影响。这样就出现了新的解决方案,HE Kaiming等人在Mask R-CNN中提出的RoIAlign。
在这里插入图片描述

RoIAlign

RoIAlign是在Mask R-CNN中提出的,用一种更优雅的方式解决全连接层固定输入的问题。与RoIPool的最主要区别是:1.去掉了所有对RoI边界的量化操作(上面讲到的两次量化过程);2.使用双线性插值计算不存在的点的值。

RoIAlign的计算过程如下(借用图):

    1. 同样输入还是800x800的图片,骨干网络的stride依然是32,最终得到的特征图大小为800/32=25,即25x25。
    1. RPN选出的RoI大小仍然是665x665,RoI在特征图上的映射为665/32=20.78,即大小为20.78x20.78,这里不执行量化操作
    1. 依然假定RoIPool的输出是7x7,这样就要把上面得到的RoI在特征图上的映射分为49个小单元,每个小单元的大小是20.78/7 = 2.97。这里也不执行量化的操作。
    1. 关键的一步来了,得到2.97x2.97大小的单元后并不直接执行max pool的操作,而是在每个小单元中取四个固定的点(取几个点对结果的影响有限,作者实验发现取4效果较好),然后使用双线性插值的方法得出这四个点的值。
    1. 得到四个点的值后,对四个值取最大值或者平均值来代表该小单元,最终得到7x7的特征图。
      在这里插入图片描述
      下图是论文中的描述:
      在这里插入图片描述
      SPP-net论文链接:https://arxiv.org/pdf/1406.4729.pdf
      Fast R-CNN论文:https://blog.csdn.net/itlilyer/article/details/107764472
      Mask R-CNN论文:https://blog.csdn.net/itlilyer/article/details/108441734

おすすめ

転載: blog.csdn.net/itlilyer/article/details/108666073
おすすめ