Mask R-CNN论文学习记录

Mask R-CNN是Faster R-CNN的延伸,是在后者原有的bounding box recognition分支上分出一条与之并行的预测object mask的分支。Mask R-CNN仅在Faster R-CNN基础上添加了一点计算量,易于训练,可达到5fps。

下面是Mask R-CNN用于实例分割的框架示意图。

Mask R-CNN论文学习记录

Mask R-CNN有两大值得学习的地方:

1. 添加了一个并行分支使用现有的检测预测得到一个object mask。

2. 用RoIAlign替换RoIPool,解决了misalignment问题。这在小尺寸的object上可以显著提高效果,提升10%-50%。

Faster R-CNN主要有两个步骤:

1. Region Proposal Network(RPN)。找出候选的object bounding boxes。

Mask R-CNN论文学习记录

2. 使用RoIPool从每个候选的box提取特征,并进行classification and bounding-box regression。

Mask R-CNN论文学习记录

Mask R-CNN就在上面第二步分离出一个新的分支,用于为每个RoI产生一个binary mask。

所以RoI的loss就是classification,bounding box和mask三部分的总和,L = Lcls + Lbox + Lmask。这里mask的输出使用了sigmoid函数,Lmask定义为平均二值cross-entropy loss。

下面看一下Faster R-CNN使用的RoIPool。

RoIPool主要经历了两个量化过程:

1. 从ROI到feature map的映射过程。比如[x/16],这里x是原始ROI的坐标值,而方框代表舍入。 

2. 从feature map划分成bin,每个bin再使用max pooling。

正是这些量化导致了misalignment。这也会不会影响最终的分类,但是却对预测像素级别的mask有很大的影响,于是作者提出了RoIAlign来解决这个问题。

RoI映射到feature map后,不再进行四舍五入。然后将候选区域分割成小的单元,比如下图中2x2的单元, 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。

Mask R-CNN论文学习记录

然后作者试验了多个网络结构。

Mask R-CNN论文学习记录

一个是ResNet-50-C4,一个是ResNet_FPN。

下面是在COCO test set上的效果,基于ResNet-101。

Mask R-CNN论文学习记录