前言

今天开始学习Mask RCNN,大概是Faster RCNN的升级版。这里我们还是老规矩,用最简单的语言去讲原理,不求面面俱到,但求清晰明了。

算法初识

1》算法能干什么?
答:算法可以用来做“目标检测”、“目标实例分割”、“目标关键点检测”。

2》算法有什么优点? 答:Mask R-CNN是一个非常灵活的框架,可以增加不同的分支完成不同的任务,可以完成目标分类、目标检测、语义分割、实例分割、人体姿势识别等多种任务,高速、高准确率、简单直观。 这理解是一个概念:实例分割。通常意义上的目标分割指的是语义分割,语义分割已经有很长的发展历史,已经取得了很好地进展,目前有很多的学者在做这方面的研究;然而实例分割是一个从目标分割领域独立出来的一个小领域,是最近几年才发展起来的,与前者相比,后者更加复杂,当前研究的学者也比较少,是一个有研究空间的热门领域,如图所示,这是一个正在探索中的领域。

maskrcnn需要多少数据训练 maskrcnn原理解读_maskrcnn需要多少数据训练


观察图中的c和d图,c图是对a图进行语义分割的结果,d图是对a图进行实例分割的结果。两者最大的区别就是图中的"cube对象",在语义分割中给了它们相同的颜色,而在实例分割中却给了不同的颜色。即实例分割需要在语义分割的基础上对同类物体进行更精细的分割。

算法框架

maskrcnn需要多少数据训练 maskrcnn原理解读_算法_02


这里我们先说一下Mask RCNN其实有两种框架结构Faster R-CNN/ResNet和Faster R-CNN/FPN,对应两种Head Architecture。

maskrcnn需要多少数据训练 maskrcnn原理解读_机器学习_03


然后我们回过来看主体结构:这里我们用Faster R-CNN/FPN举例,其实不如说这是Faster R-CNN的升级版,结合了类似SSD和Faster R-CNN的思想,主体结构为ResNet-FPN+Faster R-CNN+mask。这里我们说一下ResNet-FPN结构。

maskrcnn需要多少数据训练 maskrcnn原理解读_机器学习_04


上图我们看到的就是ResNet-FPN结构,可以看出这是利用了感受野加深思想和特征融合思想。利用不同size的感受野,提取不同大小的特征,而且由于使用ResNet和特征融合是网络能更好的融合空间特征信息。

下一部分是Faster R-CNN:我们了解一下他的结构,其实前面我们已经讲过这里就放一张网络结构图,然后说一下网络结构的改进。

maskrcnn需要多少数据训练 maskrcnn原理解读_maskrcnn需要多少数据训练_05


可以看Faster R-CNN是VGG16+RPN+ROIPooling+输出。对于Mask RCNN其实就是用ROI Align替换了ROIPooling。

这里我们重点说一下ROI Align。

首先说一下为什么用ROIPooling,其实实际上ROI区域就是我们所最后选定的anchor,也就是目标区域,既然是目标区域我们就有一个问题,大小不一。这样就会大大增加我们我们网络训练的复杂性,我们如果想缩小这种复杂性,就有一个好办法,即把所有的ROI规范到同一个尺度上。对于ROI有个问题,就是区域有可能不是整数,但是浮点型坐标我们是很难在特征图中标注的。于是ROIPooling就做了两次取整,把ROI区域变成了整值区域。于是就存在一个问题:特征图与原始图像是不对准的(mis-alignment),所以会影响检测精度。实际上ROI Align就是实现了保留小数方法。至于方法就是双线性插值。至于双线性插值,我们可以从线性插值,线性插值就是类似于构造线性函数,然后求坐标。至于双线性插值就是在两个维度上构造函数。然后由于函数性质自然可以求出浮点值的坐标。

至于mask无非就是由FCN产生的掩膜。掩膜就是将目标区域置为一个数值,其他区域置一数值。如下图。

maskrcnn需要多少数据训练 maskrcnn原理解读_maskrcnn需要多少数据训练_06


最后我们看一下Mask RCNN的输出:

maskrcnn需要多少数据训练 maskrcnn原理解读_机器学习_07


可以看出输出分为三种:预测框、类别和掩膜。所以我们最后能得到的损失函数:

maskrcnn需要多少数据训练 maskrcnn原理解读_maskrcnn需要多少数据训练_08


分别对应上述三种输出。

最后

这里我们可以看出,Mask RCNN其实就是多尺度的Faster R-CNN加实例分割,写的不怎麽好,但是本人已经尽力了,只想能帮助一下我这样的小白。在此向各位前辈致以诚挚敬意。