Mask R-CNN

摘要:

detect object的同时为每个instance 生成segmentation mask。
与faster rcnn的不同在于在bounding box recognition时并行预测object mask,即多加了一个分支。
top results:效果必然好。Without tricks, Mask R-CNN outperforms all existing, single-model entries on instance segmentation, bounding-box object detection, and person keypoint detection, including the COCO 2016 challenge winners.

R-CNN:r-cnn选取candidate object regions和在candidate object regions(将candidate object regions进行放缩到一样大小)上卷积的过程是独立的;fast r-cnn使用RoIPool+共享卷积产生的特征图,在最后一个特征图上进行RoIPool,为每个RoI 产生一样大小的RoI feature vector;faster r-cnn提出的motivation是“为什么不用cnn提取candidate object regions?”,然后作者就用个RPN(FCN)来进行提取candidate object regions了,还给出了每个框是物体的概率,并且和预测class label、box offsets两个分支共享最后的特征图(记住,RPN用最后的特征图只是用来提proposals,在RPN里没有ROI。而在那两个分支:分类和框时,需要RoI。)。
Instance Segmentation:
以前的instance segmentation都是segmentation先于recognition。我们的方法基于并行预测masks和class labels。最近,fully convolutional instance segmentation提出,全卷积会产生 positionsensitive output channels 。这些channels同时处理object classes,boxes,masks,这个系统很快,但是在overlapping instance上会产生系统错误和伪边。

3.Mask R-CNN

Mask R-CNN只不过比faster r-cnn多了一个分支,因此它有三个输出:a class label,a bounding box offset and the object mask。但是这个附加的mask分支和class、boxes不同,它需要提取目标的更精细的空间布局。与Maskr-cnn相比,不能pixel-to-pixel alignment是Fast/faster r-cnn最大的缺陷。
Mask R-CNN:faster rcnn不是分为两阶段嘛。第一阶段RPN,提出candidate object regions;第二阶段,用RoIPool从共享的最后的特征图上,用candidate object regions产生一个相同大小的vector,这个vector来预测class label和bounding box。
而Mask R-CNN的第一阶段和faster rcnn相同。Mask R-CNN的第二阶段,在产生class和box offset的同时,并行产生a binary mask for each RoI。
对每个RoI,都定义一个multi-task loss * L = Lcls + Lbox + Lmask 。其中Lcls和Lbox都和fast r-cnn一样。输出mask的分支,对于每一个RoI,都会输出Km^2维度的输出,其中包括K个binary masks,每个mask都对应一个类(这个mxm应该不是指原图的proposal的分辨率,因为RoIAlign后得到的vector是一样大小的。应该是可以通过这个mxm计算对应原图中的哪些像素)。为此,we apply a per-pixel sigmoid, and define Lmask as the average binary cross-entropy loss.(这个loss怎么实现的,没看懂)For an RoI associated with ground-truth class k, Lmask is only defined on the k-th mask (other mask outputs do not contribute to the loss).
我们这样定义Lmask可以使网络为每个类别产生masks,并且每个类之间没有竞争。(什么类间竞争,这块的原理搞不懂)classification branch可以产生class label,而mask branch不用产生class label,它可直接用分类分支产生的class label。因此,这分离了mask和class的过程。这点和以往使用FCNs进行语义分割很是不同,以往的这些都用a per-pixel softmax and a multinomial cross-entropy loss,因此masks across classes
compete。而我们用 a per-pixel sigmoid and a binary loss,这不会使类间竞争产生mask。
Mask Representation:mask中应该包含input object 的spatiallayout。mask怎样才能包含物体的空间布局呢?你看,在class label和box offsets时,从RoiPool出来后的长vector都被全连接折叠成短vector。使用全连接,打乱了最后的特征图的spatial layout。其实,我们如果用FCN,mask的空间结构就可以通过由卷积提供的pixel-to-pixel的对应自然地被解决。我们使用FCN预测每个RoI的m x m mask。
This pixel-to-pixel behavior requires our RoI features, which themselves are small feature maps, to be well aligned to preserve the explicit per-pixel spatial correspondence. ()
RoIAlign:
RoIPool是如何从一个RoI+特征图得到a small feature map的呢?两个量化过程就能得到了。RoIPool首先将a floating-number RoI量化到离散粒度的feature map上,然后这个quantized RoI就被分为spatial bins;这些bins再量化;最后每个bin覆盖的feature map上的区域就被合并(例如使用max pooling合并),最终就得到一个7X7的small feature map。这种量化方式,会使RoI和the extracted features之间不能对准。虽然这可能不会影响分类,因为分类对小的平移是鲁棒的,但这对predict pixel-accurate masks有很大的副作用。
(其实,由原图proposal到RoI需要经过变换,RoI是对应最后一层特征图的。
我们为什么提取proposal?不如直接提取RoI?所以,由proposal到RoI是由程序计算出来的,可能是个浮点数值,而作为一个浮点的RoI不行呀,需要把RoI具体到占feature map的哪些个像素点,即离散化。离散化过程中,肯定不可能正好整除,会有四舍五入之类的,但舍去一个特征图中的点可能就是舍去原图中的一大片呀。以上是第一步量化。第二部量化就是把RoI占特征图的离散化的点分为7 X 7部分,这也不可能都正好整除呀!所以这一步量化可能也会造成translation。)
为了解决这个副作用,我们避免RoI boundaries or bins的任何量化(不量化了,不求约数了,直接从浮点RoI到浮点bins,然后在求small feature map时,插值!)。使用双线性插值来计算每个bin中四个采样位置的输入特征的精确值,然后合并。使用双线性插值,让不能整除变能整除。(应该是把特征图插值成可以整除的大小。)
**Network Architecture:
为证明我们的方法具有一般性,我们用多个结构实现了Mask R-CNN。这些结构在(i)提取特征的backbone(ii)分类、预测框、预测mask的head上不同。
对于backbone:(1)使用50或者101层的ResNet或者ResNeXt,提取network-depth-feature。(2)使用ResNet-FPN backbone,在速度和精度上都很好。
对于head:除了比faster rcnn多加了mask分支,还extend the faster rcnn head box heads from the ResNet and RPN papers.(具体细节可以看这两篇paper,本文没有详细说。)

3.1 Implementation Details

我们设置了超参数,这些超参数的选择和在faster rcnn中一样。
Training:在Fast R-CNN中,RoI有正有负。IoU大于0.5为正,否则为负。而Lmask是在正RoI上定义的。The mask target is the intersection between an RoI and its associated ground-truth mask(所以,Lmask,在RoI为正时,是用预测出来的mask - mask target,如果RoI为负,则为0)。

posted on 2017-10-24 23:07  MissSimple  阅读(2799)  评论(0编辑  收藏  举报

导航