《Mask R-CNN》 进行实例分割,就是要在每一个像素上都表示出来目标所属的具体类别。 完成类别检测,图像分割和特征点定位。
1、解决的问题:在时间上对faster rcnn进行了优化,并且提高准确度,最关键的是在像素级别进行特征点定位达到了将各个对象的边缘确定的效果。
上图是,faster rcnn的分割检测效果。下图是,mask rcnn的分割检测效果,可以明显看到,改进的地方是各个对象的边缘被勾勒了出来,这个技术是论文中提到的像素级别的特征点识别。
2、解决方法:
Mask RCNN在faster rcnn的结构上做出了改善。
大概了解了faster rcnn的网络结构,本论文也作出了简单介绍。Faster rcnn主要分为两个步骤,一是RPN,二是Fast RCNN。第一步骤主要是为了检测边缘,第二步骤是为了提取特征进行分类。faster rcnn使用NN来做区域类别的预测,在Fast-rcnn的基础上使用共享卷积层的方式。卷积后的特征图同样也是可以用来生成区域类别的预测(region proposal)。通过增加两个卷积层来实现Region Proposal Networks (RPNs) , 一个用来将每个特征图 的位置编码成一个向量,另一个则是对每一个位置输出一个 objectness score 和 regressed bounds for k region proposals.
Faster R-CNN 对每个候选对象有两个输出,即一个类标签和一个边界框偏移值。我们在 Faster R-CNN 上添加了第三个分支即输出object mask,从而得到Mask rcnn。因此,Mask R-CNN 是一种自然而且直观的想法。但添加的 mask 输出与类输出和边界框输出不同,需要提取对象的更精细的空间布局。Mask R-CNN 的关键要素包括 pixel-to-pixel 对齐,这是 Fast/Faster R-CNN 主要缺失的一块。
Mask RCNN中,RPN和faster rcnn中的RPN是相同的,第二步骤中的Fast RCNN作出改进:增加了个mask 层,从而可以并行地对每个ROI(兴奋区域)进行预测“各类别”和“边缘”。其中mask的主要特点就是并行。
第一步:对ROI的损失函数重新定义为
对每个RoI的mask分支,其输出维度为Km*m。其中K表示对m*m的图像编码K个二分类mask,每一个mask有K个类别。所以需要应用单像素的sigmoid进行二分类,并定义Lmask为平均二分类cross-entropy loss。对于类别为k的RoI,Lmask定义在第k个掩膜(其他掩膜输出对loss没贡献)
对Lmask的定义允许网络为每个类别生成mask且在类别之间没有竞争。用专门的分类分支来预测类别标签(标签也用来选择输出mask),这样就解耦了类别与mask预测。而FCN用的是单像素的softmax和multinomialcross-entropy loss,在这种情况下,mask和classes之间存在竞争,mask rcnn使用per-pixel sigmoid和binary loss就不会。通过实验表时这是提高instance segmentation的关键点。
第二步:mask层的定义和引入
一个mask对目标的空间布局进行编码,因此,不同于class labels和box offsets(它们通过全连接层利用了 vectors丢失了空间信息),提取mask的空间结构在像素级别即pixel-to-pixel下完成(由相应的convolutions提供),本质还是卷积代替全连接,维持空间信息。
对每个RoI,使用FCN预测m*m个mask,这就允许每个mask分支保持明确的m*m的目标空间布局,而不用将其陷入向量描述(缺少空间维度)。不同于其他模型使用fc layers进行mask预测,Mask RCNN的全连接层需要更少的参数,且精度更高。
这种pixel-to-pixel的行为需要RoI特征,这些特征是小的特征图,为了一致的较好的保持明确的单像素空间对应关系,Mask RCNN提出了RoIAlign,这是对mask预测的关键。
第三步:RoIAlign的定义和引入
RoIAlign解决的问题:
Mask rcnn第二步骤中的RoIPool是对每个RoI提取小的特征图(比如7*7)的标准操作,它首先将一个floating number的RoI量化为discrete granularity(离散粒度)的特征图,然后被量化后的RoI被分成小的空间bin(本身已被量化),最后将每个bin聚合成特征值(通常使用maxpooling)。量化执行的方式为,比如[x/16],其中16为特征图的stride,[]表示取整。同样的,当划分bin(比如7*7)的时候,也要执行量化。
这些量化操作在RoI和提取的特征中引入了misaligments,这也许对分类没有影响,但对预测pixel-accurate的mask有较大的负面作用。
下图是ROIPOOL的三个步骤,其中第二步的量化是连续地X坐标计算,x/16,16是步长。
RoIAlign,移除RoIPool 的harsh 量化,从而调整特征的提取与输入。Mask rcnn提出的改变很简单:避免任何的RoI边界(boundaries)或者bin的量化(比如使用x/16而不是[x/16])。我们在每个RoI bin中的4个常规的采样位置使用双线性插值计算输入特征的准确值,并将结果融合(使用max或average)。RoIAlign对算法有了很大的提高。
网络结构:
Mask RCNN分成三个部分,第一个是主干网络用来进行特征提取,第二个是头结构用来做边界框识别(分类和回归),第三个就是mask预测用来对每一个ROI进行区分。
主干网络使用的是50层的深度残差网络ResNet50和Feature Pyramid Network(FPN)
如上图为ResNet的结构,ResNet提出了一种减轻网络训练负担的残差学习框架,这种网络比以前使用过的网络本质上层次更深。其明确地将这层作为输入层相关的学习残差函数,而不是学习未知的函数。在ImageNet数据集用152 层(据说层数已经超过1000)——比VGG网络深8倍的深度来评估残差网络,但它仍具有较低的复杂度。在2015年大规模视觉识别挑战赛分类任务中赢得了第一。
FPN根据特征的规模大小,从不同级别层次的特征中提取 RoI features 。
在网络主干上,作者的结论是: Using a ResNet-FPN backbone for feature extraction with Mask RCNN gives excellent gains in both accuracy and speed.
头结构:
在网络的头部,我们近似使用faster rcnn之前的结构,添加一个全卷积mask预测分支。特别地,我们从ResNet和FPN来扩展Faster R-CNN box heads。
上图右部分是该网络的头结构,其中14X14是空间分辨率spatial resolution,256是频道数,3X3卷积核进行卷积4次得到14X14X256,再2×2 且步长 stride为 2进行deconvs,并且在隐层使用ReLU,得到28X28X256再进行全连接得到输出,作为网络主干的输入。
训练细节:
ROI判断是否活跃,根据IOU是否具备>=0.5的ground-truth box。损失函数中的Lmask仅受活跃的ROI影响,mask target是ROI和ground-truth box的交集。
在训练中,采用图片中心去训练,且重新resize图片大小为800像素。
3、论文结论
论文中此处这些表格是分别对mask rcnn的内部采用FPN和ROIAlign作出实验进行验证性质上有提高。
此处的AP是平均的IOU 阈值。最终,Mask RCNN的效果对比在下图。
最后将Mask RCNN拓展应用于了城市行人姿势预测 。将关键点的位置建模为 one-hot mask,采用 Mask R-CNN 来预测每个 K 关键点类型(例如左肩,右肘)的 K mask。这个任务证明了 Mask R-CNN 的灵活性。
本文的代码还未开放。目前准备运行并学习下,faster rcnn的代码。