Mask RCNN基于Faster RCNN改进,所以若有看不懂的地方可以先去看看我上篇博客Faster R-CNN整体介绍及部分细节讲解
论文全称:Mask R-CNN
一、整体总结
1. general notes
主要性能提升是因为RoIAlign(双线性插值+对齐)
用FCN在faster rcnn基础上预测了mask(每类一个FCN)
两个backbone,分别是FPN和ResNet(对应faster rcnn中的conv layers)
mask分支有改进空间,且时间效率可提高
可用于实例分割、位姿估计(每个mask是one-hot的的一个关键点位置)、检测工作
2. 整体架构
Mask RCNN的整体架构如图所示。
首先用backbone网络处理原始图像,得到特征图feature map,同时将backbone网络输出的特征输入到RPN网络中,得到相应的锚框,此处需要注意Faster RCNN使用resnet50时,从CONV4导出特征供RPN使用,而不是直接使用完整的resnet50所生成的特征供RPN使用。得到锚框和特征图了之后,采用RoIAlign的方式,将每个锚框对应的特征图统一为单一尺寸,也就是得到每个锚框的fixed size feature map。在得到每个锚框的特征图之后,将该特征图输入到全连接层中,再分别经过reg层和cls层得到box regression,也就是锚框位置矫正和classification,也就是该锚框中物体是每一类的概率。如上所讲的部分,除了RoIAlign层之外,均和faster RCNN的结构相同,所以具体讲解可参照上篇博客Faster R-CNN整体介绍及部分细节讲解,而RoIAlign层在本篇博客的第三部分有具体讲解。
本篇论文除了RoIAlign之外,还增添了mask分支,使得该网络可以做到实例分割。mask分支的架构如下图中黑色部分所示(图中方块显示的是数据大小,箭头表示conv层、deconv层或fc层)。在mask分支中,针对每一个锚框,均生成K个mask,其中K是目标类别数,然而只有检测模块检测出的类k(当前锚框中物体是类k物体)的mask才会被输出,并且对loss有贡献,其他的mask均被丢弃。
二、论文细节
- 每个ROI(region of interest,感兴趣区域)针对每一类生成一个mask,生成方式是FCN网络,也就是在目标类别数为k的时候,每一个ROI都经过k个不同的FCN生成k个不同的mask。然而只采用检测出的类别对应的mask计算损失函数。mask的损失函数Lmask是平均交叉熵,使用的激活函数是per-pixel sigmoid。
- 类别预测、框偏差预测用全连接层(分别对应Faster RCNN中的cls层和reg层),提取mask的空域信息用卷积。
- 将faster RCNN中的ROI Pooling换为了ROI Align,因为ROI Align能够更好保留像素级别的信息。在Align中用x/16来代替Pooling中的 ⌊ x / 16 ⌋ \lfloor x/16\rfloor ⌊<