Mask R-CNN解读

简介

在本文中,作者提出了一种用于目标实例分割的方法。该方法在检测目标的同时针对每一个目标实例产生一个高质量的分割蒙板。Mask R-CNN通过在Faster R-CNN现有的用于目标检测的分支的基础上添加用于目标mask预测的分支实现。

首先,我们需要清楚几大计算机视觉常见问题的区别:

  • 图片分类

    仅需要识别出一张图片中存在哪几类目标即可。

  • 目标检测

    需要给出图片中目标的类别和具体位置。

  • 语义分割

    对图片中的目标进行像素级分割,但只需要区分不同类别目标即可,统一类别的目标不需要区分。

  • 实例分割

    对图片中的目标进行像素级分割,但需要区分不同的实例,同一类别的不同个体同样需要进行区分。

本篇论文解决的就是实例分割问题。示例如下:

相比于语义分割问题,实例分割问题更为复杂。语义分割问题只需要在语义上对像素点进行区分即可。而实例分割问题不仅需要正确地检测出所有的目标,还需要在单个目标的基础上对每一个实例进行准确的分割。在此基础上,自然而然可以将实例分割问题分为以下步骤:

  • 分类出单个的目标并使用边界框对这些目标进行定位;
  • 对这些识别出的目标进行分割。

作者解决这一问题的方法是,通过在Faster R-CNN的基础上添加分割分支,对每一个RoI都以像素分割的方式额外预测一个分割掩膜。

实现细节

网络结构

首先给出Faster R-CNN的网络结构:

在使用RPN得到RoI区域后,Faster R-CNN会使用一步被称为RoIPool的操作从特征图中抽取到RoI区域对应的特征图信息。这里存在一个问题,由于Faster R-CNN是被设计用于目标检测的,只需要定位出目标的位置即可,因而在抽取RoI区域对应的特征图时,并没有进行严格的空间对准操作。这一细节对于目标检测影响不大,因为只要抽取出的框中基本包含目标的特征信息即可,但对于实例分割来说,就有着较大的影响。特征图空间位置未对齐会导致最终分割出的像素位置无法与原始的实例对齐,导致粗糙的分割结果。

为了解决这一问题,作者提出了RoIAlign操作,这是一个在空间位置上更为精确的特征抽取操作。下图为Mask R-CNN的整体框架:

除此之外,作者发现很有必要对mask预测和类别预测进行解耦和。针对每一类分别预测一层mask,而不是所有类同时占用一个掩膜,类别之间不存在竞争关系。而是将类别预测任务交给了RoI的分类分支,在计算掩膜损失时,只计算与RoI匹配的ground truth所对应的类别所对应的预测掩膜的损失, 不计算其他类别的掩膜的损失。实验表明,这一设计对最后的结果影响很大。

在进行mask预测时,为了不丢失空间特征,作者直接使用FCN预测大小为$m\times m$的掩膜。这一设计有着更少的参数,同时更为准确。但是,这一pixel to pixel的处理方法对RoI所抽取的特征的空间精确度要求更高,所抽取出的特征图需要尽可能在空间位置上与原始RoI对应。

为了解决这一问题,作者提出了RoIAlign操作。

RoIAlign

首先,给定整幅输入图像的特征图如下:

在Faster R-CNN中使用的RoIPool层是针对每一个RoI分别产生一层小的特征图。RoIPool的步骤如下:

  • 首先对RoI的浮点坐标、大小参数进行量化,将其对应到特征图中的整数坐标。

  • 接着经过量化的RoI将被划分为格子,针对每一个格子内部进行池化操作,进而得到固定大小的特征图。

在上述操作中,共存在两步取整操作,一个是将RoI对应至特征图时,一个是对量化后的RoI进行划分。这两步取整量化操作会导致原始RoI与抽取出的特征图在空间位置上不匹配。这一问题不会对目标的分类造成大的影响,但会对mask预测造成极大的负面影响。

为了解决这一问题,作者提出了RoIAlign层,RoIAlign去除了量化取整操作,使得抽取的特征图与输入图片有着精确的位置对应。对于RoI中的每一个格子,使用双线性插值法计算其对应的值,双线性插值法需要的原始值来自于格子四角位置上的值。如下图所示:

整体步骤如下:

  • 使用浮点运算,将RoI对应至特征图的相应位置

  • 将每一个格子划分为四个小格子

  • 使用双线性插值法计算每一个格子的值,取四角的值为原始值

  • 对每一个格子进行池化操作,得到最终结果

网络结构

用于预测mask的子网络的结构如图所示:

左侧使用resnet-c4作为前面的卷积网络,将rpn生成的roi映射到C4的输出,并进行roi pooling,最后进行分叉预测三个目标。右侧即使用Faster R-CNN加FPN的结构。

对比实验

在COCO测试集上的可视化结果:

与其他模型在COCO test-dev上的指标对比:

与FCIS+++的对比,如下图所示:

在FCIS++的预测中会在目标重合位置出现一条直线,而Mask R-CNN的预测结果则没有。

消融实验

结果如图所示:

作者分别给出了不同backbone、多任务和独立任务、使用RoIAligh和不使用、使用FCN进行结果预测和使用全连接层的对比结果。