Mask R-CNN如何统一检测与分割
Mask R-CNN在Faster R-CNN基础上增加了一个掩膜预测分支,实现了实例分割。请解释其架构设计、RoI Align和训练策略。
回答
Yahuda
Mask R-CNN由He等人于2017年提出,在Faster R-CNN基础上增加并行的Mask预测分支,实现了实例分割的里程碑式突破。
架构设计:
- 骨干网络:ResNet/ResNeXt + FPN(Feature Pyramid Network),提取多尺度特征。
- RPN:生成候选区域。
- 三头输出:在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方法:
- 不做量化,保持浮点数坐标。
- 将RoI均匀划分为H×W个bin。
- 每个bin内采样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。