由于MaskRCNN网络包含了很多之前介绍过的知识点,例如RPN,FPN,RoIPooling,RoIAlign,故这遍文章看上去显得比较‘单薄’,如果想弄清楚Mask RCNN网络,需要结合之前的博文一同食用! o(=•ェ•=)m
前言
本篇论文其实还是分割为主,但是目前我们的网络基础是分类和检测,知识积累还不够,所以如有分割问题解释的不到位,当我们学习完分割的基础网络还会回来修改的!如果大佬看到我讲的有问题,期待大佬们的点评。(求读者对本文多一点容错,宽容本文~)
![](https://i-blog.csdnimg.cn/blog_migrate/12bfdf244d54174abde8228ac0863ecf.jpeg)
另外,本文综合了主流的各种博文,也算是阅文无数!感谢大佬们的帮助!可能并没有联系大佬就进行了copy,对知识产权的侵犯抱歉!
再次疯狂给各位大佬打call!感谢大佬们!
0 前情提要
Mask R-CNN是ICCV 2017的best paper,彰显了计算机视觉领域在2017年的最新成果。在深度学习2017年的最新发展中,单任务的网络结构已经逐渐不再引人瞩目,取而代之的是集成,复杂,一石多鸟的多任务网络模型。 Mask R-CNN就是典型的代表。本大作的一作是何恺明,在该篇论文发表的时候,大佬已经去了FaceBook。
![](https://i-blog.csdnimg.cn/blog_migrate/2b8e49db628fcace81419b9ee400cf6d.jpeg)
(感觉大佬有些......小可爱~(๑•ᴗ•๑))
今天的分享,我们想先介绍一下,MaskRCNN有多厉害。 我们可以用它干点啥?
![](https://i-blog.csdnimg.cn/blog_migrate/94d009193ecdbd58ce1e138510f4697e.png)
可以看到,在实例分割Mask R-CNN框架中,还是主要完成了三件事情:
1)目标检测,直接在结果图上绘制了目标框。
2)目标分类,对于每一个目标,需要找到对应的类别,区分到底是人,是车,还是其他类别。
3)像素级目标分割,在每个目标中,需要在像素层面区分,什么是前景,什么是背景。
Mask rcnn是何恺明基于以往的Faster Rcnn架构提出的新的卷积网络,一举完成了物体实例分割,该方法在有效地目标检测的同时完成了高质量的语义分割。文章的主要思路就是把原有的Faster-RCNN进行扩展,添加一个分支使用现有的检测对目标进行并行预测。
同时,这个网络结构比较容易实现和训练,速度5fps也算比较快,可以很方便的应用到其他的领域,像目标检测,分割,和人物关键点检测等。并且比现有的算法效果都要好,在后面的实验结果部分有展示出来。
我们来看一下为什么会要提出MaskRCNN?
深度学习的解决任务主要分为以下几种(通俗的来解释一下):
(1)图像分类 Image Classification
图像分类,该任务需要我们对出现在某幅图像中的物体做标注。比如一共有1000个物体类,对一幅图中所有物体来说,某个物体要么有,要么没有。可实现:输入一幅测试图片,输出该图片中物体类别的候选集。【即我们要知道某种物体的分类】
(2)物体检测 Object detection
判断属于某个特定类的物体是否出现在图中且 物体定位,定位常用表征就是物体的边界框。可实现:输入测试图片,输出检测到的物体类别和位置。【即我们要知道物体的分类并且检测出矩形框的位置】
(3)语义分割 Semantic scene labeling
语义标注/分割:该任务需要将图中每一点像素标注为某个物体类别。同一物体的不同实例不需要单独分割出来。对下图,标注为人,羊,狗,草地。而不需要羊1,羊2,羊3,羊4,羊5。像素级别的语义分割,对图像中的每个像素都划分出对应的类别,即实现像素级别的分类。【即我们要知道图像中的不同种类的在哪里并且分割出来】
(4)实例分割 Instance segment
实例分割是物体检测+语义分割的综合体。相对物体检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割可以标注出图上同一物体的不同个体(羊1,羊2,羊3…)。【即我们要知道每个物体在哪里并且分割出来】
(5)全景分割(自动驾驶领域中用的比较多,也放上来)
实现实例分割和语义分割的统一,全景分割将传统意义上相互独立的实例分割(检测和分割每个目标实例)和语义分割(为每个像素分配一个类标签)任务统一起来了。这种统一是自然的,并在一种孤立的研究状态中呈现出一种既不存在于实例中,也不存在于语义分割中的全新的挑战。【有兴趣的伙伴们可以了解一下】![]()
![]()
1 基础结构
![](https://i-blog.csdnimg.cn/blog_migrate/9baba6c0443b9198beb28109ff3f1290.png)
看MaskRCNN的粗略网络结构,不禁觉得眼熟,这不就是faster rcnn改了一点咩??其实这是大佬工作的归并。 使用了RCNN系列、FPN、Resnet\ResNeXt、FCN。
1.1 Mask RCNN
【整体来说】一个概念上简单,灵活和通用的目标分割框架。我们的方法有效地检测图像中的目标,同时为每个实例生成高质量的分割掩码。添加一个与现有目标检测框回归并行的分支,用于预测目标掩码,来扩展Faster R-CNN。
【泛化性】Mask R-CNN很容易推广到其他任务,例如,允许我们在同一个框架中估计人的姿势。我们在COCO挑战的所有三个项目中取得了最佳成绩,包括目标分割,目标检测和人体关键点检测。
【简单且有效】Mask R-CNN训练简单,相对于Faster R-CNN,只需增加一个较小的开销,运行速度可达5 FPS。没有使用额外技巧,Mask R-CNN优于所有现有的单一模型,包括COCO 2016挑战优胜者。
简单而有效的方法----> 促进未来目标级识别领域研究的坚实基础【baseline】;
快速的训练和测试速度,以及框架的灵活性和准确性 ----> 将促进未来目标分割的研究;
人体姿态估计任务 ----> 展示我们框架的通用性 ;
通过添加一个:用于在每个感兴趣区域(RoI)上预测分割掩码的分支来扩展Faster R-CNN [34],这个掩码分支与用于分类和目标检测框回归的分支并行执行,如下图所示(用于目标分割的Mask R-CNN框架)。掩码分支是作用于每个RoI的小FCN,以像素到像素的方式预测分割掩码。
![](https://i-blog.csdnimg.cn/blog_migrate/ccec619ad55a4c2d703f15594f5d7ec6.png)
2 Mask RCNN 细节
Faster R-CNN: 我们首先简要回顾一下Faster R-CNN检测器。Faster R-CNN由两个阶段组成。称为区域提议网络(RPN)的第一阶段提出候选目标边界框。第二阶段,本质上是Fast R-CNN,使用RoI Pool从每个候选框中提取特征,并进行分类和边界回归。两个阶段使用的特征可以共享,以便更快的推理。
Mask R-CNN采用相同的两个阶段,具有相同的第一阶段(即RPN)。在第二阶段,与预测类和框偏移量并行,Mask R-CNN还为每个RoI输出二进制掩码。
2.1 损失函数 L m a s k L_{mask} Lmask
在训练期间,我们将在每个采样后的RoI上的多任务损失函数定义为 L = L c l s + L b o x + L m a s k L=L_{cls}+L_{box}+L_{mask} L=Lcls+Lbox+Lmask。分类损失 L c l s L_{cls} Lcls和检测框损失 L b o x L_{box} Lbox与Faster rcnn中定义的相同。
掩码分支对于每个RoI的输出维度为 K ∗ m ∗ m K*m*m K∗m∗m,即K个分辨率为m×m的二进制掩码,每个类别一个,K表示类别数量。我们为每个像素应用Sigmoid,并将Lmask定义为平均二进制交叉熵损失。对于真实类别为k的RoI,仅在第k个掩码上计算 L m a s k L_{mask} L