论文基本信息
- 标题:Mask R-CNN
- 作者:Kaiming He Georgia Gkioxari Piotr Dollár Ross Girshick
- 机构:Facebook AI Research (FAIR)
- 来源:ICCV
- 时间:2017
- 论文地址:https://arxiv.org/abs/1703.06870
- 代码地址:https://github.com/facebookresearch/Detectron
论文概要
解决问题
本文在Faster RCNN上进行了改进,提出了Mask RCNN用来解决分割的问题。同时该模型也可以用于目标检测、关键点检测等其他的计算机视觉任务,并且实验证明,该模型具有较好的效果。
Introduction
- 分割任务分为实例分割和语义分割。语义分割是将不同种类的物体按像素级别分类,实例分割是不同种类的不同个体也要进行分别。
- 本文提出了一种非常简洁、灵活并且快速的方法来实现分割任务——Mask R-CNN。在Faster RCNN的基础上增加了一个预测掩码图的分支。这个掩码的分支是一个FCN(全卷积)在每一个RoI后。
- 在Faster RCNN中采用RoIPool 将特征图映射成固定大小的特征向量,在Mask R-CNN中提出了 RoIAlign
- 对每一个类进行一个独立预测一个掩码图,不同的类之间不存在竞争。
- 之前的方法是对每个像素进行多分类,即将分类与分割的任务耦合在了一起,本文是将分类和分割进行解耦。分类和分割是相互独立的分支。实验表明,这样能够提升模型的效果。
Mask R-CNN
整体框架
对Faster RCNN进行了调整,同样也是一个two-stage的框架。
backbone之后
- 第一部分:通过RPN生成proposal建议。
- 第二部分:对每个proposal通过RoIAlign后,分为三个分支,其中两个分支与Faster R-CNN相同,分别进行分类和位置的回归,另一个分支就是通过FCN来生成k张mask图,每一张对应一个类别。
RoIAlign
本部分引自https://zhuanlan.zhihu.com/p/402224313
- motivation:Faster RCNN并非为pixel-to-pixel的input和output设计的,不同于另外2个分支输出class和BBox,mask分支需要提取更精细的对象空间布局。RoIPool是识别instance的核心操作,但其仅通过coarse spatial quantization来提取特征。因此本文提出RoIAlign,它可以保留exact spatial location以实现pixel-to-pixel alignment
- RoI Pool的问题:RoI Pool使用了2次quantization(“浮点数变整数”):将原图上的RoI映射到特征图时、对特征图进行池化以得到期望size的输出时(详见https://zhuanlan.zhihu.com/p/273587749)。quantization使得RoI和RoI Pool输出的feature之间存在misalignment。这种misalignment可能不会影响classification,但它对预测pixel-accurate mask有很大的负面影响。
- 方法:RoIAlign并不使用quantization。首先将原图上的RoI映射到特征图(不使用quantization),然后将特征图上的RoI均分成2×2个bin(RoIPool/RoIAlign输出C×N×N的feature map,则bin的数量就是N×N,这里仅以2×2 bins为例);在每个bin中平均采样得到4个point的位置,通过线性插值计算这4个point对应的value,然后对这4个point的value进行aggregation(max/avg pooling)得到该bin的value.
就是将proposal对应的特征图上的区域分成 nn个bin(上图为22个bin),每个bin中取四个点,这四个点的值的计算,是通过线性插值计算。然后对这4个点的值进行聚合,就得到了这个bin的值。
RoIAlign对性能的提升
Head Architecture–Mask 分支
Mask RCNN同Faster RCNN一样都是通过backbone 来提取特征,然后在通过RPN提取proposal,再将每个RoI送入head中,head负责分类,回归,和预测mask图。
- 输入RoI
- 输出 nn80的mask图 (80 是种类,每个类一张mask)
上图是两种处理方式,左边是对RoI先送入resnet中后在经过一层全卷积直接得到。右边是FPN的思想,经过四层全卷积得到。
损失函数
本文定义了多任务的算是函数:
L = L cls + L box + L mask
其中前两项同Faster RCNN相同,第三项L mask为平均二元交叉熵损失,对于一个属于第k类的RoI,Lmask只是k类的gt map与他算损失,其他类的都不影响。
实验
实例分割
在COCO的实例分割的数据集上取得了较好的效果。
与FCIS的效果比较
目标检测
在目标检测数据集上也取得了较好的效果。
关键点检测
消融实验
参考:
https://zhuanlan.zhihu.com/p/402224313(很好的作者。还有配套的视频讲解!)
小白记录学习,主要是加强自己对论文的理解,如有错误,欢迎批评指正。