Mask R-CNN

1.整体框架

Mask R-CNN_第1张图片

Mask R-CNN在Faster R-CNN的CNN特征提取层后增加了一个全卷积网络(Fully Convolutional Network, FCN)用于生成mask(分割结果)。

作者在文中提到,backbone选用ResNet-FPN得到的性能最佳。

2. RoIAlign

2.1 RoIPooling局限性分析

在两极目标检测框架中,ROIPooling的作用是根据预选框的位置坐标在特征图中对应的区域池化为固定尺寸的特征图,以便后续的分类和包围框回归的操作。由于预选框的位置由模型回归得到,一般得到的值为浮点数,而池化后的特征图要求尺寸固定,因此此处也存在不整除的问题。综上,RoIPooling操作中总共包括两次量化(quantization):

1)将候选边框量化为整数的坐标值;

2)将量化后的区域平均分割成k*k个单元(bin),对每个bin的边界坐标进行量化。

经过上面两个量化过程后,此时得到的候选框已经与最开始回归得到的框有了一定的偏差,这个偏差会影响检测或者分割的准确度。在原论文中,作者将它称为“不匹配问题(misalignment)”。

misalignment举例说明:

Mask R-CNN_第2张图片

如上图所示,这是一个faster-rcnn的检测框架。输入为800*800图像,图片上有一个665*665的包围框(一只狗)。图像在经过主干网络(VGG16)提取特征后,特征图缩放步长(stride)为32,因此图像和包围框的边长都变为原来的1/32。原图边长变为800/32=25,包围框边长变为665/32=20.78。经过RoIPooling量化后,特征图中包围框的边长为20。接下来对特征中的框池化为7*7大小,每个bin的边长大小为20/7≈2.86,经过RoIPooling再次量化后,bin的边长大小为2。经过RoIPooling中的两次量化后,候选区域出现了较为明显的偏差(如下图绿色部分)。该特征图上0.1个像素对应原图为3.2像素,特征图上的0.8像素对应原图接近30个像素的差别,这一差别不容小觑。

Mask R-CNN_第3张图片

2.2 RoIAlign

Mask R-CNN_第4张图片

为了解决2.1中提到的RoIPooling中存在的misalignment问题,作者提出了RoIAlign这一改进方法(如上图所示)。RoIAlign的思路为:取消量化操作,使用双线性插值的方法得到浮点坐标对应的图像数值,从而将整个特征聚集过程转化为一个连续的操作(如下图)。

Mask R-CNN_第5张图片

具体操作流程:

1)遍历每个候选区域,保持浮点数边界不做量化;

2)将候选区域分割为k*k个bin,每个bin的边界不做量化;

3)在每个bin中采用双线性插值的方法计算四个坐标值,然后进行池化操作。

3.decouple

作者将mask和分类两个操作进行了解耦(decouple),即每一类别物体分别预测mask。

4.损失函数

损失函数由分类损失(同Faster R-CNN)、位置损失(同Faster R-CNN)、mask损失三部分构成。

其中mask为k*m*m维向量,其中k为类别数量,m*m是mask的最终的长和宽。计算每个像素的sigmoid结果,最终mask的损失为二维交叉熵损失的平均值(average binary cross-entropy loss)。

 

【参考】

1. https://blog.csdn.net/u012897374/article/details/80768199

2. https://zhuanlan.zhihu.com/p/40538057

 

你可能感兴趣的:(深度学习)