实例分割: Mask R-CNN

《Mask R-CNN》

原文链接: https://arxiv.org/abs/1703.06870

本文主要的点是在 Faster R-CNN 已有预测 bounding box 分支的基础上增加了一个预测物体掩码(mask) 的并行分支,提出了 RoIAlign 操作,使其处理不同的任务,例如目标检测,实例分割,人体关键点检测等。

实例分割: Mask R-CNN_第1张图片

1. Introduction

目前的目标检测领域和语义分割领域已经取得了快速的发展,这些进步很大一部分是由于一些强有力的基础学习框架,例如目标检测领域的 Fast/Faster R-CNN 和语义分割领域的 FCN。本文的目标就是提出一个在实例分割方面的基础学习框架。

实例分割不仅需要对每个类别进行精准定位,还要分割出每一个实例,它同时包含了目标检测和语义分割。如前面提到的 Mask R-CNN 就是在 Faster R-CNN 的基础上增加了一个预测 mask 的分支,这个分支类似于一个小的 FCN 网络,应用在每一个 RoI 上,用来预测像素级别的分类结果。

2. Related Work

R-CNN: 基于区域建议的方法是产生一系列的可能包含物体的区域候选框,然后在这些候选框上用神经网络进行分类。随后 R-CNN 类的方法被扩展成对每一个RoI区域使用 RoIPool,从而加快了网络的速度以及达到了更好的准确率。 Faster R-CNN 则是创新性的加入了注意力机制(attrntion mechanism),提出了 RPN(Region Proposal Network)。

Instance Segment: 因为 R-CNN 系列方法的有效性,很多实例分割的算法也是基于分割建议(segment proposals)的。一些早期的方法都是自下而上的分割, DeepMask 及其一系列的工作都是学习如何生成候选分割区域,然后使用 Fast R-CNN 来对这些区域分类,这些方法中,分割先于识别,这样即慢又不准确。本文的方法则是一个并行的结构,更灵活简单。 最近 FCIS 系列的方法是预测一系列的对位置敏感的全卷积通道,这些通道同时解决了目标类别,位置,以及掩码的问题,系统很快速,但是 FCIS 对存在重叠的实例不能很好的解决,也存在假边问题。

3. Mask R-CNN

Mask R-CNN 概念上很简单,Faster R-CNN 原本对每一个候选物体有两个输出,一个是类别标签,一个是位置信息,在这些的基础上我们增加了新的分支,来输出目标掩码,由于预测掩码需要输出更精细的物体空间分布,所以这一分支的设计会不同于另外两个输出分支。

下面先简单回顾一下 Faster R-CNN, Faster R-CNN包含了两步,第一步是使用一个叫做 RPN 的网络处理物体候选框,然后使用 RoIPool (Fast R-CNN 中提出的)从每一个候选区域中提取特征,最后用作分类和边框回归。

Mask R-CNN 则是采用完全一样的两步走方法,第一步与 Faster R-CNN 一致。在第二部,除了对每个 RoI 预测分类标签和位置信息,Mask R-CNN 还会数以一个二值掩码图像,这三个结果是并行输出的,不同于目前的一些方法,它们的分类是基于掩码预测的。主要特点:

  1. Loss 函数的修改。 这里在分类与边框回归产生的两个损失函数的基础上,增加了一个 Lmask, 对于 k 类物体,每一类都生成一个 mxm 的 mask,而最后是通过类别分支的输出,只用属于预测类别的 mask 来计算损失函数,这样就把分类预测与掩码预测分开了。
  2. Mask Representation。 因为掩码需要更精细的物体空间位置信息,所以这里最后没办法像分类或者边界框输出一样使用全连接层,所以这里我们使用一个 FCN 网络来对每一个 RoI 生成一个 mask,不同于目前使用全连接层预测 mask 的方法,我们的网络使用了更少的参数,实验证明产生了更好的结果,而这也需要我们的 RoI 区域的特征与原图中的空间关系要很好的对齐。这也是本文提出 RoIAlign 层的主要原因。
  3. RoIAlign。 RoIPool 是用来对每一个 RoI 提取特征的标准操作,RoIPool 首先根据输入图片,将 RoI 映射到对应的位置,这个过程会有一个量化(quantizes),即向上取整 ,然后根据设定的最后输出尺寸,将原图区域划分成不同的 section,分割的时候又可能产生小数, 再次量化 ,依次最后对这些 section 执行 max-pooling 操作。 毫无疑问这样经过两次量化会损失很对空间位置信息,对分类可能没有问题,但是对于像素级别的掩码预测是不好的,为了解决这一问题,本文提出了 RoIAlign 层,主要区别是不进行量化操作,然后设置好采样点个数,例如 4, 然后对这四个点进行双线性插值,用来作为此 section 的值 其实RoIAlign 的重点不在于取多少个 section ,或者是取多少个插值采样点,主要是没有量化操作了。(上述结论也是文中和其他文章中提出的 RoIWrap 方法进行实验比较得到的,RoIWarp 也是进行了双重线性插值,不过不同点是 RoIWarp进行了量化操作)
  4. Network Aechitecture。 为了显示 Mask R-CNN 的泛化特性,文中使用了多种网络结构进行实验,这里的网络主要是包含两部分的网络,一是作为特征提取的 backbone 网络, 二是做分类和边框回归的网络。这里结果最好的是使用 ResNeXt 作为特征提取以及 FPN 作为 mask 预测的结构。

4. 实验

文中做了大量的对比实验来验证模型的有效性,及每个模块的重要性实验数据可以说很强了,其中 将 mask 与分类分开预测,网络结构选择,RoIAlign 层的提出, mask 分支的机构等都进行了实验对比和阐述(以上均是对结果有一个好的影响)。 最后则是将 Mask R-CNN 拓展到人体关键点检测问题中(一张图片产生 k 个 mask,每一个 mask 预测一个关键点)

研究相关领域的同学,需要做相关实验的推荐阅读原文!!

你可能感兴趣的:(论文,目标检测)