Mask R-CNN 是 2017 年何恺明团队提出的一个基础网络,可以同时用于「Object Detection」和「Instance Segmentation」,借鉴了 Fast R-CNN 的多任务 Loss ,一举获得最佳论文奖。

论文:Mask R-CNN

核心思想

在 Fast R-CNN 中,rbg 大神引入了 Multi-Tasks Loss 发现对效果的提升有着显著的作用,我们的何恺明同学再次将这一思想运用到了 Mask R-CNN——添加一个 Mask 的 Loss 的支路。添加这一支路看似简单但效果的确明显,在没有运用其他 tricks 的情况下,一举夺下了当年几个比赛的第一。

除此之外,沿用 Faster R-CNN 的网络结构,但是对特征提取的前驱 backbone 网络做了更换,使用现在效果更好的 ResNeXt 并结合上 FPN 结构,再次提高了整个网络的性能。

流程步骤


Mask R-CNN

一图胜千言,整个网络流程如上图所示。

核心部分

Mask R-CNN 更换 Backbone 这一部分我们就不探讨了,有兴趣的可以深入了解 ResNeXt 和 FPN 这两者的论文,接下来我们最着重讲的就是 ROI AlignMulti-Tasks Loss

前者允许了更加精细的位置映射,达到了 piexl-to-piexl 的细粒度;后者允许我们输出目标结果的同时,输出目标的 mask ,提高了整个网络的性能。

ROI Align

首先我们要定义一下原文的 Quantization 到底是什么,这样我们才能理解 ROI Pooling 和 ROI Align 的本质区别。

Quantization 中文的直译是「量化」、「数字化」,放在 Pooling 里面理解就是「整数化」。这样说可能有点抽象,我们都输出 shape 是 2x2 的区域,用 ROI Pooling 和 ROI Align 两种方式展示「圈定区域的方式」。

计算公式

ROI Pooling: $x = [x/S] + 1$

ROI Align: $x = x/S$

前者使用 $[]$ 对结果进行了取整,损失了小数点,而后者保留了小数点。

别看小数点小,但是卷积后 feature map 的 1 个点代表着原图的 S 个点。以 $S=16$ 为例,假设目标框 $x=600$ ,转换到卷积后就是 $600 / 16 = 37.5$ ,卷积后 feature map 差 $0.5$ 意味着原图差 $8$ 。

我们可以从数字上理解,ROI Align 保留了更多的信息,减少了卷积前和卷积后的位置误差,允许了 pixel-to-piexl 的训练和预测。

直观图像


ROI Pool

我们看两个图的对比就能理解,左图是 ROI Pooling 右图是 ROI Align 。前者一开始没有考虑到 pixel-to-pixel 训练和预测,做了一个简单的适应;但是后者为了确保信息前后对应、完整,做了更加复杂的处理。


ROI Align

同样是输出 2x2 的区域,后者将区域均分成 2x2 的网格,然后对网格进行 bilinear interpolation(双线性插值),最后输出我们要的区域。


ROI Align Interpolation

关于图像的双线性插值各位看客可以看这篇 图像缩放——双线性插值算法 ,利用双线性插值的方式得到了我们新的 2x2 网格,再进行 MaxPooling 得到我们的输出。

Multi-Tasks Loss

继承与 Fast R-CNN ,我们多了一条支路,同时输出 mask ,那么我们的 Loss 也要相应的改变:

$$L = L_{cls} + L_{box} + L_{mask}$$

其中 $L_{cls}$ 和 $L_{box}$ 与 Faster R-CNN 一致,重点谈谈我们的 $L_{mask}$ 。

m x m 的图像上,支路 mask 会输出 $Km^2$ 维度的数据,其中 $K$ 代表 k 个类别。特别需要注意的是,对于每个 pixel ,我们使用 sigmoid 函数来输出是某类的概率。

训练的时候,$L_{mask}$ 的定义只和真实标签那一类的 mask 有关,其他 mask 与我们无关。

For an RoI associated with ground-truth class k, $L_{mask}$ is only defined on the k-th mask (other mask outputs do not contribute to the loss)

除此之外,作者们给出了为什么使用 sigmoid 的原因:softmax 会导致竞争,而 sigmoid 不会;也正是因为这个不需要和其他类别竞争,我们可以得到更好更精确的结果。


Mask Loss Compete

总结 Summary


R-CNN Evolution Sturct

更换优秀性能的 Backbone 、融合 FPN 的特性、多重任务同时进行,Mask R-CNN 的三驾马车——回归、分类、分割,让人连连称赞。

简单易懂的思想和业界领先的性能,期待着未来更优秀的作品,站着巨人的肩膀看着未来!

参考资料 Reference

  1. Mask R-CNN “Mask R-CNN”
  2. mask rcnn解读
  3. 图像缩放——双线性插值算法