基于区域的全卷积网络(R-CNN)的演进:Mask R-CNN
题目描述
图像实例分割(Instance Segmentation)是计算机视觉中的一项核心任务,它要求算法不仅要检测出图像中每个感兴趣物体的边界框(目标检测),还要精确地分割出每个物体的像素级掩膜(语义分割)。Mask R-CNN 是何恺明等人于 2017 年提出的一个经典算法,它是在 Faster R-CNN(一个优秀的目标检测框架)的基础上扩展而来,通过增加一个并行的掩膜预测分支,实现了高效、准确的实例分割。请你详细讲解 Mask R-CNN 的算法架构、核心创新点以及其训练和推理过程。
解题过程(循序渐进讲解)
步骤1:回顾基础——Faster R-CNN 的架构
要理解 Mask R-CNN,必须先理解其主干网络 Faster R-CNN。
- 骨干网络(Backbone):通常是一个卷积神经网络(如 ResNet),用于从输入图像中提取多尺度特征图(Feature Map)。
- 区域建议网络(RPN):在特征图上滑动一个小的网络,生成一系列可能包含物体的候选区域(Region Proposals,也称为候选框或锚框)。
- RoI 池化层(RoI Pooling):由于 RPN 生成的候选框大小不一,RoI 池化层将这些不同大小的候选区域对应的特征图,统一池化(即采样)成固定大小(例如 7×7)的小特征图。这使得后续的全连接层可以处理。
- 分类与回归分支:
- 分类分支:判断每个候选框属于哪个类别(如人、车、背景等)。
- 边界框回归分支:对候选框的位置和大小进行微调,使其更紧密地贴合物体。
步骤2:识别Faster R-CNN的局限与Mask R-CNN的目标
Faster R-CNN 擅长输出物体的类别和位置(边界框),但它无法告诉我们框内哪些像素属于物体。Mask R-CNN 的目标就是在 Faster R-CNN 的基础上,增加一个能够为每个候选物体输出一个二值掩膜(Binary Mask)的分支,从而实现像素级的实例分割。
步骤3:Mask R-CNN 的核心架构
Mask R-CNN 在 Faster R-CNN 的框架上增加了第三个并行分支,其整体架构如下:
-
共享的骨干网络与RPN:与 Faster R-CNN 完全一致。输入一张图像,通过骨干网络和RPN,得到一组候选区域(RoIs)。
-
关键创新:RoI Align 层:
- 问题:Faster R-CNN 中的 RoI Pooling 进行了两次量化操作。首先,将候选框的坐标(浮点数)量化为整数坐标;其次,在将特征图划分为等份(如 7×7)时,边界也可能被量化。这两次量化会导致特征图与原始图像区域之间产生不对齐(Misalignment)。对于分类任务,这种轻微偏差尚可接受,但对于要求像素精度的掩膜预测,则是致命缺陷。
- 解决方案:Mask R-CNN 提出 RoI Align 层。
- 取消所有量化操作,直接使用浮点数坐标。
- 在每个小“单元”(bin)内,使用双线性插值(Bilinear Interpolation) 精确计算出该单元内若干个采样点(例如 4 个点)的特征值。
- 然后对这些采样点的特征值进行聚合(如取最大或平均),作为该单元的输出值。
- 效果:RoI Align 实现了从特征图区域到原始图像像素位置的像素级对齐,这是提升掩膜预测精度的关键技术。
-
三个并行的任务头(Head):经过 RoI Align 后,每个候选区域得到一个固定大小的特征图(如 14×14×256),这个特征图被送入三个并行的全卷积网络分支:
- 分类头:与 Faster R-CNN 一样,预测类别标签。
- 边界框回归头:与 Faster R-CNN 一样,预测边界框偏移量。
- 掩膜预测头:这是新增的核心分支。
- 它是一个小型的全卷积网络(FCN),通常由几个卷积层和反卷积层(或上采样层)构成。
- 其输入是 RoI Align 后的特征,输出是一个 K × m × m 的矩阵。其中:
- K 是数据集的物体类别总数(不包括背景)。
- m 是掩膜的分辨率(论文中为 28×28)。
- 对于第 k 个通道,它预测的是对于类别 k 的二值掩膜(即物体属于类别 k 部分的像素为1,其余为0)。
- 设计理念:掩膜预测与分类是解耦的。分类分支预测“是什么”,掩膜分支则预测“属于每个类别的部分在哪里”。这种设计避免了类间竞争,比用一个多类 Softmax 直接预测掩膜效果更好。
步骤4:损失函数与训练
Mask R-CNN 的总体损失函数是三个任务损失的和:
L = L_cls + L_box + L_mask
L_cls:分类损失,通常是交叉熵损失。L_box:边界框回归损失,通常是 Smooth L1 损失。L_mask:掩膜损失,对每个 RoI,只在分类分支预测的类别上计算。- 形式是逐像素的二值交叉熵损失(Binary Cross-Entropy Loss)。
- 例如,如果分类头判定当前 RoI 是“狗”(类别 k),那么
L_mask只计算掩膜预测头第 k 个通道输出的二值掩膜与真实掩膜(标注的“狗”的像素区域)之间的损失。其他通道的预测不参与当前 RoI 的损失计算。 - 这样做保证了掩膜预测的类别特异性。
步骤5:推理过程
- 输入一张图像,经过骨干网络和 RPN,得到约数百到数千个候选框。
- 对这些候选框进行非极大值抑制(NMS),去除高度重叠的框,保留得分最高的前 N 个(如 100 个)候选框。
- 对这 N 个候选框,分别进行 RoI Align 和三头预测。
- 对最终结果进行后处理:
- 根据分类分数和设定的阈值,过滤掉低置信度的预测。
- 对于每个保留下来的实例,它的输出包含:类别标签、边界框坐标、以及一个 m×m(如28×28)的掩膜。这个掩膜可以直接使用,或通过插值放大到原始边界框的大小,得到最终的像素级分割结果。
总结
Mask R-CNN 的成功在于其优雅的模块化设计:它以成熟稳健的 Faster R-CNN 目标检测框架为基石,通过引入RoI Align 解决了特征对齐问题,并通过增加一个并行的、与分类解耦的全卷积掩膜预测头,高效地实现了端到端的实例分割。它结构清晰,性能优异,至今仍是实例分割领域最基础和最重要的算法之一,催生了许多后续工作。