paper:Mask R-CNN
作者:Kaiming He
摘要:
其实,这篇论文中,作者是设计用来解决对象实例分割问题的,所以文章的名字可能起得不算很好,请多包含。但是在Mask R-CNN算法中,可以有效的检测出图像中的对象,同时为每个实例生成高质量的分割掩码。
Mask R-CNN是在Faster R-CNN基础上进行拓展,通过增加一个预测对象掩码的分支,与现有的边界框回归分支并行。其甚至可以处理实例分割任务,目标检测任务,人体关节检测任务。
1. Introduction
作者在这项工作中的目标是为实例分割开发一个相对可行的框架。实例分割任务需要正确检测图像中的所有对象,同时还需要精确分割每个实例。因此,实例分割任务结合了目标检测与语义分割两大任务。前者是对单个对象进行分类,并使用边界框对每个对象进行定位。后者是将每个像素分类到一组固定的类别中,而不区分对象实例,也就是相同类别的内容用同一种像素点表示即可。
Mask R-CNN结果如图所示:
Mask R-CNN是Faster R-CNN的扩展版本,添加一个分支用于对每个感兴趣区域(RoI)进行预测分割掩码,与用于分类和包围盒回归的现有分支并行。这个mask分支由全卷积网络组成,以逐像素点(pixel-to-pixel)的方式对每一个感兴趣区域RoI预测分割掩码。
以上是一个比较直观的结构展示,正确构建掩码分支对于良好的结果至关重要。最重要的是,Faster RCNN不是为网络输入和输出之间的pixel-to-pixel对齐而设计的。这在用于处理实例的实际核心操作RoIPool时,如何执行特征提取的粗略空间量化中最为明显。为了修复错位,作者提出了一个简单的无量化层,称为RoIAlign,它忠实地保留了精确的空间位置。
其次,作者发现将掩码和类预测解耦至关重要。为此,作者独立地为每个类预测一个二进制掩码,类之间没有竞争,并依靠网络的RoI分类分支来预测类别。相比之下,FCNs通常执行每像素进行多类别分类,将分割和分类结合起来,基于实验这对于实例分割效果不佳。
2. Related Work
在RCNN有效性的驱动下,许多实例分割方法都是基于分割建议的(segment proposals)。早期的方法采用自下而上的分割。DeepMask和一些后续研究提出细分候选(segment candidates),然后由Fast R-CNN进行分类。在这些方法中,分割先于识别,这是缓慢且不太准确的。类似地,还有人提出了一种复杂的多级级联,该级联从包围盒候选框中预测分割候选框,然后进行分类。而在Mask R-CNN中,则是基于并行掩码预测与类标签预测,更简单且更灵活。
还有学者将某研究成果中的分割候选系统与目标检测系统结合起来,实现全卷积实例分割“fully convolutional instance segmentation” (FCIS)。其想法是由全卷积网络对一组位置敏感进行预测并输出一组channels,这些channels同时处理对象类、回归框和掩码,使系统速度更快。但是FCIS在重叠实例上表现出系统误差,并产生虚假边缘,表明它受到分割实例的根本困难的挑战。
实例分割的另一系列解决方案是由语义分割的成功驱动的。从每像素分类结果开始,这些方法试图将同一类别的像素切割成不同的实例。与这些方法的分段优先策略(segmentation-first strategy)相反,Mask R-CNN基于实例优先策略(instance-first strategy)。
3. Mask R-CNN
Mask R-CNN在概念上很简单:Faster R-CNN对每个候选对象都有两个输出,一个类标签和一个边界框偏移量,对此作者添加了第三个分支来输出对象掩码。但是额外的掩码输出不同于实例对象类标签和回归框输出,需要提取对象的更精细的空间布局。对于Faster R-CNN,其主要的缺失部分是pixel-to-pixel对齐。
3.1 Faster R-CNN
首先回顾一些Faster R-CNN结构。其包含两个步骤:
1)第一阶段称为区域建议网络(Region Proposal Network,RPN),提出候选对象边界框。
2)第二阶段本质上是Fast R-CNN,使用RoIPool从每个候选框中提取特征,并执行分类和包围盒回归。
两个阶段使用的特征可以共享,以便更快地推断。
详细的Faster R-CNN结构介绍,可以参考我另一篇笔记:目标检测算法——Faster R-CNN
3.2 Mask R-CNN
Mask R-CNN采用相同的两阶段程序:第一阶段相同(即RPN)。在第二阶段,在预测类和边界框偏移的同时,Mask R-CNN还为每个RoI输出一个二进制掩码。这与其他系统中分类依赖于掩码预测形成对比。Mask R-CNN遵循着Faster R-CNN的思想,并行应用包围盒分类和回归,在很大程度上简化了原始的 R-CNN多级处理流程。
3.3 Mask Representation
遮罩对输入对象的空间布局进行编码。因此,与类别标签或边界框偏移不可避免地被全连接层折叠成短输出向量不同,提取掩码的空间结构可以自然地通过卷积提供的pixel-to-pixel的对应来解决。
具体来说,作者对每一个RoI使用FCN来预测一个分辨率大小为m × m m \times mm×m的掩码。这允许掩码分支中的每个层保持显式的m × m m × mm×m对象空间布局,而不会将其折叠为缺少空间维度的矢量表示。不像以前的方法使用全连接层的掩码预测,Mask R-CNN使用全卷积表示需要更少的参数,更准确的实验证明。
对于处理后得到的RoI来说,是一个尺度比较小的特征图。而pixel-to-pixel的方式要求RoI特征能够很好的对齐,以清晰地保持每像素的明确空间对应。这促使作者开发了以下在掩码预测中起关键作用的RoIAlign层。
3.4 RoIAlign
在Faster RCNN中,RoIPool是将提取出的RoI进行统一池化为7x7尺度大小特征图的标准操作。RoIPool首先将一个浮点数RoI量化为特征图的离散粒度,然后将这个量化的RoI细分为空间仓,这些空间仓本身被量化,最后聚合每个仓覆盖的特征值(通常通过max pooling)。简单的说,RoIPool就是将w × h w \times hw×h的特征图,统一标准地池化为7x7大小的结果。这些量化在RoI和提取的特征之间引入了不对准。虽然这可能不会影响分类,分类对于小的转换是稳健的,但是它对预测像素精确的掩码有很大的负面影响。
为了解决这个问题,作者提出了一个RoIAlign层,它消除了RoIPool的苛刻量化,将提取的特征与输入适当对齐。作者避免对RoI边界或面元进行任何量化(即使用x/16而不是[x/16]),然后使用双线性插值计算每个RoI bin中四个规则采样位置的输入特征的精确值,并汇总结果(使用最大值或平均值)。
对于RPN网络输出的RoI,一般是会在特征图上进行了些许偏移如实现框所示,这个偏移的边界框同样会包含多个特征点。我的理解是,一般在对原目标映射在特征图上时会出现浮点数坐标,如图所示:
(图片来源于https://blog.csdn.net/gusui7202/article/details/84799535)
由上可以看到,由于偏移后的边界框与RoI区域,一般都是随机性的,所以划分为kxk个bin的时候不一定能够整除,如图所示:
(图片来源于https://blog.csdn.net/gusui7202/article/details/84799535)
对于量化严重的RoIpool可能会进行如下所示的操作:
这样就会出现量化误差,RoIAlign所做的其实很简单,只是保持原有的分区不变,而对于浮点坐标只是进行双线性插值进行处理而已。使得可以对分区进行均匀区分。而在池化时,提取出每个区域的中心点,使用双线性插值就可以得到此时区域的值。9个Bin格,9个中心点,9个特征值。
而作者注意到,只要不执行量化,结果对精确的采样位置或采样多少点不敏感。所以,也就是,不需要对每个区域的中心值进行采样,其他位置也可以,关键就是要不进行量化操作即可。在作者原文中,就使用双线性插值计算每个RoI bin中四个规则采样位置的输入特征的精确值,并汇总结果(使用最大值或平均值),如图所示:
RoIAlign带来了很大的改进,这证明了对齐的关键作用。
3.5 Network Architecture
Mask R-CNN的结构为:
1)卷积主干架构用于整个图像的特征提取。
2)边界框识别(分类与回归)和掩码预测的网络头,分别应用于每个RoI。
结构如图所示:
3.6 Implementation Details
按照现有的Fast/Faster R-CNN工作设置超参数,虽然是为了目标检测而设置,但是对于实例分割中同样有用。
3.6.1 Training
3.6.2 Inference
在推断时,候选框对于C4主干网是300,而对于FPN是1000。然后在这些候选框上运行box预测分支(包含分类与回归),然后是非最大抑制处理。然后将掩码分支应用于最高得分的100个检测框(这不同于训练中使用的并行计算),掩码分支可以预测每个RoI的k kk个掩码,但是这里只使用第k kk个掩码,其中k kk是分类分支预测的类。然后将m×m浮点数掩码输出调整到RoI大小,并在0.5的阈值下进行二进制化。
4. Result
- 实例分割效果:
- 目标检测效果:
总结:
在Faster R-CNN的基础上进行了改进使得可以处理实例分割任务。提出了RoIAlign来替换掉RoIPool,使得处理检测任务性能更好。
所以,个人认为,Mask R-CNN作为一种新的目标检测算法,其实只是改进了RoIPool,进一步强调了对其的重要性。