Mask RCNN的网络结构如图所示,可以看到其结构与Faster RCNN非常类似,但有3点主要区别:
- 在基础网络中采用了较为优秀的ResNet-FPN结构,多层特征图有利于多尺度物体及小物体的检测。
- 提出了RoI Align方法来替代Rol Pooling,原因是Rol Pooling的取整做法损失了一些精度,而这对于分割任务来说较为致命。
- 得到感兴趣区域的特征后,在原来分类与回归的基础上,增加了一个Mask分支来预测每一个像素的类别。
二 Rol Pooling 和Rol Align
Mask RCNN在Faster RCNN基础上主要做出三点改进,其中之一是提出了Rol Align方法来替代Rol Pooling,原因是Rol Pooling 的取整做法损失了一些精度,而这对于分割任务来说较为致命。
Faster RCNN原始使用的Rol Pooling存在两次取整的操作,导致Rol选取出的特征与最开始回归出的位置有一定的偏差,称之为不匹配问题(Missalignment),严重影响了检测或者分割的准确度。
Maks RCNN提出的Rol Align取消了取整操作,而是保留所有的浮点,然后通过双线性插值的方法获得多个采样点的值,再将多个采样点进行最大值的池化,即可得到该点最终的值。
由于使用了采样点与保留浮点的操作,Rol Align获得了更好的性能。
2.1 Rol Pooling
2.2 Rol Align
三 Mask分支
(1)mask分支的ROI Align与上面分类和回归并不共用,第一个分支ROI Align后得到7*7的尺寸,mask分支得到14*14的尺寸,因为分割任务对精度要求更高,保留更多的细节信息
(2)mask分支中最后连接一个1x1的卷积层,卷积核个数为num_cls+1(背景算一种类别),输出为28x28x(num_cls+1), 每一种类别都预测一个蒙版,大小都是28x28,再使用双线性差值缩放到原图。
(可以加入到1x1的卷积的作用,用作mask多分类)
(3) 训练时,输入到mask分支ROI Align的目标是由RPN提供的,即Proposals正样本(RoI)
预测时,输入到mask分支ROI Align的目标是由Fast RCNN预测的结果提供的
以下两张图来自太阳花的小绿豆的博客
训练:
预测:
四 损失函数
1.分类和回归的损失函数:与Faster RCNN一致
2.mask分支损失函数:掩码二进制交叉熵
mask分支上的损失函数,输出大小为K*m*m,其编码分辨率为m*m的K个二进制mask,即K个类别每个对应一个二进制mask,对每个像素使用sigmoid 函数,maskLoss是平均二进制交叉熵损失。