Mask R-CNN理解

  • @[TOC](Mask R-CNN理解)
  • 目标检测typical architecture通常可以分为两个阶段
  • rcnn 与 fast rcnn的改进
  • RPN
  • feature map
  • 卷积层-池化层-全连接层
  • Ground Truth
  • Mask R-CNN
  • 边框bbox回归
  • IoU交并比
  • 与faster rcnn的区别
  • FPN特征金字塔
  • FCN全卷积网络
  • CNN与FCN
  • 反卷积层
  • ROI Pooling局限性分析
  • ROI Align

目标检测typical architecture通常可以分为两个阶段

找出object可能存在的所有位置

这一阶段输出的应该是一系列object可能位置的bounding box

  • region proposal:候选区域
  • ROI: region of interest
final classification

确定上一阶段的每个region proposal 是否属于目标一类或者背景

  • 产生大量的region proposals会导致处理速度很慢

所以就产生的ROI pooling, 可以显著加快处理速度

rcnn 与 fast rcnn的改进

rcnn 与 fast rcnn的改进

  1. fastrcnn在最后一层卷积层后加了一个ROI pooling layer
  2. (rcnn把一张图像分解成大量的候选区域,每个候选区域会单独通过CNN提取特征,实际上这些候选区域之间大量重叠,CNN运算可以共享,造成了运算能力的浪费)
    fastrcnn将整张图像归一化后直接送入CNN, 在最后的卷积层输出的feature map上,加上候选区域信息,使得在此之前的CNN运算得以共享
  3. (训练时速度慢:RCNN在训练时把通过CNN提取的特征存储在)

RPN

RPN全称是Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络;
RPN第一次出现在世人眼中是在Faster RCNN这个结构中,专门用来提取候选框,在RCNN和Fast RCNN等物体检测架构中,用来提取候选框的方法通常是Selective Search,是比较传统的方法,而且比较耗时,在CPU上要2s一张图。所以作者提出RPN,专门用来提取候选框,一方面RPN耗时少,另一方面RPN可以很容易结合到Fast RCNN中,称为一个整体。

RPN的引入,可以说是真正意义上把物体检测整个流程融入到一个神经网络中,这个网络结构叫做Faster RCNN;
Faster RCNN = RPN + Fast RCNN

feature map

feature map即使经过卷积核卷积之后的map上集中前一个图像(或者feature map)的特征,即特征映射

卷积层-池化层-全连接层

卷积层:特征提取
池化层:特征降维,减少计算量,降低模型复杂度
全连接层:变换映射到label维度,组合特征并进行分类,(分类器的作用)一般放在最后一层

Ground Truth

数据里不仅有ground truth,而且会有噪声,层数越多,拟合能力越强,学习噪声的能力也越强
ground truth(gt)指的是真实情况或真实值。模型评估或训练阶段(计算损失函数)时,模型输出得到的预测结果要与真实值也就是gt作比较。才能知道模型的好坏,性能高低。

Mask R-CNN

Mask R-CNN是一个实例分割算法,可以用来做“目标检测”,“目标实例分割”,“目标关键点检测”

实例分割和语义分割的区别:
实例分割需要在语义分割的基础上对同类物体进行更精细的分割

mask rcnn整体框架:

mask rcnn和faster rcnn对比 mask rcnn全称_后端


总体架构:

Mask RCNN是在faster rcnn的基础特征网络之后又加入了全连接的分割子网,由原来的两个任务(分类+回归)变成了三个任务(分类+回归+分割)。

  1. 第一个阶段具有相同的第一层(即RPN, Region Proposal Network,即提取候选框的网络),扫描图像并生成提议(proposals, 即有可能包含一个目标的区域)
  2. 第二阶段,除了预测种类和bbox回归,并添加了一个全卷积网络的分支,对每个ROI预测了对应的二值掩膜(binary mask),以说明给定像素是否为目标的一部分。所谓二进制mask,就是当像素属于目标的所有位置上时标识为1,其它位置标识为0.

边框bbox回归

bbox回归:对于一般使用四维向量(x,y,w,h)来表示,分别表示窗口的中心点坐标和宽高,红色的框P代表原始的proposal,绿色的框G代表目标的Ground Truth, 我们的目标是寻找一种关系使得输入原始的窗口P经过映射得到一个跟真是窗口G更接近的回归窗口G’.

mask rcnn和faster rcnn对比 mask rcnn全称_全连接_02

IoU交并比

IOU作为目标检测算法性能mAP计算的一个非常重要的函数
IOU交并比(intersection over Union)计算的是“预测的边框”和“真实的边框”的交集和并集的比值

总体流程如下:

mask rcnn和faster rcnn对比 mask rcnn全称_卷积_03

  1. 输入要处理的图片,进行对应的预处理操作,或者预处理后的图片
  2. 然后,将其输入到一个预训练好的神经网络中(ResNet等)获得对应的feature map
  3. 对这个feature map中的每一点设定预定个的ROI 从而获得多个候选ROI
  4. 接着,将这些候选的ROI送入RPN网络进行二值分类(前景或背景)和BB回归,过滤掉一部分候选的ROI;
  5. 接着,对这些剩下的ROI进行ROIAlign操作(即先将原图和feature map的pixel对应起来,然后将feature map和固定的feature对应起来);
  6. 最后,对这些ROI进行分类(N类别分类)、BB回归和MASK生成(在每一个ROI里面进行FCN操作)。

    其中,黑色部分为原来的Faster-RCNN,红色部分为在Faster网络上的修改

与faster rcnn的区别

  • ResNet+FPN
    作者替换了在faster rcnn中使用的vgg网络,转而使用特征表达能力更强的残差网络。
    另外为了挖掘多尺度信息,作者还使用了FPN网络。
  • 将 Roi Pooling 层替换成了 RoiAlign;
    解决Misalignment 的问题,说白了就是对 feature map 的插值。直接的ROIPooling的那种量化操作会使得得到的mask与实际物体位置有一个微小偏移;
  • 添加并列的 FCN层(mask层);
    FCN全卷积神经网络(semantic segmentation语义分割)

FPN特征金字塔

FPN(Feature Pyramid Network)算法同时利用低层特征高分辨率高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的,这和常规的特征融合方式不同。

FCN全卷积网络

论文Fully Convolutional Networks for Semantic Segmentation 是图像分割的milestone论文。

CNN与FCN

  • 通常cnn网络在卷积之后会接上若干个全连接层,将卷积层产生的特征图(feature map)映射成为一个固定长度的特征向量。一般的CNN结构适用于图像级别的分类和回归任务,因为它们最后都期望得到输入图像的分类的概率,如ALexNet网络最后输出一个1000维的向量表示输入图像属于每一类的概率。
  • FCN对图像进行像素级的分类,从而解决了语义级别的图像分割问题。与经典的CNN在卷积层使用全连接层得到固定长度的特征向量进行分类不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷基层的特征图(feature map)进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每一个像素都产生一个预测,同时保留了原始输入图像中的空间信息,最后奇偶在上采样的特征图进行像素的分类。
  • 全卷积网络(FCN)是从抽象的特征中恢复出每个像素所属的类别。即从图像级别的分类进一步延伸到像素级别的分类。
    FCN将传统CNN中的全连接层转化成一个个的卷积层。如下图所示,在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层表示为卷积层,卷积核的大小(通道数,宽,高)分别为(4096,7,7)、(4096,1,1)、(1000,1,1)。所有的层都是卷积层,故称为全卷积网络。

反卷积层

反卷积层,在深度学习里面应该叫做转置卷积(transposed convolution)又名微步卷积(fractionally strided convolutions),也有叫Backward strided convolution ,upconvoution, upsample convolution。
在卷积网络里面,我们是通过卷积层操作,获得feature map,然而对于反卷积层,则是通过feature map的卷积操作,输出value,这输出值是我们期待的图像的值。有点像通过反卷积还原feature map到原始图像

ROI Pooling局限性分析

ROI Pooling的局限性分析:
在常见的两级检测框架(比如Fast-RCNN, Faster-RCNN)中,ROI Pooling的作用是根据预选框的位置坐标在特征图中将相应区域赤化为固定尺寸的特征图feature map.以便进行后序的分类和bbox回归操作。由于预选框的位置通常是由模型回归得到的,一般来讲是浮点数,而赤化后的特征图要求尺寸固定。故ROI Pooling这一操作存在两次量化的过程
step1:将候选框边界量化为整数点坐标值
step2:将量化后的边界区域平均分割成k*k个单元,对每一个单元的边界进行量化。
事实上,经过上述两次量化,此时的候选框已经和最开始回归出来的位置有一定的偏差,这个偏差会影响检测或者分割的准确度。在论文里,作者把它总结为“不匹配问题”(misAlignment)

ROI Align

为了解决ROI Pooling的上述缺点,作者提出了ROI Align这一改进的方法。ROI Align的思路很简单:取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作,。值得注意的是,在具体的算法操作上,ROI Align并不是简单地补充出候选区域边界上的坐标点,然后将这些坐标点进行池化,而是重新设计了一套比较优雅的流程,如 图3 所示:

  • 遍历每一个候选区域,保持浮点数边界不做量化。
  • 将候选区域分割成k x k个单元,每个单元的边界也不做量化。
  • 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。
    这里对上述步骤的第三点作一些说明:这个固定位置是指在每一个矩形单元(bin)中按照固定规则确定的位置。比如,如果采样点数是1,那么就是这个单元的中心点。如果采样点数是4,那么就是把这个单元平均分割成四个小方块以后它们分别的中心点。显然这些采样点的坐标通常是浮点数,所以需要使用插值的方法得到它的像素值。在相关实验中,作者发现将采样点设为4会获得最佳性能,甚至直接设为1在性能上也相差无几。事实上,ROI Align 在遍历取样点的数量上没有ROIPooling那么多,但却可以获得更好的性能,这主要归功于解决了misalignment的问题。值得一提的是,我在实验时发现,ROI Align在VOC2007数据集上的提升效果并不如在COCO上明显。经过分析,造成这种区别的原因是COCO上小目标的数量更多,而小目标受misalignment问题的影响更大(比如,同样是0.5个像素点的偏差,对于较大的目标而言显得微不足道,但是对于小目标,误差的影响就要高很多)。