Mask R-CNN原理及发展历程

Mask R-CNN原理及发展历程

2017年,何凯明等人在Faster R-CNN的基础上融入了语义分割网络,提出Mask R-CNN,在目标检测的基础上实现物体的像素级分割,即实例分割。当前,基于Mask R-CNN模型的算法当前已应用在人脸识别、遥感目标识别、车辆行人检测、工业CT图像缺陷检测、医疗辅助检测等多个领域,是R-CNN系列的集大成之作。为了更好地理解Mask R-CNN模型的原理,接下来先后从R-CNN、Fast R-CNN到Faster R-CNN的演化之路介绍,基于此,再介绍Mask R-CNN。

1. R-CNN

2014年,受多伦多大学Hinton实验室研究工作的启发,加州大学伯克利分校的Jitendra Malik团队提出R-CNN,其全称是基于区域的卷积神经网络(Regions With Convolutional Neural Networks,R-CNN)。R-CNN是将CNN用于对象检测的起源,主要思路如图1所示,首先对输入图像提取多个区域建议(Region Proposals),再将每个区域输入CNN来进行特征的提取,提取后的特征经过全连接层,最终分别实现区域内目标类别预测和边框的回归矫正。因此R-CNN可分为区域建议、 特征提取(Feature Extraction)和目标检测三个部分。

图1 R-CNN模型原理

1.1. 基于选择性搜索策略的区域建议

R-CNN实现目标检测首先需要借助边界框 (Bounding Box) 获取图像,这里运用了选择性搜索(Selective Search)给出建议区域。选择性搜索通过不同尺寸的窗口在图像中进行滑动,然后通过纹理、颜色、亮度等特征将内容相似的不同滑窗聚合,减少建议区域的数量(约2000个),降低模型的复杂度。由于该方法比较耗时,后续没有继续使用,此处不再详细介绍。
在这里插入图片描述
图2 选择性搜索聚合内容相似滑窗过程

1.2. 特征提取与分类回归任务

生成一组建议区域之后,R-CNN将这些区域变换为标准的方形尺寸并采用深度卷积神经网络进行特征提取,之后分别输入到用于预测边界框的回归任务全连接层和用于预测物体类别的分类任务的支持向量机(Support Vector Machine,SVM)。
分类过程比较熟悉,接下来着重关注边界框的回归预测。如图3所示,候选区域(蓝色框所示)与真实标注区域(红色框所示)存在一定偏差,因此需要矫正误差,学习到精准的边界框,这种学习过程实质是一种变换的学习。变换包括两个步骤,分别是左上角坐标 , 的平移和边界框宽高 , 的缩放。候选区域与正确结果的转换表达如图左下所示,其中坐标的平移距离与物体的长宽有关,因为理论上越大的物体,所要移动的像素点个数也更大。表达式中的未知量 便是需要学习的变换,将其转换成图3中右下所示, 的目标值分别是0、0、1、1。
在这里插入图片描述
图3 边界框回归预测
R-CNN的效果非常好,但是效率非常低,训练困难主要的原因包括两方面:一是需要对每个图像的每个候选区域通过CNN计算特征进行前向传播 ,每个图像需要大约2000次前向传播,存在大量重复计算;二是该方法必须分别训练三个不同的模型—CNN图像特征提取模型、目标分类模型、线性边框回归模型, 训练困难而且中间保存特征向量需占用大量的空间。

2. Fast R-CNN

2015年,R-CNN的作者之一Ross Girshick为解决R-CNN效率低、训练难的问题,提出了Fast R-CNN的方法。Fast R-CNN相对于R-CNN主要改进的一个方面在于,不再是对每一个候选区域进行重复卷积操作,而是对于整张图像先提取泛化特征,这样子减少了大量的计算(R-CNN中对于每一个候选区域做卷积会有很多重复计算),如图4所示,并在CNN中引入感兴趣区域池化层(Region of Interest Pooling,RoI Pooling)。这样一来,图片首先进行选择性搜索生成候选区域,同时在CNN中对整张图片进行特征提取生成feature map,将候选区域通过映射的方式在feature map上确定位置和边界框。因此,模型只需要一次原始图像的CNN前向传播,而不是2000次;另一方面,Fast R-CNN在CNN输出层用softmax函数代替了SVM分类器,来输出物体类别, 并将CNN、softmax分类和边界框线性回归的训练融合到一个模型中,降低了训练的难度。
在这里插入图片描述
图4 Fast R-CNN模型原理
RoI Pooling创新点在于,其共享了CNN网络在图像区域中的前向传播过程,是从CNN的feature map中选择相应的子区域来获取其CNN抽象特征,具体如图5所示,然后,使用最大池化操作来合并每个区域中的初级抽象特征,所以只进行了原始图像的一次前向传播操作,而不是2000次。此外,RoI Pooling还能将不同大小的候选区域调整到同一个尺寸,固定分类层的输入大小。
在这里插入图片描述
图5 RoI Pooling操作

3. Faster R-CNN

即使Fast R-CNN的性能有了很大的改善,但是仍然存在一个短板——基于选择性搜索的区域建议生成方式。在上面已经提到,为了检测图像中对象位置,第一步是要产生一系列随机多尺度的边界框或是待测试的感兴趣区域。在Fast R-CNN中,通过选择性搜索方法创建这些区域是一个相当缓慢的过程,被认为是整个流程的短板。在2015年中期,原R-CNN系列开发团队发现了一种叫做“Faster R-CNN”的网络结构,几乎把边框生成过程的运算量降为0,总体结构如图6所示,使用CNN提取图像特征,然后使用区域建议网络(Region Proposal Network,RPN)提取出ROI,再使用ROI pooling将这些ROI全部变成固定尺寸,最后喂给全连接层进行边界框的回归和分类预测。
在这里插入图片描述
图6 Faster R-CNN模型原理
图7展示了基于VGG16模型中的Faster R-CNN网络结构,可以清晰的看到该网络对于一副任意大小P×Q的图像:
(1)首先缩放至固定大小M×N,然后将M×N图像送入CNN网络(包含了13个conv层+13个relu层+4个pooling层);
(2)RPN首先经过3x3卷积,再分别生成包含物体的anchors和对应边界框偏移量,然后计算出区域建议;
(3)Roi Pooling层则利用区域建议从feature maps中抠取建议的feature送入后续全连接和softmax网络作分类,即建议区域内的物体类别,同时再利用边界框回归预测物体最终的精确位置。
在这里插入图片描述
图7 Faster R-CNN模型结构
Fast R-CNN的精髓是RPN,如图8所示,RPN网络实际分为2条分支,上面一条通过softmax分类阳性anchors和阴性anchors(即anchor中是否包含物体),下面一条用于计算对于anchors的边界框偏移量,以获得精确的区域建议,而最后的Proposal层则负责综合阳性anchors和对应边界框偏移量生成区域建议,同时剔除太小和超出边界的部分。
在这里插入图片描述
图8 RPN网络结构
在这里插入图片描述
图9 生成anchor示意图
所谓anchors,实际上是基于CNN网络最后一层feature map中的每个像素点,以此为中心,在缩放后的图像上所生成的一组面积和长宽比不同的矩形框,如图9所示,一般feature map上每个点会映射到图像中生成9个anchor,根据IoU每个anchor负责与自己最匹配的物体。

4. Mask R-CNN

2017年,何恺明和Girshick等研究人员提出了Mask R-CNN模型用于目标的像素级分割,相比Faster R-CNN,模型改动的地方主要有三处,如图10所示,一是在提取feature map时在CNN中加了特征金字塔网络(Feature Pyramid Network,FPN),以融合不同层级的特征;二是针对Faster R-CNN网络结构中,RoI Pooling操作导致选择的feature map与原始图像的区域略微不对齐,而图像分割需要像素级特异性,因此提出一种基于双线性插值的ROI对齐方法——RoIAlign;最后是在Faster R-CNN的CNN特征顶部添加了一个全卷积网络(Fully Convolutional Network,FCN)用来生成掩码(mask)作为分割输出。下面详细对这三种方法展开介绍。
在这里插入图片描述
图10 Mask R-CNN模型原理

4.1. ResNet-FPN与Fast R-CNN

多尺度检测在目标检测中变得越来越重要,对小目标的检测尤其如此。FPN是一种精心设计的多尺度检测方法,其结构包括自下而上、自上而下和横向连接三个部分,这种结构可以将各个层级的特征进行融合,同时使其具有强语义信息和强空间信息。实际上,FPN是一种通用架构,可以结合各种骨架网络使用,比如VGG,ResNet等。Mask RCNN文章中使用了ResNet-FPN网络结构,如图11所示。
在这里插入图片描述
图11 ResNNet-FPN网络结构
(1)自下而上
从下到上路径就是简单的特征提取过程。具体就是将ResNet作为骨架网络,根据feature map的大小分为5个stage。stage2-stage5各自最后一层输出分别定义为 C2-C5,他们相对于原始图片的stride是{4,8,16,32}。需要注意的是,考虑到内存原因,stage1的输出并没有被使用。
(2)自上而下和横向连接
自上而下是从最高层开始进行最近邻上采样,计算简单又减少训练参数。横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合。具体就是先对ResNet每一层经过一个1x1卷积操作(1x1卷积用于降低通道数),然后和上采样的feature map进行加和操作。在融合之后还会再采用3×3的卷积核对已经融合的特征进行处理,目的是消除上采样的混叠效应(Aliasing Effect)。
实际上,上图少绘制了一个分支:在论文中,M5经过步长为2的最大池化下采样得到P6,作者指出使用P6是想得到更大的anchor(尺度512×512)。但P6是只用在 RPN中用来得到区域建议的,并不会作为后续Fast RCNN的输入。因此,ResNet-FPN作为RPN输入的feature map是P2-P6,而作为后续Fast RCNN的输入则是P2-P5。
接下来要解决的问题是,当FPN产生了金字塔形特征,而并非只是一个feature map,经过RPN之后再产生不同大小的区域建议,且输入到Fast RCNN的feature map比生成区域建议的feature map少一个层级,选择哪个feature map来切ROI是一个问题。这里使用如下公式来决定宽w、高h的ROI到底要从哪个Pk来切,公式(1)中224表示用于预训练的ImageNet图片的大小。 k0表示面积为224×224的ROI所应该在的层级。作者将其设置为4,所以scale小于224(比如说是112 * 112)的ROI 是从比P4更高分辨率的feature map中产生。这种做法的原则便是大尺度的ROI要从感受野更大、低分辨率的feature map上切,有利于检测大目标;小尺度的ROI要从细节更丰富、高分辨率的feature map上切,有利于检测小目标。最终再对结果进行下取整。
在这里插入图片描述

4.2. RoI Align

此外,Mask RCNN中还有一个很重要的改进,就是ROI Align。Faster R-CNN存在的问题是:浮点数两次取整后特征图与原始图像是有偏移的,如图12所示。与用边界框确定坐标相比,像素级分割需要更精细的像素对齐。为了解决这个问题,ROI Align使用双线性插值的方法获得坐标为浮点数的像素点上的数值。
在这里插入图片描述
图12 区域建议取整与划分单元格取整
以VGG16为例,原图为800×800,经过5此stride后最后一层feature map大小为25×25,缩小了25倍。假定原图中有一区域建议大小为665×665,这样,映射到feature map中其大小为:665/32=20.78,即20.78×20.78,此时,没有像RoIPooling那样就行取整操作,保留浮点数。假定pooling后固定成6×6大小的feature map,所以需要在 feature map上映射的20.78×20.78的区域建议划分成36个同等大小的小区域,每个小区域的大小20.78/6=3.46,即3.46×3.46。再假定采样点数为4,即表示,对于每个3.46×3.46的小区域,平分四份,每一份取其中心点位置,而中心点位置的像素,采用双线性插值法进行计算,这样,就会得到四个点的像素值,之后再取采样点的最大值,就可以得到6×6 feature map中的一个值,如下图13所示。
在这里插入图片描述
图13 使用双线性插值的RoI Align

4.3. Mask预测分支

再进一步,在ResNet-FPN+Fast RCNN的基础上加上mask分支(一个全卷积网络),则得到了最终的Mask RCNN,具体是在ROI Align之后的头部网络添加卷积层,结构如图14所示,头部网络包括边界框识别(分类和回归)+mask预测:
在这里插入图片描述
图14 Mask R-CNN头部网络结构

参考来源

[1]. https://www.bilibili.com/video/BV1b441127cs/?spm_id_from=333.337.search-card.all.click&vd_source=4852ded7dbf908a9964dd78401b300a5
[2]. https://blog.csdn.net/remanented/article/details/79564045
[3]. https://zhuanlan.zhihu.com/p/40405927
[4]. https://zhuanlan.zhihu.com/p/31426458
[5]. https://zhuanlan.zhihu.com/p/37998710
[6]. https://zhuanlan.zhihu.com/p/500183087
[7]. https://zhuanlan.zhihu.com/p/26655034
[8]. https://zhuanlan.zhihu.com/p/73662410

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Cascade Mask R-CNN(级联掩码 R-CNN)是一种用于对象检测和实例分割的深度学习模型。它是基于Mask R-CNN的改进和扩展。 级联掩码 R-CNN主要由三个关键组件组成:共享特征提取网络、级联分类器和级联分割器。 首先,共享特征提取网络用于从输入图像中提取特征图。这个网络通常是一个预训练的卷积神经网络,如ResNet或VGGNet。提取的特征图具有丰富的语义信息,可以用于识别和定位目标。 接下来,级联分类器负责对每个候选目标进行分类。它通过将候选目标的ROI(感兴趣区域)与预测类别之间的交叉熵损失进行训练,来学习目标的类别。级联分类器通常由多个分类器组成,每个分类器逐渐提升定位的准确性。 最后,级联分割器负责对每个候选目标进行像素级的分割。它通过将候选目标的ROI与目标掩码之间的二元交叉熵损失进行训练,来学习目标的准确边界。与级联分类器类似,级联分割器也由多个分割器组成,每个分割器逐渐提升分割的精度。 级联掩码 R-CNN通过级联分类器和级联分割器的组合,实现了更准确的对象检测和更精细的实例分割。它在各种视觉任务中表现出色,如图像识别、场景理解和自动驾驶等。 总之,级联掩码 R-CNN是一种强大的深度学习模型,通过共享特征提取网络、级联分类器和级联分割器的结合,实现了高效准确的对象检测和实例分割。它在计算机视觉领域具有广泛应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值