1、内容概要
Mask R-CNN的框架是对Faster R-CNN的扩展,与BBox识别并行的增加一个分支来预测每一个RoI的分割Mask。Mask分支是应用到每一个RoI上的一个小的FCN,以pix2pix的方式预测分割Mask。
对Mask预测和class预测去耦合。对每个类别独立的预测一个二值Mask,不依赖分类分支的预测结果。
2、部分相关工作说明
2.1、网络结构发展
作为Faster R-CNN的进一步推进,Mask R-CNN网络的发展进程可以如下图所示:
2.2、网络结构原理
为了演示方法的一般性,作者使用多种架构来构建Mask R-CNN。
区分:
(i)用于整个图像上的特征提取的卷积主干架构;
(ii) 网络头(head) 用于对每个RoI单独应用的边界框识别(分类和回归) 和掩码预测。
网络架构:
作者评估了深度为50或101层的ResNet 和ResNeXt网络。Faster R-CNN与ResNets 的实现从第4阶段的最终卷积层中提取了特征,称之为C4。例如, ResNet-50的这个主干由ResNet-50-C4表示。
作者还使用了另一个更有效的称为特征金字塔网络(FPN)主干。FPN使用具有lateral连接的自上而下架构,从单一尺度输入构建一个网络内特征金字塔。具有FPN主干的Faster R-CNN根据其规模从特征金字塔的不同级别提取RoI特征,随后的方法类似于vanilla ResNet。使用ResNet-FPN主干网通过Mask R-CNN进行特征提取,可以在精度和速度方面获得极佳的提升。
算法流程:
a) 将原始图像中的RoI对应到feature map上,坐标位置可能会存在小数,此时直接取整产生一次量化误差;
b) 在feature map的RoI区域上,将其划分成nxn的bins,bins的坐标位置可能会有小数,此时也直接取整,产生第二次量化误差;
c) 最后在每个bin中进行max pooling操作,即可获得固定大小的feature map;
在Mask-RCNN中使用RoIAlign提取固定大小的feature map。其算法流程与RoIPooling一样,只是在a)和b)步骤中,当坐标位置为小数时,不进行量化取整,而是保留小数。在c)步骤里每个bin中均匀取点,点的数值通过双线性插值获得。
2.3、ROI Align
实际上,Mask R-CNN中还有一个很重要的改进,就是ROIAlign。
Faster R-CNN存在的问题是:特征图与原始图像是不对准的(mis-alignment),所以会影响检测精度。而Mask R-CNN提出了RoIAlign的方法来取代ROI pooling,RoIAlign可以保留大致的空间位置。
RoIPool是从每个RoI中提取特征。先将浮点数表示的RoI量化到与特征图匹配的粒度,然后将量化后的RoI分块后对每个块进行池化。这些量化使RoI与提取的特征错位。虽然可能不会影响分类,但对于预测像素级精确掩码有很大的负面影响。为了解决这个问题文章提出了一个新的层,称为ROIAlign。文章避免对RoI边界进行量化,即用x/16代替[x/16]。然后对分得的每一个块选取分块中的四个常规位置,并使用双线性插值来计算每一个位置上的精确值,并将结果汇总(池化)。
那么,RoI Pooling和RoI Align的区别在于哪里呢?如何能够精确的反向找到对应像素点边缘?对Pooling的划分不能按照Pooling的边缘,而是要按照像素点缩放后的边缘。
2.4、ResNet-FPN网络
多尺度检测在目标检测中变得越来越重要,对小目标的检测尤其如此。现在主流的目标检测方法很多都用到了多尺度的方法,包括最新的yolo v3。Feature Pyramid Network (FPN)则是一种精心设计的多尺度检测方法,下面就开始简要介绍FPN。
FPN结构中包括自下而上,自上而下和横向连接三个部分,如下图所示。这种结构可以将各个层级的特征进行融合,使其同时具有强语义信息和强空间信息,在特征学习中算是一把利器了。
ResNet-FPN包括3个部分:
自下而上连接;
自上而下连接;
横向连接。
下面分别介绍:
自下而上连接:
从下到上路径。可以明显看出,其实就是简单的特征提取过程,和传统的没有区别。具体就是将ResNet作为骨架网络,根据feature map的大小分为5个stage。stage2,stage3,stage4和stage5各自最后一层输出conv2,conv3,conv4和conv5分别定义为C2,C3,C4,C5,他们相对于原始图片的stride是{4,8,16,32}。需要注意的是,考虑到内存原因,stage1的conv1并没有使用。
自上而下和横向连接:
自上而下是从最高层开始进行上采样,这里的上采样直接使用的是最近邻上采样,而不是使用反卷积操作,一方面简单,另外一方面可以减少训练参数。横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合。具体就是对 C2,C3,C4,C5中的每一层经过一个conv 1x1操作(1x1卷积用于降低通道数),无激活函数操作,输出通道全部设置为相同的256通道,然后和上采样的feature map进行加和操作。在融合之后还会再采用3*3的卷积核对已经融合的特征进行处理,目的是消除上采样的混叠效应(aliasing effect)。
实际上,上图少绘制了一个分支:M5经过步长为2的max pooling下采样得到 P6,作者指出使用P6是想得到更大的anchor尺度512×512。但P6是只用在 RPN中用来得到region proposal的,并不会作为后续Fast RCNN的输入。
总结一下,ResNet-FPN作为RPN输入的feature map是P2,P3,P4,P5,P6 ,而作为后续Fast RCNN的输入则是P2,P3,P4,P5。