Mask R-CNN
arXiv : https://arxiv.org/pdf/1703.06870.pdf
github: https://github.com/matterport/Mask_RCNN
conf & anthor: ICCV17,Kaiming He et. al
intro: ROI Align, FCN
主要内容:
Mask R-CNN通过在Faster R-CNN的基础上,在RPN网络得到RoI之后,增加一个分支FCN网络,实现对BBox中的物体进行实体分割。
基本思路:
Faster R-CNN中通过RPN可以得到一些RoI,这些区域通过RoI pooling之后,再经过全连接网络计算目标的类别和坐标。在Mask R-CNN中,在RoI的基础上,新增一个全卷积分支网络,以实现目标的分割任务。
(1) ROI Align
: Fast R-CNN中使用的ROI pooling操作,首先要确定region在最后的feature map上的位置,这一步需要将像素坐标转换到feature map坐标上,比如 x / 16 x/16 x/16然后取整;然后需要将feature map上的区域划分为 n ∗ n n*n n∗n(如 7 ∗ 7 7*7 7∗7)的格子,做pooling操作;这两步操作需要进行quantization(量化),会造成坐标精度的损失。因此,Mask R-CNN中提出了RoIAlign操作,避免了由于量化操作带来的坐标精度的损失。具体的做法如下图:在将像素坐标转换到feature map坐标这一步上,不进行取整,得到的是带小数位的feature map上的坐标,然后将该AlignBox划分为n*n的格子,每个格子中均匀采样四个点,每个点的值通过在feature map上进行双线性插值得到。最后在每个格子中通过平均或者最大池化得到输出。 在TensorFlow中,RoIAlign可以通过tf.image.crop_and_resize()
函数简化实现,简化的方面是将格子中心的插值结果最为输出,而不是取四个点再做池化。
(2) 分支网络
:Mask R-CNN中在ROIAlign之后增加了一条全卷积的分支网络,用于Mask的预测。文章中对以ResNet和FPN为主干网络分别设计了两种分支结构。以ResNet为例,如下图,经过deconv扩大feature map的尺寸,最后输出的mask的尺寸为 14 ∗ 14 ∗ 80 14*14*80 14∗14∗80,通道数目为80是为每一个类别预测了一个mask(coco数据集的类别数目为80)。