RCNN,Fast-RCNN,Faster-RCNN目标检测

这段时间看了一下目标检测这个方向关于深度学习的处理方法,包括RCNN,Fast-RCNN,Faster-RCNN的two-stage以及SSD系列和YOLO系列的one-stage,这篇博客将two-stage详细的讲解一下,有不准确的地方希望大佬指正!

1.RCNN

1.1 什么是目标检测

本篇论文的题目是 《Rich feature hierarchies for accurate oject detection and semantic segmentation》,通俗地来讲就是一个用来做目标检测和语义分割的神经网络。RCNN是将CNN的方法应用到目标检测任务的一个里程碑。
下面先讲解一下什么是目标检测:
在这里插入图片描述
如上图所示:目标检测就是在一幅图像上面不仅要识别出图像中指定物体的类别,也就是传统的图像识别任务,还要将指定图像的类别所在的位置给框起来,一幅图像可能有很多指定的检测目标,上面的图像有三个目标:狗,自行车,汽车,目标检测的任务就是把这三个图像上的目标给识别出来,而且要用方框框起来。

1.2 RCNN的原理

在这里插入图片描述
上面是论文里面的图像
首先我们看第一步:输入图像,根据你选择的图像的分辨率大小调整图像的分辨率。
再看第二步:产生候选区域,这里作者使用的是selective search的方法,这里我不做具体的说明,因为在后面的改进方法中由于这种方法不能够使用GPU加速,使得模型的检测速度很慢,所以在后面的改进方法中这种产生候选区域的方法被替代了。通俗易懂的讲就是作者使用这种方法在一张图像上面产生了大约2000个候选区域,同时将这2000个候选区域固定成相同的大小
第三步:进行CNN特征提取,就是将产生的2000个候选区域分别使用CNN进行特征提取,包括一系列的卷积和池化操作
得到输出
第四步:对每一个经过特征提取的区域进行分类和边界回归,其中分类使用的是SVM分类器,用于对2000个区域的每一个区域进行分类识别到底属于哪一个类,边界回归训练一个回归器,用于调整候选框的位置

具体的算法流程:
1:选择一个CNN模型(比如AlexNet或者VggNet)
2:去掉最后一个全连接层
3:将分类数从1000改成N+1,其中N使我们的数据的标签数,1指的是背景
4:对模型微调,优化卷积层和池化层的参数
5:对使用selective search方法产生的2000个候选区域做特征提取:文章中resize区域大小,因为通过 Selective Search 产生的候选区域大小不一,文章采用的是Alexnet网络结构,为了与 Alexnet 兼容,R-CNN 采用了非常暴力的手段,那就是无视候选区域的大小和形状,统一变换到 227*227 的尺寸。将第5个池化层的输出保存到硬盘。
6:使用pool5输出的图像特征训练SVM分类器(2分类),来判断这个候选框的物体类别,每一个类别训练一个SVM分类器,因为一共产生了2000个候选框,SVM分类的时候就会导致有很多的候选框的重叠现象,就是说SVM分类器会识别出很多的框属于我们的目标类别,此时以最高分的候选框为基础,使用非极大值抑制(NMS)的方法删除重叠的候选框。
7:使用pool5输出的图像特征训练一个回归器(dx,dy,dw,dh),dx表示水平平移,dy表示竖直平移,dw表示宽度缩放,dh表示高度的缩放,使用回归器调整候选框的位置
具体可以用下面的图来解释:
在这里插入图片描述
但是这会出现很多问题:
1)多个候选区域对应的图像需要预先提取,占用较大的磁盘空间;

2)针对传统CNN需要固定尺寸的输入图像,crop/warp(归一化)产生物体截断或拉伸,会导致输入CNN的信息丢失;

3)每一个Proposal Region都需要进入CNN网络计算,上千个Region存在大量的范围重叠,重复的特征提取带来巨大的计算浪费,检测速度缓慢。

2.SPP-Net

RCNN的进化版本中,SPP-net对其影响巨大,这里简要的讲解一下SPP-Net。
SPP-Net的主要的思想就是只需要对图像进行一次的卷积操作就可以得到每一个候选区域的特征,因为RCNN的最大的问题就是2000个候选区域都要进行一次CNN,这就导致速度十分的缓慢。
作者对卷积层可视化发现:输入图片的某个位置的特征反应在经过卷积的特征图上面也是在相同的位置,作者将通过Selective Search方法得到的候选区域的位置记录下来,通过比例映射到conv5输出的feature map特征图上面,提取出候选区域的特征图m,然后将m作为输入放到金字塔池化层中进行计算。
通俗易懂的将就是我们不是要提取特征吗,原来RCNN提取特征是ss算法产生2000个左右的候选区域,然后一个一个的用CNN提取特征,SPP-Net呢,发现对图像进行卷积之后得到的feature map特征图,假设图像上有一个车,他的位置是(2,3,4,5),分别表示框的4个坐标,那么在feature map上面呢这个车的位置还是(2,3,4,5),也就是位置没有变,但是如果你经过池化层之后,因为你的特征图的大小会改变,那么作者就经过等比例的映射关系也可以定位到我们ss算法产生的候选框所对应特征所在的区域,只需要提取那个区域的特征就可以了,就不用分别进行特征提取,增加了检测的速度。
在这里插入图片描述
如上图所示:作者还进行了另一个改进,就是上图的SPP模块,使用金字塔池化层替换pool5层。为了适应不同分辨率的特征图,定义一种可伸缩的池化层,不管输入分辨率是多大,都可以划分成mn个部分。这是SPP-net的第一个显著特征,它的输入是conv5特征图 以及特征图候选框(原图候选框 通过stride映射得到),输出是固定尺寸(mn)特征;
通俗易懂的讲就是卷积层接受任意大小的输入,所以他们的输出也是各种大小。而分类器(SVM/softmax)或者全连接层需要固定的输入大小的向量。为了让我们的神经网络适应任意尺寸的图像输入,我们用一个空间金字塔池化层替换掉了最后一个池化层
在这里插入图片描述
也就是上面的结构。黑色图片代表卷积层之后的特征图,随后我们以不同大小的块来提取特征,分别是4x4,2x2,1x1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块(Spatial bins).我们从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。这种以不同的大小格子的组合方式来池化的过程就是空间金字塔池化(SPP)。,要进行空间金字塔最大池化,其实就是从这21个图片块中,分别计算每个块的最大值,从而得到一个输出单元,最终得到一个21维特征的输出。

3.Fast-RCNN

随后RCNN的作者在经过SPP-Net的启发下,推出了Fast-RCNN.
在这里插入图片描述
Fast R-CNN的RegionProposal是在feature map之后做的,这样可以不用对所有的区域进行单独的CNN特征提取步骤。
在这里插入图片描述
关于ROI polling层其实就是SSP-Net金字塔池化层的一种简单地表示,roi-polling层只是用一种固定大小的max-pooling。
对每个候选区域均匀的分成MxN块,对每块进行max-pooling,将特征图上大小不一的候选区域转变为大小统一的数据送入下一层。
在这里插入图片描述
基本结构图:
在这里插入图片描述
图像归一化为224×224直接送入网络。
前五阶段是基础的conv+relu+pooling形式,在第五阶段结尾,输入P个候选区域(图像序号×1+几何位置×4)
第五阶段的特征输入到两个并行的全连层中(称为multi-task)
在这里插入图片描述
cls_score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。
bbox_prdict层用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。

做一个总体的介绍:
首先输入一张图片(224x224x3),经过CNN特征提取之后得到特征数据,通过ss算法得到候选框区域,按照SPP-Net的思路经过等比例特征映射可以得到不同候选框的特征,无需分别进行CNN特征提取,对于特定的候选框的特征经过ROI-pooling层,可以对任意大小的特征整合到相同的大小,经过全连接层之后得到的特征再经过multi-task模块进行分类和回归。

4.Faster-Rcnn

因为selective search产生候选框区域的方法不能够进行GPU的加速,且运行缓慢,导致模型的整体的速度慢,所以作者在Faster-RCNN中舍弃了ss算法,加入了一个专门用于生成候选框的神经网络(RPN网络),所以Faster-RCNN可以看做是RPN网络加上Fast-RCNN网络。
在这里插入图片描述
上述RPN网络计算流程:
1:最后一个卷积层输出的特征图再进行一次卷积操作得到新的特征图
2:新的特征图假设为40x60,可以认为是40x60=2400个点,每个点都可以对应到原始图像(SSP-Net所说的特征映射),每一个点生成9个anchor,一共得到9x2400大约20000多个候选区域,9个anchor对应不同的大小,长宽比
在这里插入图片描述
3:计算所有候选区域的scores
4:把所有超出图片的候选区域都限制在图片区域内,选出scores高的前12000个候选区域
5:剩余区域内有些候选框区域和其他候选框区域有大量重叠,基于第四步计算的scores,采用非极大值抑制(NMS)固定IOU的阈值为0.7,选出scores最大的前2000个候选区域,这2000个候选区域如果与某个真实标注区域的重叠比例大于0.7,记为正样本,如果与任意一个真实标注的IOU小于0.3,记为负样本,其余区域不作为样本
6:在训练RPN层分类回归任务的时候,随机抽取256个区域训练,正负候选区域比例为1:1,如果正样本的数量小于128,则使用负样本填充
7:训练最后的分类回归模型的时候,随机抽取64个与真实标注框IOU>=0.5的区域作为前景,256-64个IOU<0.5但是>0.1的区域作为背景作训练
整体结构图:
在这里插入图片描述
1)、Conv layers提取特征图:

作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取input image的feature maps,该feature maps会用于后续的RPN层和全连接层

2)、RPN(Region Proposal Networks):

RPN网络主要用于生成region proposals,首先生成一堆Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体or不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)

3)、Roi Pooling:

该层利用RPN生成的proposals和VGG16最后一层得到的feature map,得到固定大小的proposal feature map,进入到后面可利用全连接操作来进行目标识别和定位

4)、Classifier:

会将Roi Pooling层形成固定大小的feature map进行全连接操作,利用Softmax进行具体类别的分类,同时,利用L1 Loss完成bounding box regression回归操作获得物体的精确位置.

在这里插入图片描述
就是在Fast-RCNN的基础上,舍去了ss算法,新加了一个RPN网络用于生成候选框,大大提高了检测速度。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值