Mask R-CNN是Faster R-CNN的扩展,它在检测物体的同时也对物体进行分割(实例分割)。
它的主要特点是:
- 增加一个分割分支(Mask Branch),用于预测每个RoI中的物体 mask。
- mask branch与Faster R-CNN的分类分支共享卷积特征。
- 在RoI Pooling后,每个RoI得到K个针对不同类别的mask预测结果。
- mask loss加入到Faster R-CNN的总loss中。
主要包含:
- Backbone网络:提取输入图像的特征maps。
- RPN:生成区域提议。
- RoI Pooling:对每个提议框进行特征提取。
- 分类分支:判断每个RoI中的物体类别。
- 回归分支:精炼每个RoI中的框位置。
- Mask分支:输出每个RoI中的K个mask,K是类别数。
Mask R-CNN的关键代码如下:
python
# 分类和回归预测
class_logits = classifier(roi_features)
box_deltas = bbox_regressor(roi_features)
# Mask预测
mask_logits = mask_branch(roi_features)
# Loss
cross_entropy = F.cross_entropy(class_logits, rois_labels)
smooth_l1 = F.smooth_l1_loss(box_deltas, rois_deltas)
mask_loss = F.binary_cross_entropy_with_logits(mask_logits, mask_targets)
loss = cross_entropy + smooth_l1 + mask_loss
在上述代码中:
- 分类分支和回归分支与Faster R-CNN相同。
- mask分支输出每个RoI的mask预测。
- mask loss使用二元分类交叉熵计算。
- 总loss包含分类loss、回归loss和mask loss。
Mask R-CNN的提出使得实例分割的任务得到很大提高,其思想也被许多新方法所继承。但mask输出的计算量较大, efficiency仍需改进。