目标检测:RCNN、Fast RCNN、Faster RCNN、Mask RCNN、SSD

检测算法分类

两阶段方法与单阶段方法:

  • 两阶段方法(Tow Stage):两阶段方法将目标检测任务分为候选区域生成和目标分类定位两个阶段。首先,通过选择性搜索、区域建议网络(RPN)等方法生成候选区域,然后对每个候选区域进行分类和边界框回归。典型的两阶段方法有RCNN系列和Faster R-CNN等。
  • 单阶段方法(One Stage):单阶段方法直接在图像上密集地预测目标的类别和边界框,通常通过将图像分割为网格单元,并为每个单元生成预测来实现。常见的单阶段方法包括YOLO系列和SSD等。

一、RCNN

1.1 R-CNN概念

RCNN(Region-based Convolutional Neural Networks)是一种经典的目标检测算法,最初由Girshick等人在2014年提出。它通过将图像分割成多个候选区域,并对每个候选区域进行分类和边界框回归来实现目标检测。

1.2 整体步骤:

  1. 候选区域(Region Proposals)生成:在图像中提取候选区域,这些候选区域通常是通过选择性搜索(Selective
    Search)等算法生成的。选择性搜索将图像分割为多个不同尺度和形状的区域,并根据颜色、纹理、大小等特征进行合并,以产生可能包含目标的候选区域。

  2. 特征提取:对每个候选区域应用卷积神经网络(CNN)来提取特征表示。通常使用预训练的CNN模型,如AlexNet、VGGNet或ResNet等,在候选区域上进行前向传播,以获得固定长度的特征向量。

  3. 目标分类:提取的特征向量作为输入,经过一个支持向量机(Support Vector Machine,SVM)分类器进行目标类别的分类。在训练阶段,SVM使用正负样本对模型进行训练,学习区分目标和非目标的能力。

  4. 非极大值抑制:由于选择性搜索算法可能会生成重叠的候选区域,为了消除冗余的检测结果,R-CNN使用非极大值抑制(Non-Maximum Suppression,NMS)来筛选最终的检测边界框。NMS通过比较检测框之间的重叠程度和得分,并保留最具有代表性的框。

  5. 边框位置修正 Boundingbox Regression

1.2.1 候选区域生成

Selective Search:训练过程中用于从输入图像中搜索出2000个Region Proposal。主要步骤:

  1. 使用一种过分割手段,将图像分割成小区域 (1k~2k 个)
  2. 计算所有邻近区域之间的相似性,包括颜色、纹理、尺度等
  3. 将相似度比较高的区域合并到一起
  4. 计算合并区域和临近区域的相似度
  5. 重复3、4过程,直到整个图片变成一个区域
  6. 在每次迭代中,形成更大的区域并将其添加到区域提议列表中。这种自下而上的方式可以创建从小到大的不同scale的Region Proposal,如图所示:
    在这里插入图片描述

1.2.2 特征提取

RCNN由四个部分组成:SS算法、CNN、SVM、bbox regression。
在这里插入图片描述

1.网络架构选择

两个可选方案:第一选择经典的Alexnet;第二选择VGG16。经过测试Alexnet精度为58.5%,VGG16精度为66%。VGG这个模型的特点是选择比较小的卷积核、选择较小的跨步,这个网络的精度高,不过计算量是Alexnet的7倍。后面为了简单起见,我们就直接选Alexnet.
Alexnet特征提取部分包含了5个卷积层、2个全连接层,在Alexnet中pool5层神经元个数为9216、 fc6、fc7的神经元个数都是4096,通过这个网络训练完毕后,最后提取特征每个输入候选框图片都能得到一个4096维的特征向量.
2.有监督预训练阶段(训练网络参数)
在实际测试的时候,模型需要通过CNN提取出中的特征,用于后面的分类与回归。所以,如何训练好CNN成为重中之重。

由于物体标签训练数据少,如果要直接采用随机初始化CNN参数的方法,目前的训练数据量是不够的. 基于此,采用有监督的预训练,使用一个大的数据集(ImageNet )来训练AlexNet,得到一个1000分类的预训练(Pre-trained)模型。网络优化求解时采用随机梯度下降法(SGD),学习率大小为0.001.
3.fine-tuning阶段
接着采用 selective search 搜索出来的候选框 (PASCAL VOC 数据库中的图片) 继续对上面预训练的CNN模型进行fine-tuning训练。

将原来预训练模型最后的1000-way的全连接层(分类层)换成21-way的分类层(20类物体+背景),然后计算每个region proposal和ground truth 的IoU,对于IoU>0.5的region proposal被视为正样本,否则为负样本(即背景)。

IOU(Intersection over Union),也称为Jaccard系数,是一种用于评估目标检测和图像分割任务性能的常用指标。它衡量预测边界框或分割掩码与真实边界框或分割掩码之间的重叠程度。

另外,由于对于一张图片的多有候选区域来说,负样本是远远大于正样本数,所以需要将正样本进行上采样来保证样本分布均衡。在每次迭代的过程中,选择层次采样,每个mini-batch中采样两张图像,从中随机选取32个正样本和96个负样本组成一个mini-batch(128,正负比:1:3)。我们使用0.001的学习率和SGD来进行训练。

4.提取并保存RP的特征向量
提取特征的CNN网络经过了预训练和微调后不再训练,就固定不变了,只单纯的作为一个提特征的工具了。虽然文中训练了CNN网络对region proposal进行分类,但是实际中,这个CNN的作用只是提取每个region proposal的feature。
所以,我们输入VOC训练数据集,SS搜索出2000个RP后输入进CNN进行前向传播,然后保存AlexNet的FC7层4096维的features,以供后续的SVM分类使用

1.2.3 目标分类

  • 假设我们要检测车辆。我们知道只有当bounding box把整辆车都包含在内,那才叫正样本。如果bounding box 没有包含到车辆,那么我们就可以把它当做负样本。
  • 但问题是当我们的检测窗口只有部分包含物体,那该怎么定义正负样本呢?作者测试了IOU阈值各种方案数值0,0.1,0.2,0.3,0.4,0.5。最后通过训练发现,如果选择IOU阈值为0.3效果最好(选择为0精度下降了4个百分点,选择0.5精度下降了5个百分点),即当重叠度小于0.3的时候,我们就把它标注为负样本。
  • 在SVM分类过程中,IOU<0.3被作为负例,ground-truth(即完全框住了物体,默认IOU>0.7时)是正例,其余的全部丢弃。然后SVM分类器也会输出一个预测的labels,然后用labels和truth labels比较,计算出loss,然后训练SVM。
  • 一旦CNN f7层特征被提取出来,那么我们将为每个物体类训练一个SVM分类器。当我们用CNN提取2000个候选框,可以得到2000×4096这样的特征向量矩阵,然后我们只需要把这样的一个矩阵与SVM 4096×N的权值矩阵点乘(N为分类类别数目,因为我们训练的N个SVM,每个SVM包含了4096个权值w),就可以得到结果了。

其中,有一个细节,就是SVM由于是小样本训练,所以会存在负样本远多于正样本的情况。针对这种情况,作者使用了hard negative mining方法(初始时用所有样本训练,但是这样负样本可能远多正样本,经过一轮训练后将score最高即最容易被误判的负样本加入新的样本训练集,进行训练,重复以上步骤至达到停止条件比如分类器性能不再提升),使得SVM适用于小样本训练,在样本不平衡时依然可以做到不会发生过拟合。

作者为什么要Hard Negatives?因为,负样本数目巨大,其中正样本数目占的比例特别低,负样本太多,直接导致优化过程很慢,因为很多负样本远离分界面对于优化几乎没有帮助(SVM分类最大间隔,只有支持向量比较有用)。Data-minig的作用就是去掉那些对优化作用很小的Easy-examples保留靠近分界面的Hard-examples。

为什么要专门使用SVM分类,而不是CNN最后的21层softmax层分类?

  • 训练CNN提取特征时,设置的IOU是0.5以上为正样本,小于0.5的是负样本。
    但在SVM分类中,只有bbox完全包围了物体(也可以理解为IOU>0.7时)才是正样本,IOU小于0.3的是负样本。
  • 前者是大样本训练,后者是小样本训练。对于CNN的训练,需要大量的数据,不然容易过拟合,所以设置的阈值较低,比如一个bounding
    box可能只包含物体的一部分,那么我也把它标注为正样本,用于训练CNN;然而SVM训练的时候,因为SVM适用于少样本训练,所以对于训练样本数据的IOU要求比较严格,我们只有当bounding
    box把整个物体都包含进去了(IOU>0.7),我们才把它标注为物体类别,IOU<0.3的标注为负样本,然后训练SVM。
  • 就因为这个特点,只能用低IOU来softmax分类,那么很可能导致最后的bbox框位置不准确(如果bbox和GT差距太大,通过线性回归会无法收敛),同时类识别精度也不高,根据实验MAP会下降几个百分点。如果硬要提高IOU,又会导致训练数据样本太少,发生过拟合。其实罪魁祸首就是Small VOC的训练量太少了,限制了太多优化操作。故最后选择了SVM完成分类,CNN只用来提取特征。

整个系统分为三个部分:
1.产生不依赖与特定类别的region proposals,这些region proposals定义了一个整个检测器可以获得的候选目标
2.一个大的卷积神经网络,对每个region产生一个固定长度的特征向量
3.一系列特定类别的线性SVM分类器。

1.2.4 非极大值抑制

目的: 筛选候选区域,目标是一个物体只保留一个最优的框,来抑制那些冗余的候选框,一句话就是去掉多余的region proposals。
selective research会产生2k个region proposals。经过svm打分后,一个物体可能就有多个框。而我们只需要一个最优的(分最好的框)。

1.2.5 边框修正

去掉了冗余的box还不够,因为这些box都是算法生成的,与ground truth(物体真实位置)肯定存在出入,我们希望这些box能尽可能接近ground truth。
红色框是ground truth,绿色框是生成的region proposal,这里看到我们需要修正绿色框,让它更接近红色框。于是使用了一组BBox Repression(每个分别对应一个类别)来做这个事情,输入原本的框,预测出一个新的框来接近ground truth。因为一个框可以用四个值来表示(x,y,w,h)分别是框的中心点横坐标,中心点纵坐标,宽,高。

在这里插入图片描述

1.3、R-CNN的优点和缺点

优点:

  1. 准确性较高:R-CNN通过对候选区域进行CNN特征提取和分类,能够捕捉目标的丰富语义信息,从而获得较高的检测准确性。
  2. 强大的特征表示:通过在预训练的深度卷积神经网络上进行特征提取,RCNN可以学习到通用的、具有判别性的特征表示,从而在不同任务和数据集上表现良好。
  3. 对小目标检测效果好:由于使用候选区域生成方法,RCNN在处理小目标时相对有效,可以更好地定位和检测小尺寸的目标。
  4. 可以实现多类别检测:RCNN可以应用于多类别的目标检测任务,并通过预测每个候选区域的概率来进行多类别分类。

缺点:

  1. 计算资源消耗大:RCNN需要逐个处理候选区域,导致计算资源消耗较大。这使得RCNN在速度方面相对较慢,难以满足实时性要求。
  2. 复杂的训练流程:RCNN的训练过程相对复杂,包括候选区域生成、特征提取和分类等多个阶段,需要消耗大量的时间和计算资源。
  3. 不支持端到端训练:由于RCNN的训练流程中包含多个独立的步骤,无法进行端到端的联合训练。这可能导致训练过程较为繁琐,并且难以优化整体性能。
  4. 候选区域生成不精确:RCNN使用选择性搜索等方法生成候选区域,但这些方法在目标定位上可能存在一定的误差,导致一些目标被漏检或错误地检测。
  5. 总的来说,虽然R-CNN在准确性和特征表示方面表现出色,但对计算资源的需求较高,并且训练过程相对复杂。后续发展的一系列改进算法(如Fast R-CNN、Faster R-CNN等)也针对这些缺点进行了改进,提升了速度和性能。

二、Fast RCNN

Fast R-CNN主要是为了解决R-CNN的以下几个问题:

  1. 训练分多步:R-CNN的训练先要fine tuning(微调)一个预训练的网络,然后针对每个类别都训练一个SVM分类器,最后还要训练一个线性回归模型对bounding-box进行回归,region proposal也要单独用selective search的方式获得,步骤比较繁琐。
  2. 时间和内存消耗比较大:在训练SVM和回归的时候需要用网络训练的特征作为输入,特征保存在磁盘上再读入的时间消耗还是比较大的。
  3. 测试的时候也比较慢,每张图片的每个region proposal都要做卷积,重复操作太多。

Fast RCNN主要有3个改进:

SPPNet解决了重复卷积计算和固定输出尺寸两个问题,SPPNet的主要贡献是在整张图像上计算全局特征图,然后对于特定的建议候选框,只需要在全局特征图上取出对应坐标的特征图就可以了

  1. 卷积不再是对每个region proposal进行,而是直接对整张图像,这样减少了很多重复计算。原来RCNN是对每个region proposal分别做卷积,因为一张图像中有2000左右的region proposal,肯定相互之间的重叠率很高,因此产生重复计算。
  2. 用ROI pooling进行特征的尺寸变换,因为全连接层的输入要求尺寸大小一样,因此不能直接把region proposal作为输入。
  3. 将regressor放进网络一起训练,每个类别对应一个regressor,同时用softmax代替原来的SVM分类器。

因此,Fast R-CNN相对于R-CNN来说,在训练速度上比RCNN快了将近9倍,比SPPnet快大概3倍;测试速度比RCNN快了213倍,比SPPnet快了10倍。在VOC2012上的mAP在66%左右。

2.1 Fast RCNN算法流程

  1. 一张图像生成1K~2K个候选区域(使用Selective Search算法,简称SS算法),我们将某个候选区域称为ROI区域。
  2. 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。

R-CNN vs Fast-RCNN:

  • R-CNN依次将2000个候选框区域输入卷积神经网络得到特征,存在大量冗余,提取时间很长。
  • Fast-RCNN将整张图像送入网络,一次性计算整张图像特征,这样就可以根据特征图的坐标获得想要的候选区域的特征图,不需要重复计算。
  1. 将每个特征矩阵通过 ROI pooling 层缩放到7×7大小的特征图。

RCNN需要将候选区域归一化到固定大小(227×227),而 Fast RCNN并不需要这样的操作,Fast RCNN 通过pooling层将每个候选区域的特征图都变为7×7,如下图所示:
在这里插入图片描述

  • 将特征图展平(reshape)为向量,通过一系列全连接层和 softmax得到预测结果。

2.1.1 Fast RCNN总体框架

在这里插入图片描述

  • 如图,将一张图像输入到 Deep ConvNet 中得到图像的特征图
  • 根据ROI区域与整体图像的坐标映射关系 (RoI Projection)进行特征映射(Conv feature map),能够得到每一个候选区域(ROI区域)的特征矩阵。
  • 将每一个特征矩阵通过RoI pooling layer,池化到固定尺寸(7*7),然后展平为向量(vector)。
  • 再经过两个全连接层(fully connected layers,FC),得到ROI特征向量(ROI feature vector)。
  • 之后 ROI feature vector 并联两个FC,其中一个用于目标概率预测(softmax),另一个用于边界框参数的回归(bbox regressor,bbox 表示 bounding box)。

Fast RCNN将CNN特征提取,SVM边界框分类,bbox regression边界框回归三部分结合到了一起,都融合到同一个CNN中。那么Fast RCNN就只有两部分了:先通过SS算法获取候选框,再通过CNN完成特征提取、分类和边界框回归。
在这里插入图片描述

2.1.2 softmax 分类器

softmax 分类器输出N+1个类别的概率,如下图所示。PASCAL VOC2012数据集中有20个分类,因此会输出21个类别的概率,其中第一个为背景概率,其余20个为每个分类的概率。所以softmax的FC中有N+1个节点。
在这里插入图片描述

2.1.3 边界框回归器(bbox regressor )

一幅图片中会画出N+1个分类的候选框,每个候选框都有x、y、w、d四个参数,所以 bbox regressor 的FC中有 4(N+1) 个节点。
在这里插入图片描述
边界框参数回归的计算方法:

在这里插入图片描述

2.1.4 Fast RCNN 中 loss 的计算

因为在Fast RCNN 中需要预测N+1个类别的概率以及边界框的回归参数,所以定义了两个损失函数:分类损失和边界框回归损失。

在这里插入图片描述

三、Faster RCNN

3.1 Faster RCNN算法流程

Faster RCNN = RPN + Fast RCNN
RPN 是指 Region Proposal Network,建议区域生成网络。 Faster RCNN 中用 RPN 来代替了 Fast RCNN 中的SS算法。
Faster RCNN框架

Faster RCNN 在Fast RCNN的基础上更进一步,将候选框生成也融入到CNN网络中,使得 候选框生成、特征提取、候选框分类、候选框边界回归这四大部分都结合在一个CNN网络中,避免了分步训练,实现了真正端到端的目标检测。
在这里插入图片描述

算法流程:

  • 将图像输入CNN网络得到相应的特征图。
  • 使用RPN网络生成候选框,将RPN生成的候选框投影到特征图上获得ROI区域的特征矩阵。
  • 将每个ROI区域的特征矩阵通过 ROI pooling层缩放到7×7大小的特征图,接着将特征图展平为vector,之后通过一系列全连接层得到预测结果。

3.1.1 Faster RCNN 网络结构

在这里插入图片描述
在这里插入图片描述

如图所示,Faster RCNN检测部分主要可以分为四个模块:

  • conv layers。即特征提取网络,用于提取特征。通过一组conv+relu+pooling层来提取图像的feature maps,用于后续的RPN层和取proposal。

共有13个conv层,13个relu层,4个pooling层
conv:kernel_size=3,padding=1,stride=1
pooling:kernel_size=2,padding=0,stride=2
根据卷积和池化公式可得,经过每个conv层后,feature map大小都不变;经过每个pooling层后,feature map的宽高变为之前的一半。

  • RPN(Region Proposal Network)。即区域候选网络,该网络替代了之前RCNN版本的Selective Search,用于生成候选框。这里任务有两部分,一个是分类:判断所有预设anchor是属于positive还是negative(即anchor内是否有目标,二分类);还有一个boundingbox regression:修正anchors得到较为准确的proposals。因此,RPN网络相当于提前做了一部分检测,即判断是否有目标(具体什么类别这里不判),以及修正anchor使框的更准一些。
  • RoI Pooling。即兴趣域池化(SPPnet中的空间金字塔池化),用于收集RPN生成的proposals(每个框的坐标),并从(1)中的featuremaps中提取出来(从对应位置扣出来),生成proposals feature maps送入后续全连接层继续做分类(具体是哪一类别)和回归。
  • Classification and Regression。利用proposals feature maps计算出具体类别,同时再做一次bounding box regression获得检测框最终的精确位置。

3.2 RPN网络结构

3.2.1 anchor的定义

anchor不是候选框(Proposal),后面会提到二者的区别。

我们在特征图中找一个点,就可以在原图中找到对应的一个像素点,以该像素点为中心,画出9个不同大小和长宽比的框,称为anchor 。如下图所示,这些anchor里面可能包含目标,也可能没有目标。因为我们在一张图中想找的的目标的大小和长宽比并不是固定的,所以这里用9个不同大小和长宽比的anchor来进行预测。
在这里插入图片描述
那么为什么是9个anchor呢?

论文中给出了每个anchor的面积和长宽比:

在这里插入图片描述
所以特征图中的每个位置在原图中都会生成 3×3=9 个anchor,如下图所示,蓝色的三个anchor是面积为128×128的,红色是面积为256×256的,绿色是512×512的。
在这里插入图片描述

3.2.2 RPN生成proposal的过程

在这里插入图片描述
RPN结构有两条线。

分类

上面一条通过softmax分类anchors获得positive和negative分类。

Reshape层是技术细节问题,对feature map进行维度变换,使得有一个单独的维度为2,方便在该维度上进行softmax操作,之后再Reshape恢复原状。

(M/16)x(N/16)x256的特征通过1x1卷积得到(M/16)x(N/16)x2k的输出,因为这里是二分类判断positive和negative,所以该feature map上每个点的每个anchor对应2个值,表示目标和背景的概率

计算偏移量

下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。

(M/16)x(N/16)x256的特征通过1x1卷积得到(M/16)x(N/16)x4k的输出,因为这里是生成每个anchor的坐标偏移量(用于修正anchor),[tx,ty,tw,th]共4个所以是4k。注意,这里输出的是坐标偏移量,不是坐标本身,要得到修正后的anchor还要用原坐标和这个偏移量运算一下才行。

生成Proposal

如上图Proposal层,这是RPN里最后一个步骤,输入有三个:

  • cls层生成的(M/16)x(N/16)x2k向量

  • reg层生成的(M/16)x(N/16)x4k向量

  • im_info=[M, N,scale_factor]

(1)利用reg层的偏移量,对所有的原始anchor进行修正
(2)利用cls层的scores,按positive socres由大到小排列所有anchors,取前topN(比如6000个)个anchors
(3)边界处理,把超出图像边界的positive anchor超出的部分收拢到图像边界处,防止后续RoI pooling时proposals超出边界。
(4)剔除尺寸非常小的positive anchor
(5)对剩余的positive anchors进行NMS(非极大抑制)
(6)最后输出一堆proposals左上角和右下角坐标值([x1,y1,x2,y2]对应原图MxN尺度)

RPN网络总体流程:
生成anchors–>softmax分类器提取positive anchors–>bbox regression回归positive anchors生成偏移量–>生成最终Proposals

三种算法的比较

在这里插入图片描述

四、Mask RCNN

Mask R-CNN是一个非常灵活的框架,可以增加不同的分支完成不同的任务,可以完成目标分类、目标检测、语义分割、实例分割、人体姿势识别等多种任务。

4.1 Mask RCNN总体流程

Mask-RCNN 大体框架还是 Faster-RCNN 的框架,可以说在基础特征网络之后又加入了全连接的分割子网,由原来的两个任务(分类+回归)变为了三个任务(分类+回归+分割)。Mask R-CNN 采用和Faster R-CNN相同的两个阶段:

第一个阶段具有相同的第一层(即RPN),扫描图像并生成候选框(proposals,即有可能包含一个目标的区域);

第二阶段,除了预测种类和bbox回归,并添加了一个全卷积网络的分支,对每个RoI预测了对应的二值掩膜(binary mask),以说明给定像素是否是目标的一部分。所谓二进制mask,就是当像素属于目标的所有位置上时标识为1,其它位置标识为 0。示意图如下:
在这里插入图片描述
总体流程如下:
在这里插入图片描述

  • 首先,输入一幅你想处理的图片,然后进行对应的预处理操作,或者预处理后的图片;

  • 然后,将其输入到一个预训练好的神经网络中(ResNet等)获得对应的feature map;

  • 接着,对这个feature map中的每一点设定预定个的ROI,从而获得多个候选ROI;

  • 接着,将这些候选的ROI送入RPN网络进行二值分类(前景或背景)和BB回归,过滤掉一部分候选的ROI;

  • 接着,对这些剩下的ROI进行ROIAlign操作(即先将原图和feature map的pixel对应起来,然后将feature map和固定的feature对应起来);

  • 最后,对这些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语义分割)

4.2 Mask RCNN网络架构

4.2.1 backbone

backbone是一系列的卷积层用于提取图像的feature maps,比如可以是VGG16,VGG19,GooLeNet,ResNet50,ResNet101等

4.2.2 FPN(Feature Pyramid Networks)

多尺度检测在目标检测中变得越来越重要,对小目标的检测尤其如此。现在主流的目标检测方法很多都用到了多尺度的方法,包括最新的yolo v3。Feature Pyramid Network (FPN)则是一种精心设计的多尺度检测方法,下面就开始简要介绍FPN。

FPN结构中包括自下而上,自上而下和横向连接三个部分,如下图所示。这种结构可以将各个层级的特征进行融合,使其同时具有强语义信息和强空间信息,在特征学习中算是一把利器了。在这里插入图片描述
FPN实际上是一种通用架构,可以结合各种骨架网络使用,比如VGG,ResNet等。Mask RCNN文章中使用了ResNNet-FPN网络结构。如下图:
在这里插入图片描述
ResNet-FPN包括3个部分,自下而上连接,自上而下连接和横向连接。下面分别介绍。
自下而上

从下到上路径。可以明显看出,其实就是简单的特征提取过程,和传统的没有区别。具体就是将ResNet作为骨架网络,根据feature map的大小分为5个stage。stage2,stage3,stage4和stage5各自最后一层输出conv2,conv3,conv4和conv5分别定义为 C2,C3,C4,C5,他们相对于原始图片的stride是{4,8,16,32}。需要注意的是,考虑到内存原因,stage1的conv1并没有使用。

自上而下和横向连接

自上而下是从最高层开始进行上采样,这里的上采样直接使用的是最近邻上采样,而不是使用反卷积操作,一方面简单,另外一方面可以减少训练参数。横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合。具体就是对 C2,C3,C4,C5中的每一层经过一个conv 1x1操作(1x1卷积用于降低通道数),无激活函数操作,输出通道全部设置为相同的256通道,然后和上采样的feature map进行加和操作。在融合之后还会再采用3*3的卷积核对已经融合的特征进行处理,目的是消除上采样的混叠效应(aliasing effect)。

实际上,上图少绘制了一个分支:M5经过步长为2的max pooling下采样得到 P6,作者指出使用P6是想得到更大的anchor尺度512×512。但P6是只用在 RPN中用来得到region proposal的,并不会作为后续Fast RCNN的输入。

总结一下,ResNet-FPN作为RPN输入的feature map是 [P2,P3,P4,P5,P6] ,而作为后续Fast RCNN的输入则是 [P2,P3,P4,P5] 。

将ResNet-FPN+Fast RCNN+mask,则得到了最终的Mask RCNN,如下图:
在这里插入图片描述
Mask RCNN的构建很简单,只是在ROI pooling(实际上用到的是ROIAlign,后面会讲到)之后添加卷积层,进行mask预测的任务。

下面总结一下Mask RCNN的网络:

  1. 骨干网络ResNet-FPN,用于特征提取,另外,ResNet还可以是:ResNet-50,ResNet-101,ResNeXt-50,ResNeXt-101;
  2. 头部网络,包括边界框识别(分类和回归)+mask预测。头部结构见下图:
    在这里插入图片描述

4.2.3 ROIAlign

实际上,Mask RCNN中还有一个很重要的改进,就是ROIAlign。Faster R-CNN存在的问题是:特征图与原始图像是不对准的(mis-alignment),所以会影响检测精度。而Mask R-CNN提出了RoIAlign的方法来取代ROI pooling,RoIAlign可以保留大致的空间位置。

为了讲清楚ROI Align,这里先插入两个知识,双线性插值和ROI pooling。
**1.双线性插值:**在两个方向上做线性插值。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
2.ROIpooling
ROI pooling就不多解释了,直接通过一个例子来形象理解。假设现在我们有一个8x8大小的feature map,我们要在这个feature map上得到ROI,并且进行ROI pooling到2x2大小的输出。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将它划分为2x2的网格,因为ROI的长宽除以2是不能整除的,所以会出现每个格子大小不一样的情况。
在这里插入图片描述
进行max pooling的最终2x2的输出为:
在这里插入图片描述
最后以一张动图形象概括之:
在这里插入图片描述
3. ROI Align
在Faster RCNN中,有两次整数化的过程:

  1. region proposal的xywh通常是小数,但是为了方便操作会把它整数化。
  2. 将整数化后的边界区域平均分割成 k x k 个单元,对每一个单元的边界进行整数化。

两次整数化的过程如下图所示:
在这里插入图片描述
事实上,经过上述两次整数化,此时的候选框已经和最开始回归出来的位置有一定的偏差,这个偏差会影响检测或者分割的准确度。在论文里,作者把它总结为“不匹配问题”(misalignment)。

为了解决这个问题,ROI Align方法取消整数化操作,保留了小数,使用以上介绍的双线性插值的方法获得坐标为浮点数的像素点上的图像数值。但在实际操作中,ROI Align并不是简单地补充出候选区域边界上的坐标点,然后进行池化,而是重新进行设计。

下面通过一个例子来讲解ROI Align操作。如下图所示,虚线部分表示feature map,实线表示ROI,这里将ROI切分成2x2的单元格。如果采样点数是4,那我们首先将每个单元格子均分成四个小方格(如红色线所示),每个小方格中心就是采样点。这些采样点的坐标通常是浮点数,所以需要对采样点像素进行双线性插值(如四个箭头所示),就可以得到该像素点的值了。然后对每个单元格内的四个采样点进行maxpooling,就可以得到最终的ROIAlign的结果。
在这里插入图片描述
需要说明的是,在相关实验中,作者发现将采样点设为4会获得最佳性能,甚至直接设为1在性能上也相差无几。事实上,ROI Align 在遍历取样点的数量上没有ROIPooling那么多,但却可以获得更好的性能,这主要归功于解决了misalignment的问题。

五、SSD

5.1 网络模型

5.1.1 VGG Backbone

根据SSD的论文描述,作者采用了vgg16的部分网络作为基础网络,在5层网络后,丢弃全连接,改为两个卷积网络,分别为:1024x3x3、1024x1x1。

在这里插入图片描述

值得注意:

  1. conv4-1前面一层的maxpooling的ceil_mode=True,使得输出为 38x38;
  2. Conv4-3网络是需要输出多尺度的网络层;
  3. Conv5-3后面的一层maxpooling参数为(kernel_size=3, stride=1, padding=1),不进行下采样。
    在这里插入图片描述

5.1.2 Extra Layers

作者为了后续的多尺度提取,在VGG Backbone后面添加了卷积网络。
在这里插入图片描述
网络层次:红框的网络需要进行多尺度分析,输入到multi-box网络
在这里插入图片描述

5.1.3 先验框生成

SSD从Conv4_3开始,一共提取了6个特征图,其大小分别为 (38,38),(19,19),(10,10),(5,5),(3,3),(1,1),但是每个特征图上设置的先验框数量不同。
先验框的大小:随着特征图大小降低,先验框尺度(s)线性增加,对于第一个特征图,它的先验框尺度比例设置为 Smin/2=0.1
,则其尺度为0.1×300=30,各个特征图的先验框尺度为{30,60,111,162,213,264}
在这里插入图片描述
在这里插入图片描述

先验框的长宽比:一般设置为:{1,2,3,1/2,1/3,1’ },两个长宽比为1但大小不同,在实现时,Conv4_3,Conv10_2和Conv11_2层仅使用4个先验框,它们不使用长宽比为 3和1/3的先验框;

在这里插入图片描述

5.2 损失函数

SSD的损失函数包括两部分的加权:
在这里插入图片描述
对于位置损失函数:
在这里插入图片描述
**对于置信度损失函数:**而对于置信度损失,首先需要使用hard negtive mining将正负样本按照1:3 的比例把负样本抽样出来,抽样的方法是:针对所有batch的confidence,按照置信度误差进行降序排列,取出前top_k个负样本。损失函数可以用下图表示
在这里插入图片描述

5.3 L2 正则化

VGG网络的conv4_3特征图大小38x38,网络层靠前,norm较大,需要加一个L2 Normalization,以保证和后面的检测层差异不是很大。
在这里插入图片描述

5.4 先验框匹配

训练时首先需要确定训练图片中的ground truth是由哪一个先验框来匹配,与之匹配的先验框所对应的边界框将负责预测它。

SSD的先验框和ground truth匹配原则主要有2点:

  • 对于图片中的每个ground truth,找到和它IOU最大的先验框,该先验框与其匹配,这样可以保证每个ground truth一定与某个prior匹配。
  • 对于剩余的未匹配的先验框,若某个ground truth和它的IOU大于某个阈值(一般设为0.5),那么改prior和这个ground truth,剩下没有匹配上的先验框都是负样本(如果多个ground truth和某一个先验框的IOU均大于阈值,那么prior只与IOU最大的那个进行匹配)。

5.5 NMS抑制

算法流程:

给出一张图片和上面许多物体检测的候选框(即每个框可能都代表某种物体),但是这些框很可能有互相重叠的部分,我们要做的就是只保留最优的框。假设有N个框,每个框被分类器计算得到的分数为 Si

  1. 建造一个存放待处理候选框的集合H,初始化为包含全部N个框;建造一个存放最优框的集合M,初始化为空集。
  2. 将所有集合 H 中的框进行排序,选出分数最高的框 m,从集合 H 移到集合 M;
  3. 遍历集合 H 中的框,分别与框 m 计算交并比(Interection-over-union,IoU),如果高于某个阈值(一般为0~0.5),则认为此框与 m 重叠,将此框从集合 H 中去除。
  4. 回到第2步进行迭代,直到集合 H 为空。集合 M 中的框为我们所需。
  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Faster R-CNN和Mask R-CNN都是目标检测算法,但是Mask R-CNN在Faster R-CNN的基础上增加了实例分割的功能。 具体来说,Faster R-CNN是一种两阶段的目标检测算法,它首先使用一个区域提议网络(Region Proposal Network,RPN)生成候选区域,然后对每个候选区域进行分类和回归,以得到最终的目标检测结果。 而Mask R-CNN在Faster R-CNN的基础上增加了一个分割分支,用于生成每个目标的掩码,从而实现实例分割。具体来说,Mask R-CNN在Faster R-CNN的基础上增加了一个分割分支,用于生成每个目标的掩码,从而实现实例分割。 因此,相比于Faster R-CNN,Mask R-CNN不仅可以检测目标,还可以对目标进行精确的分割,适用于更加复杂的场景和任务。 ### 回答2: Faster R-CNN和Mask R-CNN是计算机视觉领域中目标检测任务中的两种常见模型,它们在一些方面有相似之处,但在其它方面又有很大不同。 首先,Faster R-CNN模型是一种经典的两阶段检测器,其主要思路是先通过一个卷积神经网络(CNN)得到图像的特征图,然后再将特征图输入到一个基于Region Proposal Network(RPN)的模块中,生成若干个候选区域。最后,对每个候选区域再用一个分类器和回归器进行目标检测。相比于之前的目标检测方法,如R-CNN和Fast R-CNN,Faster R-CNN无需在每个候选区域上运行CNN,因此速度更快,精度更高。 而Mask R-CNN则是在Faster R-CNN的基础上进一步扩展得到的,它不仅可以完成目标检测,而且还能够生成每个目标的像素级别的语义分割(即每个像素的类别标注)。Mask R-CNN主要是在RPN后面加上一个实例分割网络,用于对候选区域中的物体进行精细分割。其主要思路是在每个候选区域中分别生成一张二值掩膜,在后续处理中再将掩膜大小调整到目标区域大小。在进行像素级别的分割时,Mask R-CNN可以将后面的分类器与一个卷积神经网络并行处理,这样可以在不增加计算量的情况下提高检测和分割的速度和精度。 总体来说,Faster R-CNN和Mask R-CNN都是目标检测任务中的高效模型,但二者的优缺点也各自存在。Faster R-CNN模型速度更快,但精细分割效果不够好;而Mask R-CNN模型在目标检测的基础上进一步增加了精细分割的功能,但必须要在每个候选区域上计算二值掩膜,因此速度略慢。总体来说,不同的应用场景需要根据任务需求选择最合适的模型。 ### 回答3: Faster RCNNMask RCNN计算机视觉领域中两个著名的深度学习物体检测模型,它们都是基于 Region-based Convolutional Neural Networks (R-CNNs) 并且显著提升了物体检测的准确度,速度和效率。 Faster RCNN 是2015年提出的第一个 R-CNNs 实现,它采用了两个阶段的物体检测策略。第一阶段是 Region Proposal Network (RPN),它可以从图像中提取出可能包含物体的候选区域 (region proposals)。第二阶段是 Fast R-CNN,它在已经提取的候选区域上运行物体检测网络,从而得到检测结果。相比于其他物体检测方法,Faster RCNN 有许多优势,它不仅速度快,而且能够提高物体检测的准确度。 Mask RCNN 是比 Faster RCNN 更加先进的模型,它是由 Facebook AI Research 在2017年提出的。这个模型允许在物体检测的过程中识别对象的分割区域,从而更准确地确定物体的位置和形状。例如,当模型检测到人脸后,它可以给出每个人脸区域的精确像素级分割结果。因此,Mask RCNN 在许多需要非常准确的物体检测的场景中得到了广泛应用,例如医学图像分析和自动驾驶系统。 虽然 Faster RCNNMask RCNN 在物体检测任务中都表现得非常出色,但是它们也存在一些不同之处。Mask RCNN 相对于 Faster RCNN 稍慢些,但却能够提供更加准确的结果。 Faster RCNN 的优点在于它的速度和效率,在大规模场景下可以更快地检测出物体位置。当然这两个模型的使用情境以及需要优化的方向也不尽相同,具体需要根据场景需求进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值