什么是Mask R-CNN算法?

Mask R-CNN是Faster R-CNN的扩展,它在检测物体的同时也对物体进行分割(实例分割)。

它的主要特点是:

  1. 增加一个分割分支(Mask Branch),用于预测每个RoI中的物体 mask。
  2. mask branch与Faster R-CNN的分类分支共享卷积特征。
  3. 在RoI Pooling后,每个RoI得到K个针对不同类别的mask预测结果。
  4. mask loss加入到Faster R-CNN的总loss中。

主要包含:

  1. Backbone网络:提取输入图像的特征maps。
  2. RPN:生成区域提议。
  3. RoI Pooling:对每个提议框进行特征提取。
  4. 分类分支:判断每个RoI中的物体类别。
  5. 回归分支:精炼每个RoI中的框位置。
  6. 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仍需改进。