文章:https://arxiv.org/abs/1703.06870
代码:https://github.com/facebookresearch/maskrcnn-benchmark
https://github.com/facebookresearch/detectron2
1 核心思想
mask r-cnn是做实例分割的,实例分割需要在正确检测出图像中的所有目标的同时精确地分割每一个实例。整体的framework如下图所示:
其实现是在Faster R-CNN的基础上添加了一个预测mask的分支。另外通过修改Faster R-CNN中的ROIPooling层为ROIAlign层改善了分割和检测效果。
1.1 mask分支
在Faster R-CNN中,针对RPN预测的每一个proposal,都使用Fast R-CNN预测了其类别和bounding box的信息以完成目标检测任务。Mask-RCNN是在分类分支和定位分支的基础上,添加了一个并行的mask分支用于预测每一个像素点处的目标类别。
mask分支是一个FCN网络,为每一个ROI预测一个mask。但是这里作者将分类和mask预测进行了解耦,具体来说就是针对每一个ROI预测一个大小为 K m 2 Km^2 Km2的mask,即针对K类别分别预测一个大小为 m x m 的二进制mask。所以作者使用的是sigmoid激活函数。在FCN中,使用的是softmax预测mask各点的类别,这样就存在了类别的竞争。作者的实验表明,将分类和mask预测解耦有助于提升实例分割效果。
1.2 ROIAlign
在Faster R-CNN中,将ROI对应到feature map使用的是ROIPooling层,ROIPooling中存在两次的近似,第一次是ROI的坐标值除以stride之后不一定是整数,需要将其近似为整数;第二次是对ROI对应的feature map进行池化操作时,其尺寸不一定能按照整数个格子进行池化,如feature map尺寸为 7 * 8,要进行 2 * 2的最大池化操作,每个池化格子包含的feature点数也需要近似为整数。具体过程如下图所示(图片参考自:https://zhuanlan.zhihu.com/p/37998710):
上面的两次取整操作,对于图像分类这种图像级的任务而言影响不大。但对于像素级的实例分割任务而言,则存在了较大的负面影响。因此,作者提出了ROIAlign层替换ROIPooling层,以解决量化误差。
ROIAlign中不再使用任何的取整操作,而是使用双线性差插值估计出小数位置的特征值。具体的处理过程如下图所示:
如上图所示,蓝色的虚线框表示feature map,黑色的实线表示ROI区域,对该ROI要划分成 2 * 2个bin。如左上角的黑色点,其所处的位置为小数值,那么就根据feature map上四个最近邻的整数坐标处的feature map的值去估计其值,正如上图四个箭头所示。这样估计过程中就是相对更加准确的特征值,不存在任何的取整操作,作者的实验结果证明,ROIAlign对分割效果有很大的提升。
1.3 训练及测试细节
网络结构:
作者使用的是ResNet50-FPN/ResNet101-FPN/ResNext101-FPN。
损失函数:
L
=
L
c
l
s
+
L
b
o
x
+
L
m
a
s
k
L= L_{cls} + L_{box} + L_{mask}
L=Lcls+Lbox+Lmask
分类损失和定位损失和Faster R-CNN中完全一致,mask损失是针对具体的类进行计算的,比如分类分支判定当前ROI包含的目标类别为k,那么计算mask损失的时候只是比较第k个预测的mask和标注mask之间的sigmoid交叉熵损失。
预测细节:
预测时,分类和回归分支分别得到了预测结果,mask分支是首先根据预测的类别k,选取总的预测输出
K
m
2
Km^2
Km2中第k类对应的那么mask,然后将该大小为
m
∗
m
m*m
m∗m的mask缩放成和ROI同样的尺寸,然后使用0.5的阈值进行二值化处理得到二进制的mask。
2 实验结果
2.1 在coco的分割数据集上的消融实验
(a)说明网络越深效果越好,使用FPN及一些新的idea之后效果更好;
(b)说明使用sigmoid相比使用softmax进行mask各点处的预测效果会更好,证明了消除了mask上各点的类间竞争之后的正向效果;
©(d)说明ROIAlign比RoiPooling及ROIWarp效果更好;
(e)说明mask分支使用fcn比MLP效果好。
2.2 对比其他实例分割算法
性能指标更好,并且目标的重叠区域没有人工效应。
2.3 目标检测效果
第二行和第五行对比,说明了ROIAlign相比ROIPooling,可以取得更好的检测效果;
第五行和第六行对比,说明多任务联合训练取得的效果更好(分割+检测 vs 检测)。
上下两栏的对比,说明了Mask R-CNN用于检测时优于其他的Faster R-CNN改进算法。
2.4 人体姿态估计效果
实现细节:
将关键点当成是one-hot mask,训练Mask R-CNN去预测K个大小为m * m的mask,每个mask去定位一个关键点。mask中只有单个位置被标注为了前景点,其余都标注为背景点。训练时,mask分支使用的是
m
2
m^2
m2维的softmax交叉熵损失,即在每一个m * m的输出中,只去学习一个关键点。