论文:Mask R-CNN
Github:https://github.com/facebookresearch/Detectron
论文主要基于检测框架faster RCNN的基础上,增加了一个实例分割的head分支模块,从而实现Instance segment。实际速度可以达到5fps。
RCNN,fast RCNN,faster RCNN,mask RCNN进化史:
RCNN:
整体流程不是端到端,分成了3个独立的过程
- 候选框提取采用selective search方法
- CNN模块对候选区域提取特征
- SVM进行分类,LSR进行回归
fast RCNN:
整体流程依然不是端到端,分成了2个独立的过程,selective search提取候选区域的过程,以及后续的提特征,分类回归这2个过程
相比RCNN的改进:
- 使用softmax代替svm,使用smooth L1代替LSR
- 提出了roi pooling,使得提特征和分类回归这2部分端到端
faster RCNN:
整体流程端到端实现
相比fast RCNN的改进:
1.提出RPN结构,终于使得整个检测框架端到端。
mask RCNN:
相比faster RCNN主要改进在于
- 增加了mask branch这个做instance segment的head分支,并且训练使用binary sigmoid loss而不是softmax
- 基础backbone采用了FPN思想
- Roi pooling升级为roi align,避免了2次量化精度的损失
论文贡献:
(1)Mask 分支的Instance segment实现
(2)Roi pooling的改进版Roi align
(3)和yolo-v3一样,使用多个binary sigmoid 来替换softmax
整体框架:
总体loss:
分别代表分类的loss,边界框回归的loss,实例分割的loss。
ROI align:
ROI pooling操作细节:
ROI align操作细节:
Mask 模块结构:
实验结果:
coco实例分割结果:
Mask rcnn 的分割结果优于fully convolutional instance segmentation (FCIS)
各个改进点对结果的提升:
(a)resnext的结果优于resnet101,resnet101的结果优于resnet50。FPN的使用会对结果有提升。
(b)多分类任务使用多个sigmoid效果优于使用1个softmax,避免了各个像素对应类别之间的竞争,解决了1个像素可能同时属于多个类别的问题。
(c)RoiAlign>RoiWarp>RoiPool
(d)使用Resnet50的第5个卷积层(stride=32)比第4个卷积层(stride=16),更能体现出RoiAlign比RoiPool具有更大的优势。RoiAlign对misalignment具有更好的鲁棒。
(e)Mask分支中,使用FCN结构比MLP结构效果更好,因为FCN可以编码空间布局信息。
coco物体检测结果:
coco关键点检测结果:
Cityscapes 实例分割结果: