您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 目标检测RCNN系列讲解
基于R-CNN的系列目标检测算法组员:R-CNN,SPPNET,FastR-CNN,FasterR-CNN目录CONTENTS01背景知识02RCNNSPPNETFastR-CNNFasterR-CNN030504实例展示0601背景知识PARTONE背景知识04目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。目标检测背景知识05图像识别(classification):输入:图片输出:物体的类别评估方法:准确率。定位(localization):输入:图片输出:方框在图片中的位置(x,y,w,h)评估方法:检测评价函数intersection-over-union背景知识06目标检测算法1.传统的目标检测算法:Cascade+HOG/DPM+Haar/SVM以及上述方法的诸多改进、优化;2.候选区域/窗+深度学习分类:通过提取候选区域,并对相应区域进行以深度学习方法为主的分类的方案,如:R-CNN(SelectiveSearch+CNN+SVM)SPP-net(ROIPooling)FastR-CNN(SelectiveSearch+CNN+ROI)FasterR-CNN(RPN+CNN+ROI)R-FCN等系列方法;3.基于深度学习的回归方法:YOLO/SSD/DenseBox等方法;以及最近出现的结合RNN算法的RRCdetection;结合DPM的DeformableCNN等。02R-CNNPARTTWOR-CNN08传统目标检测方法传统目标检测的算法基本流程如下:使用不同尺度的滑动窗口选定图像的某一区域为候选区域;从对应的候选区域提取如HarrHOGLBPLTP等一类或者多类特征;使用Adaboost、SVM等分类算法对对应的候选区域进行分类,判断是否属于待检测的目标。1、基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;2、手工设计的特征对于多样性的变化没有很好的鲁棒性。传统目标检测方法的缺点R-CNN09R-CNN是Region-basedConvolutionalNeuralNetworks的缩写,中文翻译是基于区域的卷积神经网络,是一种结合区域提名(RegionProposal)和卷积神经网络(CNN)的目标检测方法。区域提名(RegionProposal):利用图像中的纹理、边缘、颜色等信息,预先找出图中目标可能出现的位置。需要解决的问题:(1)适应不同尺度(2)多类别图像的适应性(3)速度。R-CNN的主要贡献:1)传统目标检测算法一般使用滑动窗口扫描所有可能区间,同时需要考虑变化窗口尺寸以适应不同大小的目标,这种方法效率太低。R-CNN使用SelectiveSearch方法预先提取所有候选区域;2)传统目标检测算法依赖人工设计的特征,R-CNN使用深度学习自动提取和学习特征。R-CNN10R-CNN的简要步骤如下:(1)输入测试图像;(2)利用选择性搜索(SelectiveSearch)算法在图像中从下到上提取2000个左右的可能包含物体的候选区域;(3)因为取出的区域大小各自不同,所以需要将每个候选区域缩放(warp)成统一的227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征;(4)将每个候选区域提取到的CNN特征输入到SVM进行分类。R-CNN的总体思路R-CNN11SelectiveSearch算法1.使用EfficientGraph-BasedImageSegmentation的方法获取原始分割区域R={r1,r2,……,rn}。区域内间距区域为对应最小生成树中权重最大的边的权重值。区域间间距即在所有分别属于两个区域且有边连接的点对中,寻找权重最小的那对(若两个区域内的点没有边相连,则定义间距为正无穷大)。2.初始化相似度集合𝑆=∅。3.计算两两相邻区域之间的相似度将其添加到相似度集合𝑆中。𝑠ri,rj=𝑎1𝑆𝑐𝑜𝑙𝑜𝑢𝑟ri,rj+𝑎2𝑆𝑡𝑒𝑥𝑡𝑢𝑟𝑒ri,rj+𝑎3𝑆𝑠𝑖𝑧𝑒ri,rj+𝑎4𝑆𝑓𝑖𝑙𝑙ri,rj4.从相似度集合𝑆中找出,相似度最大的两个区域ri和rj,将其合并成为一个区域r𝑡,从相似度集合中除去原先与ri和rj相邻区域之间计算的相似度,计算r𝑡与其相邻区域(原先与ri或rj相邻的区域)的相似度,将其结果添加的到相似度集合S中。同时将新区域r𝑡添加到区域集合R中。5.获取每个区域的BoundingBoxes,这个结果就是物体位置的可能结果L。R-CNN12RCNN的具体步骤步骤一:训练(或者下载)一个分类模型(比如AlexNet)R-CNN13步骤二:对该模型做fine-tuning•将分类数从1000改为20,比如20个物体类别+1个背景•去掉最后一个全连接层R-CNN14步骤三:特征提取•提取图像的所有候选框(选择性搜索SelectiveSearch);•对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(就是对候选框提取到的特征)存到硬盘。R-CNN15步骤四:训练一个SVM分类器(二分类)来判断这个候选框里物体的类别每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative。比如下图,就是对狗分类的SVMR-CNN16步骤五:使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美R-CNN171、基于R-CNN目标检测算法只能输入固定尺寸的图片,样本输入受限2、经人工处理过的图片,易降低网络识别检测精度3、R-CNN需对各候选区域进行一次卷积操作,计算量大,耗时长R-CNN存在的问题人工图片处理样例03SPPNETPARTTHREESPPNET19在R-CNN的第一步中,对原始图片通过SelectiveSearch提取的候选框多达2000个左右,而这2000个候选框每个框都需要进行CNN提特征+SVM分类,计算量很大,导致R-CNN检测速度很慢,一张图都需要47s。而且,基于R-CNN目标检测算法只能输入固定尺寸的图片,样本输入受限,使用很不方便。那么如何改进呢?SPP-NET的出现恰好解决了这些问题。SPP-Net(SpatialPyramidPooling)是何凯明2014年提出的方法,通过解决传统CNN无法处理不同尺寸输入的问题对同年的R-CNN算法做改进,实验结果表明SPP方法比R-CNN快了近100倍从算法架构上,SPP-Net与R-CNN相似:通过SelectiveSearch获取候选区域,最后也是使用SVM做分类。但不再将每个候选区域过一次CNN,而是将原始图过一次CNN,在CNN的全连接层前添加新提出的SPP层,根据候选区域位置crop的图像卷积结果通过SPP层来确保输入全连接层的尺寸满足要求。最后在全连接层的输出一次性获得所有候选区域的特征向量。SPPNET20SPPNET的原理可允许不同尺寸图片输入,将R-CNN最后一个卷积层后的池化层替换为SPP层,生成长度固定的特征,并输入到最后的全连接层中。特点:1、可实现CNN多尺度图像的输入;2、只对原图进行一次卷积特征提取。SPPNet结构SPPNetvsR-CNNSPPNET21SPPNET的具体步骤步骤一:选择性搜索对待检测图片,选择性搜索出2000个候选框候选区域提取SPPNET22步骤二:特征提取将整张待检测图片输入CNN中,进行一次特征提取,得到featuremaps。在各featuremap中找到各候选框区域。SPPNet特征提取SPPNET23步骤三:空间金字塔池化对各候选框区域进行空间金字塔池化,提取出固定长度的特征向量。空间金字塔池化SPPNET24步骤四:训练SVM分类器利用SVM算法,对各候选区域对应的特征向量进行分类识别。SVM分类识别SPPNET25SPPNET存在的问题经SPPNET改进后的R-CNN虽能有效提高检测速度,但仍存在局限性:在SPPNET采用selectivesearch对原始图片进行候选区域提取时,由于候选区域数量较多,存在候选区域特征重复提取计算问题,限制了SPPNET的检测速度。另外,对SPPNET,虽然ROI特征在最后一个卷积层才提取,省去了多次前向CNN。但由于SVM,ROI特征仍需存储。此外,SPPNET中的tunning无法更新SPP层之前的所有权重,因此对于比较深的网络无能为力。04FastR-CNNPARTFOURFastR-CNN27R-CNN和SPPNET的不足:1)R-CNN和SPPNET的训练都需要经过多个阶段:fine-tuning得到网络卷积层的特征输出、SVM对每组特征向量的学习、位置boundingbox的回归2)对R-CNN,训练和测试的时间空间开销大。每个图像提取的大量ROI特征需要存储和通过CNN3)对SPPNET,虽然ROI特征在最后一个卷积层才提取,省去了多次前向CNN。但由于SVM,ROI特征仍需存储。此外,SPPNET中的tunning无法更新SPP层之前的所有权重,因此对于比较深得网络无能为力FastR-CNN是RossGirshick在2015年对上一年的SPPNet算法做的改进。作者在VGG16网络的测试表明:FastR-CNN在训练阶段比R-CNN快了9倍,比SPPNET快了3倍;在测试阶段比R-CNN快了213倍,比SPPNET快了10倍;同时精度也有一定提升。FastR-CNN28FastR-CNN算法思想FastR-CNN算法首先通过selectivesearch方法生成约2K个ROI,连同图像一起输入到CNN网络;在最后一个卷积层后求取ROI位置的映射关系,使用1层的SPP池化层将每个ROI统一到相同大小;最后通过两个全连接层,一个FC层后接softmax实现分类,一个FC层后接boundingbox回归得到类别修正后的位置。FastR-CNN29(1)ROIpoolinglayer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROIpoolinglayer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有regionproposal对应了一个7*7*512维度的特征向量作为全连接层的输入。换言之,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量。(2)边框回归对于窗口一般使用四维向量(x,y,w,h),分别表示窗口的中心点坐标和宽高。红色的框P代表原始的Proposal,绿色的框G代表目标的GroundTruth,我们的目标是寻找一种关系使得输入原始的窗口P经过映射得到一个跟真实窗口G更接近的回归窗口G^。所以,边框回归的目的即是:给定(Px,Py,Pw,Ph)寻找一种映射f,使得f(Px,Py,Pw,Ph)=(Gx^,Gy^,Gw^,Gh^)并且(Gx^,Gy^,Gw^,Gh^)≈(Gx,Gy,Gw,Gh)FastR-CNN30与R-CNN框架图对比,可以发现主要有两处不同:一是最后一个卷积层后加了一个ROIpoolinglayer;二是损失函数使用了多任务损失函数,将边框回归BoundingBoxRegression直接加入到CNN网络中训练。FastR-CNNvsR-CNNFastR-CNN31R-CNN:许多候选框-CNN-得到每个候选框的特征-分类+回归FastR-CNN:一张图片-CNN-得到每张候选框的特征-分类+回归所以,FastR-CNN相对于R-CNN的提速原因就在于:不像R-CNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到第五个卷积层上,而FastR-CNN只需要计算一次特征,剩下的只需要在第五个卷积层上操作就可以了。然而,FastR-CNN在进行选择性搜索时,需要找出所有的候选框,这个
本文标题:目标检测RCNN系列讲解
链接地址:https://www.777doc.com/doc-4702009 .html