《目标检测综述_1-精品文档.docx》由会员分享,可在线阅读,更多相关《目标检测综述_1-精品文档.docx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目标检测综述一、传统目的检测方法如上图所示,传统目的检测的方法一般分为三个阶段:首先在给定的图像上选择一些候选的区域,然后对这些区域提取特征,最后使用训练的分类器进行分类。下面我们对这三个阶段分别进行介绍。(1)区域选择这一步是为了对目的的位置进行定位。由于目的可能出如今图像的任何位置,而且目的的大小、长宽比例也不确定,所以最初采用滑动窗口的策略对整幅图像进行遍历,而且需要设置不同的尺度,不同的长宽比。这种穷举的策略固然包含了目的所有可能出现的位置,但是缺点也是显而易见的:时间复杂度太高,产生冗余窗口过多,这也严重影响后续特征提取和分类的速度和性能。实际上由于遭到时间复杂度的问题,滑动窗口的长
2、宽比一般都是固定的设置几个,所以对于长宽比浮动较大的多类别目的检测,即使是滑动窗口遍历也不能得到很好的区域(2)特征提取由于目的的形态多样性,光照变化多样性,背景多样性等因素使得设计一个鲁棒的特征并不是那么容易。然而提取特征的好坏直接影响到分类的准确性。这个阶段常用的特征有SIFT、HOG等(3)分类器主要有SVM,Adaboost等。总结:传统目的检测存在的两个主要问题:一是基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;二是手工设计的特征对于多样性的变化并没有很好的鲁棒性。二、基于RegionProposal的深度学习目的检测算法对于传统目的检测任务存在的两个主要问题,我们该
3、怎样解决呢?对于滑动窗口存在的问题,regionproposal提供了很好的解决方案。regionproposal候选区域是预先找出图中目的可能出现的位置。但由于regionproposal利用了图像中的纹理、边缘、颜色等信息,能够保证在选取较少窗口几千个甚至几百个的情况下保持较高的召回率。这大大降低了后续操作的时间复杂度,并且获取的候选窗口要比滑动窗口的质量更高滑动窗口固定长宽比。比拟常用的regionproposal算法有selectiveSearch和edgeBoxes,假如想详细了解regionproposal能够看一下PAMI2021的“Whatmakesforeffectivede
4、tectionproposals?有了候选区域,剩下的工作实际就是对候选区域进行图像分类的工作特征提取+分类。对于图像分类,不得不提的是2021年ImageNet大规模视觉识别挑战赛ILSVRC上,机器学习泰斗GeoffreyHinton教授带领学生Krizhevsky使用卷积神经网络将ILSVRC分类任务的Top-5error降低到了15.3%,而使用传统方法的第二名top-5error高达26.2%。此后,卷积神经网络占据了图像分类任务的绝对统治地位,微软最新的ResNet和谷歌的InceptionV4模型的top-5error降到了4%以内多,这已经超越人在这个特定任务上的能力。所以目的
5、检测得到候选区域后使用CNN对其进行图像分类是一个不错的选择。2021年,RBGRossB.Girshick大神使用regionproposal+CNN代替传统目的检测使用的滑动窗口+手工设计特征,设计了R-CNN框架,使得目的检测获得宏大突破,并开启了基于深度学习目的检测的热潮。1.R-CNN(CVPR2021,TPAMI2021)(Region-basedConvolutionNetworksforAccurateObjectdetectionandSegmentation)上面的框架图明晰的给出了R-CNN的目的检测流程:(1)输入测试图像(2)利用selectivesearch算法在图
6、像中提取2000个左右的regionproposal。(3)将每个regionproposal缩放warp成227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征。(4)将每个regionproposal提取到的CNN特征输入到SVM进行分类。上面的框架图是测试的流程图,要进行测试我们首先要训练好提取特征的CNN模型,以及用于分类的SVM:使用在ImageNet上预训练的模型AlexNet/VGG16进行微调得到用于特征提取的CNN模型,然后利用CNN模型对训练集提特征训练SVM。对每个regionproposal缩放到同一尺度是由于CNN全连接层输入需要保证维度固定。上图少画了
7、一个经过对于SVM分好类的regionproposal做边框回归bounding-boxregression),边框回归是对regionproposal进行纠正的线性回归算法,为了让regionproposal提取到的窗口跟目的真实窗口更吻合。由于regionproposal提取到的窗口不可能跟人手工标记那么准,假如regionproposal跟目的位置偏移较大,即使是分类正确了,但是由于IoU(regionproposal与GroundTruth的窗口的交集比并集的比值)低于0.5,那么相当于目的还是没有检测到。小结:R-CNN在PASCALVOC2007上的检测结果从DPMHSC的34.3
8、%直接提升到了66%(mAP)。如此大的提升使我们看到了regionproposal+CNN的宏大优势。但是R-CNN框架也存在着很多问题:(1)训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器(2)训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件(3)速度慢:使用GPU,VGG16模型处理一张图像需要47s。针对速度慢的这个问题,SPP-NET给出了很好的解决方案。2.SPP-NET(ECCV2021,TPAMI2021)(SpatialPyramidPoolinginDeepConvolutionalNetworksforVisualRecognition)先看
9、一下R-CNN为什么检测速度这么慢,一张图都需要47s!仔细看下R-CNN框架发现,对图像提完regionproposal2000个左右之后将每个proposal当成一张图像进行后续处理(CNN提特征+SVM分类),实际上对一张图像进行了2000次提特征和分类的经过!有没有方法提速呢?好似是有的,这2000个regionproposal不都是图像的一部分吗,那么我们完全能够对图像提一次卷积层特征,然后只需要将regionproposal在原图的位置映射到卷积层特征图上,这样对于一张图像我们只需要提一次卷积层特征,然后将每个regionproposal的卷积层特征输入到全连接层做后续操作。对于C
10、NN来讲,大部分运算都耗在卷积操作上,这样做能够节省大量时间。如今的问题是每个regionproposal的尺度不一样,直接这样输入全连接层肯定是不行的,由于全连接层输入必须是固定的长度。SPP-NET恰好能够解决这个问题:上图对应的就是SPP-NET的网络构造图,任意给一张图像输入到CNN,经过卷积操作我们能够得到卷积特征比方VGG16最后的卷积层为conv5_3,共产生512张特征图。图中的window是就是原图一个regionproposal对应到特征图的区域,只需要将这些不同大小window的特征映射到同样的维度,将其作为全连接的输入,就能保证只对图像提取一次卷积层特征。SPP-NET
11、使用了空间金字塔采样spatialpyramidpooling:将每个window划分为4*4,2*2,1*1的块,然后每个块使用max-pooling下采样,这样对于每个window经过SPP层之后都得到了一个长度为(4*4+2*2+1)*512维度的特征向量,将这个作为全连接层的输入进行后续操作。小结:使用SPP-NET相比于R-CNN能够大大加快目的检测的速度,但是仍然存在着很多问题:(1)训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练训练边框回归器(2)SPP-NET在微调网络的时候固定了卷积层,只对全连接层进行微调,而对于一个新的任务,有必要对卷积层也进行微调。分类的模型提取
12、的特征更注重高层语义,而目的检测任务除了语义信息还需要目的的位置信息针对这两个问题,RBG又提出FastR-CNN,一个精简而快速的目的检测框架。3.FastR-CNN(ICCV2021)有了前边R-CNN和SPP-NET的介绍,我们直接看FastR-CNN的框架图:与R-CNN框架图比照,能够发现主要有两处不同:一是最后一个卷积层后加了一个ROIpoolinglayer,二是损失函数使用了多任务损失函数(multi-taskloss),将边框回归直接参加到CNN网络中训练。(1)ROIpoolinglayer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大
13、小的金字塔映射,而ROIpoolinglayer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有regionproposal对应了一个7*7*512维度的特征向量作为全连接层的输入。(2)R-CNN训练经过分为了三个阶段,而FastR-CNN直接使用softmax替代SVM分类,同时利用多任务损失函数边框回归也参加到了网络中,这样整个的训练经过是端到端的(除去regionproposal提取阶段)。(3)FastR-CNN在网络微调的经过中,将部分卷积层也进行了微调,获得了更好的检测效果。小结:FastR-CNN融合了R-CNN和SPP-NET的精华
14、,并且引入多任务损失函数,使整个网络的训练和测试变得特别方便。在PascalVOC2007训练集上训练,在VOC2007测试的结果为66.9%(mAP),假如使用VOC2007+2021训练集训练,在VOC2007上测试结果为70%数据集的扩大能大幅提高目的检测性能。使用VGG16每张图像总共需要3s左右。缺点:regionproposal的提取使用selectivesearch,目的检测时间大多消耗在这上面提regionproposal23s,而提特征分类只需0.32s,无法知足实时应用,而且并没有实现真正意义上的端到端训练测试regionproposal使用selectivesearch先
15、提取处来。那么有没有可能直接使用CNN直接产生regionproposal并对其分类?FasterR-CNN框架就是符合这样需要的目的检测框架。4.FasterR-CNN(NIPS2021)(FasterR-CNN:TowardsReal-TimeObjectDetectionwithRegionProposalNetworks)在regionproposal+CNN分类的这种目的检测框架中,regionproposal质量好坏直接影响到目的检测任务的精度。假如找到一种方法只提取几百个或者更少的高质量的预选窗口,而且召回率很高,这不但能加快目的检测速度,还能提高目的检测的性能假阳例少。RPN(
16、RegionProposalNetworks)网络应运而生。RPN的核心思想是使用卷积神经网络直接产生regionproposal,使用的方法本质上就是滑动窗口。RPN的设计比拟巧妙,RPN只需在最后的卷积层上滑动一遍,由于anchor机制和边框回归能够得到多尺度多长宽比的regionproposal。我们直接看上边的RPN网络构造图使用了ZF模型,给定输入图像假设分辨率为600*1000,经过卷积操作得到最后一层的卷积特征图大小约为40*60。在这个特征图上使用3*3的卷积核滑动窗口与特征图进行卷积,最后一层卷积层共有256个featuremap,那么这个3*3的区域卷积后能够获得一个256
17、维的特征向量,后边接clslayer和reglayer分别用于分类和边框回归跟FastR-CNN类似,只不过这里的类别只要目的和背景两个类别。3*3滑窗对应的每个特征区域同时预测输入图像3种尺度128,256,512,3种长宽比1:1,1:2,2:1的regionproposal,这种映射的机制称为anchor。所以对于这个40*60的featuremap,总共有约20000(40*60*9)个anchor,也就是预测20000个regionproposal。这样设计的好处是什么呢?固然如今也是用的滑动窗口策略,但是:滑动窗口操作是在卷积层特征图上进行的,维度较原始图像降低了16*16倍中间经
18、过了4次2*2的pooling操作;多尺度采用了9种anchor,对应了三种尺度和三种长宽比,加上后边接了边框回归,所以即使是这9种anchor外的窗口也能得到一个跟目的比拟接近的regionproposal。NIPS2021版本的FasterR-CNN使用的检测框架是RPN网络+FastR-CNN网络分离进行的目的检测,整体流程跟FastR-CNN一样,只是regionproposal如今是用RPN网络提取的代替原来的selectivesearch。同时作者为了让RPN的网络和FastR-CNN网络实现卷积层的权值分享,训练RPN和FastR-CNN的时候用了4阶段的训练方法:(1)使用在I
19、mageNet上预训练的模型初始化网络参数,微调RPN网络; (2)使用(1)中RPN网络提取regionproposal训练FastR-CNN网络;(3)使用(2)的FastR-CNN网络重新初始化RPN,固定卷积层进行微调;(4)固定(2)中FastR-CNN的卷积层,使用(3)中RPN提取的regionproposal微调网络。权值分享后的RPN和FastR-CNN用于目的检测精度会提高一些。使用训练好的RPN网络,给定测试图像,能够直接得到边缘回归后的regionproposal,根据regionproposal的类别得分对RPN网络进行排序,并选取前300个窗口作为FastR-CNN
20、的输入进行目的检测,使用VOC07+12训练集训练,VOC2007测试集测试mAP到达73.2%selectivesearch+FastR-CNN是70%,目的检测的速度能够到达每秒5帧selectivesearch+FastR-CNN是23s一张。需要注意的是,最新的版本已经将RPN网络和FastR-CNN网络结合到了一起将RPN获取到的proposal直接连到ROIpooling层,这才是一个真正意义上的使用一个CNN网络实现端到端目的检测的框架。小结:FasterR-CNN将一直以来分离的regionproposal和CNN分类融合到了一起,使用端到端的网络进行目的检测,无论在速度上还是
21、精度上都得到了不错的提高。然而FasterR-CNN还是达不到实时的目的检测,预先获取regionproposal,然后在对每个proposal分类计算量还是比拟大。比拟幸运的是YOLO这类目的检测方法的出现让实时性也变的成为可能。总的来讲,从R-CNN,SPP-NET,FastR-CNN,FasterR-CNN一路走来,基于深度学习目的检测的流程变得越来越精简,精度越来越高,速度也越来越快。能够讲基于regionproposal的R-CNN系列目的检测方法是当前目的最主要的一个分支。三、基于回归方法的深度学习目的检测算法FasterR-CNN的方法目前是主流的目的检测方法,但是速度上并不能知
22、足实时的要求。YOLO一类的方法渐渐显现出其重要性,这类方法使用了回归的思想,既给定输入图像,直接在图像的多个位置上回归出这个位置的目的边框以及目的类别。1.YOLO(CVPR2016,oral)(YouOnlyLookOnce:Unified,Real-TimeObjectDetection)我们直接看上面YOLO的目的检测的流程图:(1)给个一个输入图像,首先将图像划分成7*7的网格(2)对于每个网格,我们都预测2个边框包括每个边框是目的的置信度以及每个边框区域在多个类别上的概率(3)根据上一步能够预测出7*7*2个目的窗口,然后根据阈值去除可能性比拟低的目的窗口,最后NMS去除冗余窗口即
23、可。能够看到整个经过非常简单,不需要中间的regionproposal在找目的,直接回归便完成了位置和类别的断定。那么怎样才能做到直接在不同位置的网格上回归出目的的位置和类别信息呢?上面是YOLO的网络构造图,前边的网络构造跟GoogLeNet的模型比拟类似,主要的是最后两层的构造,卷积层之后接了一个4096维的全连接层,然后后边又全连接到一个7*7*30维的张量上。实际上这7*7就是划分的网格数,如今要在每个网格上预测目的两个可能的位置以及这个位置的目的置信度和类别,也就是每个网格预测两个目的,每个目的的信息有4维坐标信息(中心点坐标+长宽),1个是目的的置信度,还有类别数20(VOC上20
24、个类别),总共就是(4+1)*2+20=30维的向量。这样能够利用前边4096维的全图特征直接在每个网格上回归出目的检测需要的信息边框信息加类别。小结:YOLO将目的检测任务转换成一个回归问题,大大加快了检测的速度,使得YOLO能够每秒处理45张图像。而且由于每个网络预测目的窗口时使用的是全图信息,使得falsepositive比例大幅降低充分的上下文信息。但是YOLO也存在问题:没有了regionproposal机制,只使用7*7的网格回归会使得目的不能非常精准的定位,这也导致了YOLO的检测精度并不是很高。2.SSD(SSD:SingleShotMultiBoxDetector)上面分析了
25、YOLO存在的问题,使用整图特征在7*7的粗糙网格内回归对目的的定位并不是很精准。那是不是能够结合regionproposal的思想实现精准一些的定位?SSD结合YOLO的回归思想以及FasterR-CNN的anchor机制做到了这点。上图是SSD的一个框架图,首先SSD获取目的位置和类别的方法跟YOLO一样,都是使用回归,但是YOLO预测某个位置使用的是全图的特征,SSD预测某个位置使用的是这个位置周围的特征感觉更合理一些。那么怎样建立某个位置和其特征的对应关系呢?可能你已经想到了,使用FasterR-CNN的anchor机制。如SSD的框架图所示,假设某一层特征图(图b)大小是8*8,那么
26、就使用3*3的滑窗提取每个位置的特征,然后这个特征回归得到目的的坐标信息和类别信息(图c)。不同于FasterR-CNN,这个anchor是在多个featuremap上,这样能够利用多层的特征并且自然的到达多尺度不同层的featuremap3*3滑窗感受野不同。小结:SSD结合了YOLO中的回归思想和FasterR-CNN中的anchor机制,使用全图各个位置的多尺度区域特征进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟FasterR-CNN一样比拟精准。SSD在VOC2007上mAP能够到达72.1%,速度在GPU上到达58帧每秒。总结:YOLO的提出给目的检测一个新的思路,SSD的性能则让我们看到了目的检测在实际应用中真正的可能性。四.提高目的检测方法R-CNN系列目的检测框架和YOLO目的检测框架给了我们进行目的检测的两个基本框架。除此之外,研究人员基于这些框架从其他方面入手提出了一系列提高目的检测性能的方法。(1)难分样本挖掘hardnegativeminingR-CNN在训练SVM分类器时使用了难分样本挖掘的思想,但FastR-CNN和FasterR-CNN由于使用端到端的训练策略并没有使用难分样本挖掘只是设置了正负样本的比例并随机抽取。