图像分割、目标检测 MASK R-CNN 论文阅读笔记

来源:互联网 发布:淘宝童装裤子 编辑:程序博客网 时间:2024/06/05 20:32

图像分割、目标检测 MASK R-CNN 论文阅读笔记


原文: MASK R-CNN作者: Kaiming He, Georgia Gkioxari, Piotr Dollar, Ross Girshick下载地址: https://arxiv.org/abs/1703.06870

1 简介

  • 作者提出的Mask R-CNN是Faster R-CNN的升级版,以往Faster R-CNN可以实现分类和目标检测,现在Mask R-CNN又多了一个分割功能。以下面的图为例,绿色的矩形框是目标检测,白色的文字是分类结果,人身上的色块则是图像分割的结果。Mask R-CNN的分类、检测、分割三个输出都是并行的。
  • Mask R-CNN做的是实例分割,而不是语义分割。二者的区别是:后者只需要把一张图中属于某一类的东西全部抠出来就好了,而前者要把某一类中不同的个体再细抠出来。
  • 先对其性能有个大致的了解。Mask R-CNN的运行速度达到了5fps,还是相当不错的,而准确度远超过COCO 15和16的冠军。作者还谦虚表示,此模型只是一个baseline,从这里还可以发展出更多优秀的算法,并表示代码会开源。
    image.png-452.7kB

2 模型介绍

  • 在Mask R-CNN中,新增加的mask输出分支虽然和classification、bounding box两个输出是并行关系,但mask更加复杂一些,需要物体更精细的空间分布。作者接下来也是着重介绍网络中关于mask生成的部分。其中最主要的是pixel-to-pixel alignment

2.1 Faster R-CNN 简单回顾

  • 此部分可以参考我的博文 目标检测 Faster R-CNN 论文笔记。Faster R-CNN分成RPNFast R-CNN两个部分。前者从一张图像中提取特征图,选出候选区域,用向量表示;后者承接前面的向量,用全连接网络分别输出classification和bounding box。
    image.png-19.1kB

2.2 Mask 表示

  • Mask其实就是一个0-1二值图片,尺寸和原图完全相等。对于每个ROI,都有 K 个 m*m 分辨率的mask,其中K表示类别数量。从1个ROI到K个mask的过程,用全卷积层(FCN)传播,这样可以保持每层的尺寸不会缩减。

2.3 Mask R-CNN损失

  • 在训练时,作者仿照Faster R-CNN定义一个多任务损失:L=Lcls+Lbox+Lmask
  • 为表示mask的损失Lmask,只要对于每一个像素,用sigmod函数进行求相对熵,得到平均相对熵的误差即可。对于第k个类别,Lmask也只由第k个mask和第k个ground truth计算得到,其他mask不参与贡献。像这样为每个class都生成一个mask有一个好处,就是不同的类之间不会出现竞争情况。
    image.png-71.6kB

2.4 ROIAlign

  • 说道此部分,首先先了解一下 Faster R-CNN 中的 ROIPool。首先量化ROI值,比如通过网络得出的ROI左上角坐标是(10.1,12.3),量化后为(10,12)。 接着量化后的ROI被分成固定的几个区域;最后每个区域聚合成一个值(见http://blog.csdn.net/cyiano/article/details/70141957#t4)。这样的结果是不论何种大小的输入都会变成同一种尺寸大小的输出。
  • 顺便一提,如果ROIPool前后的尺寸不是整除关系怎么办呢(比如从7*7pooling到3*3):只要取整就好了。此时ROI被分出来的每个窗口大小是cell(7/3),而窗口滑动步长是floor(7/3),大家可以自己在纸上比划一下。
  • 上述的这种ROIPool会导致ROI和提取特征之间的misalignments。因此需要用ROIAlign来解决:
    image.png-179.5kB

2.5 网络结构

  • 作者将网络分成两个部分:用于提取特征的“backbone”,和用于classification、regression、mask prediction的“head”
  • “backbone”方面,作者用了两种不同深度的残差网络:50层的ResNet和101层的ResNeXt。这几个残差可以分成4段,特征将在最后的卷积层C4提取出来。另外,作者还使用了Feature Pyramid Network(FPN)。FPN会从不同等级的特征金字塔中提取ROI特征,实验也表明,在backbone中用FPN效果更好。
  • “head”方面,根据之前的backbone是Resnet还是FPN有两种形式:
    image.png-87.7kB

3 实例分割实验

3.1 主要结果

  • 作者采用的评价框架是COCO,指标有AP(averaged over IOU thresholds),AP50AP75APSAPMAPL。训练图像85k张,验证图像35k张,用于剥离实验的图像5k张。
  • 实验结果如下面的Table1,与前两年COCO冠军相比,Mask R-CNN取得了很好的结果。FCIS+++在重叠的实例部分展示出systematic artifacts,而Mask R-CNN则不会。
    image_1bj6qocc91idf1pro1grp16gp127i9.png-81.2kB
    image_1bj6qpsda1o92t61tacjm6ou7m.png-349.8kB

3.2 剥离实验

只说结果:

  • 结构方面,使用FPN或ResNeXt可以改善AP,增加网络层数也可以进一步改善。
  • Mask R-CNN分离了分类和掩膜两个任务,相比于二者联合的方法,性能提高不少。
  • 对于分类不可知的mask性能没有比分类可知的差太多。
  • RoIAlign对pool时用max还是average不敏感;RoIAlign与RoIPool和RoIWarp相比,效果明显更好,RoIWarp虽然用到了双三次采样,但还是引进了量化过程。
  • 当RoIAlign用在更大步长的网络层中时(32),AP增长更高一些。因为大步长时,misalignment更严重,原先的RoIPool方法更加恶化。
  • FCN比MLP好。

image_1bj6se7vfout1gqkhvv1nqe18e013.png-173kB

3.3 bounding box 检测结果

  • 除了Mask R-CNN,作者另外训练了一个没有mask部分的网络:Faster R-CNN, RoIAlign。它与Mask R-CNN两个版本均超过了原有的方法。注意到Mask R-CNN比Faster R-CNN, RoIAlign低一些,这主要受益于多任务训练(原因不明)

3.4 时间

  • 对于ResNet-101-FPN,195ms per image on an Nvidia Tesla M40 GPU (plus 15ms CPU time resizing the outputs to the original resolution)。对于ResNet-101-C4,takes ∼400ms as it has a heavier box head。
  • Training with ResNet-50-FPN on COCO trainval35k takes 32 hours in our synchronized 8-GPU implementation (0.72s per 16- image mini-batch), and 44 hours with ResNet-101-FPN.