CodeWalk

Mask R-CNN如何统一检测与分割

作者:Yahuda · 2026-05-30 12:55

Mask R-CNN在Faster R-CNN基础上增加了一个掩膜预测分支,实现了实例分割。请解释其架构设计、RoI Align和训练策略。

回答

Yahuda

Mask R-CNN由He等人于2017年提出,在Faster R-CNN基础上增加并行的Mask预测分支,实现了实例分割的里程碑式突破。

架构设计

  1. 骨干网络:ResNet/ResNeXt + FPN(Feature Pyramid Network),提取多尺度特征。
  2. RPN:生成候选区域。
  3. 三头输出:在RoI特征上并行三个分支:
    • 分类分支:预测目标类别。
    • 回归分支:预测边界框位置。
    • Mask分支:一个全卷积网络(FCN),为每个RoI预测一个K×m×m的二进制掩膜(K为类别数,m通常为28)。

RoI Align(核心创新)

  • 解决Faster R-CNN中RoI Pooling的量化取整导致的空间不对齐问题。
  • RoI Pooling问题:将RoI区域划分为H×W个bin时,边界会进行两次量化(坐标取整+池化取整),造成像素级偏移。
  • RoI Align方法:
    1. 不做量化,保持浮点数坐标。
    2. 将RoI均匀划分为H×W个bin。
    3. 每个bin内采样4个点(双线性插值计算)。
    4. 对4个点取最大值或平均值作为bin输出。
  • 好处:保留了像素级的空间对应关系,对像素级Mask预测任务至关重要。

训练策略

  • 多任务损失:L = L_cls + L_box + L_mask
  • L_mask定义为每个RoI的逐像素二值交叉熵损失(每个类别独立计算),仅对正样本RoI的真实类别计算损失。
  • 推理时,分类分支预测类别,Mask分支输出该类别的二值掩膜。

性能:COCO实例分割AP达到37.1(基于ResNet-101-FPN),速度约5 FPS。