全球人工智能:一家人工智能技术学习平台。旗下有:Paper学院、商业学院、科普学院,技术学院和职业学院五大业务。拥有十几万AI开发者和学习者用户,1万多名AI技术专家。我们诚邀全球的AI技术专家、AI创业者和AI投资者来Paper学院和商业学院演讲,分享您最新的技术研究成果和商业观点!
-加入AI企业高管群
-加入AI技术专家群
来源:csdn作者:NodYoung
在计算机视觉领域,“目标检测”主要解决两个问题:图像上多个目标物在哪里(位置),是什么(类别)。围绕这个问题,人们一般把其发展历程分为个阶段:
1.传统的目标检测方法.以R-CNN为代表的结合regionproposal和CNN分类的目标检测框架(R-CNN,SPP-NET,FastR-CNN,FasterR-CNN,R-FCN).以YOLO为代表的将目标检测转换为回归问题的端到端(End-to-End)的目标检测框架(YOLO,SSD)
下面结合参考资料分别对其做一下总结和自己的理解。
传统的目标检测方法传统目标检测的方法一般分为三个阶段:首先在给定的图像上选择一些候选的区域,然后对这些区域提取特征,最后使用训练的分类器进行分类。分别如下:
区域选择:利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域。
特征提取:提取候选区域相关的视觉特征。比如人脸检测常用的Harr特征;行人检测和普通目标检测常用的HOG特征等。由于目标的形态多样性,光照变化多样性,背景多样性等因素使得设计一个鲁棒的特征并不是那么容易,然而提取特征的好坏直接影响到分类的准确性。
分类器:利用分类器进行识别,比如常用的SVM模型。
传统的目标检测中,多尺度形变部件模型DPM(DeformablePartModel)表现比较优秀,连续获得VOC(VisualObjectClass)到的检测冠军,。DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。
总结:传统目标检测存在的两个主要问题:一个是基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;二是手工设计的特征对于多样性的变化并没有很好的鲁棒性。
基于RegionProposal的深度学习目标检测算法对于滑动窗口存在的问题,regionproposal(候选区域)提供了很好的解决方案。regionproposal利用了图像中的纹理、边缘、颜色等信息预先找出图中目标可能出现的位置,可以保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率。这大大降低了后续操作的时间复杂度,并且获取的候选窗口要比滑动窗口的质量更高。这里贴两张介绍regionproposal的PPT:
01年,RBG(RossB.Girshick)大神使用regionproposal+CNN代替传统目标检测使用的滑动窗口+手工设计特征,设计了R-CNN框架,使得目标检测取得巨大突破,并开启了基于深度学习目标检测的热潮。
R-CNNR-CNN的目标检测流程:
输入图像,用selectivesearch算法在图像中提取个左右的regionproposal(侯选框),并把所有regionproposalwarp(缩放)成固定大小(原文采用7×7)
将归一化后的regionproposal输入CNN网络,提取特征
对于每个regionproposal提取到的CNN特征,再用SVM分类来做识别,用线性回归来微调边框位置与大小,其中每个类别单独训练一个边框回归(bounding-boxregression)器。
总结:R-CNN框架仍存在如下问题:
重复计算:我们通过regionproposal提取个左右的候选框,这些候选框都需要进行CNN操作,计算量依然很大,其中有不少其实是重复计算
multi-stagepipeline,训练分为多个阶段,步骤繁琐:regionproposal、CNN特征提取、SVM分类、边框回归,
训练耗时,占用磁盘空间大:卷积出来的特征数据还需要单独保存
SPP-netSPP-net的主要思想是去掉了原始图像上的crop/warp等操作,换成了在卷积特征上的空间金字塔池化层(SpatialPyramidPooling,SPP)。为何要引入SPP层?一部分原因是fastR-CNN里对图像进行不同程度的crop/warp会导致一些问题,比如上图中的crop会导致物体不全,warp导致物体被拉伸后形变严重。但更更更重要的原因是:fastR-CNN里我们对每一个regionproposal都要进行一次CNN提取特征操作,这样带来了很多重复计算。试想假如我们只对整幅图像做一次CNN特征提取,那么原图一个regionproposal可以对应到featuremap(特征图)一个window区域,只需要将这些不同大小window的特征映射到同样的维度,将其作为全连接的输入,就能保证只对图像提取一次卷积层特征。
SPP就是为了解决这种问题的。SPP使用空间金字塔采样(spatialpyramidpooling)将每个window划分为*,*,1*1的块,然后每个块使用max-pooling下采样,这样对于每个window经过SPP层之后都得到了一个长度为(*+*+1)*56维度的特征向量,将这个作为全连接层的输入进行后续操作。
总结:使用SPP-NET大大加快了目标检测的速度,但是依然存在着很多问题:
训练分为多个阶段,依然步骤繁琐
SPP-NET在微调网络时固定了卷积层,只对全连接层进行微调,而对于一个新的任务,有必要对卷积层也进行微调。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还需要目标的位置信息)(这一点其实不是很懂啊)
FastR-CNNFastR-CNN在R-CNN的基础上又做了一些改进:
与SPP类似,它只对整幅图像做一次CNN特征提取,在后面加了一个类似于SPP的ROIpoolinglayer,其实就是下采样。不过因为不是固定尺寸输入,因此每次的pooling网格大小需要动态调整。比如某个ROI区域坐标为(x1,y1,x,y),即输入size为(y?y1)?(x?x1)(y?y1)?(x?x1),如果要求pooling的输出size统一为pooledheight?pooledwidth,那么每个网格的size为y?y1pooledheight?x?x1pooledwidth。
整个的训练过程是端到端的(除去regionproposal提取阶段),梯度能够通过RoIPooling层直接传播,直接使用softmax替代SVM分类,同时利用Multi-taskLoss(多任务损失函数)将边框回归和分类一起进行。这里着重说一下Multi-taskLoss函数:L(p,u,tu,v)=Lcls(p,u)+λ[u?1]Lloc(tu,v)Lcls(p,u)=?logpuLloc(tu,v)=∑i?x,y,w,hsmoothL1(tui?vi))smoothL1(x)={0.5x
x
?0.5if
x
1othersise
简单解释一下,p=(p0,p1,?,pk),是针对每个ROI区域的分类概率预测;tk=(tkx,tky,tkw,tkh),是针对每个ROI区域坐标的偏移(具体偏移怎么算看下位RPN处);u为真实类别,v为groundtruth坐标。这里再说一下FastR-CNN的主要步骤:
特征提取:以整张图片为输入利用CNN得到图片的特征层;
regionproposal:通过SelectiveSearch等方法从原始图片提取区域候选框,并把这些候选框一一投影到最后的特征层;
区域归一化:针对特征层上的每个区域候选框进行RoIPooling操作,得到固定大小的特征表示;
分类与回归:然后再通过两个全连接层,分别用softmax做多目标分类,用回归模型进行边框位置与大小微调。
总结:FastR-CNN确实做得很棒,其缺点在于:regionproposal的提取使用selectivesearch,目标检测时间大多消耗在这上面(提regionproposal~s,而提特征分类只需0.s),无法满足实时应用。
FasterR-CNNFasterR-CNN最大的贡献就是RPN(RegionProposalNetworks)网络。RPN的核心思想是使用卷积神经网络直接产生regionproposal,使用的方法本质上是滑动窗口。假设我们得到的convfeaturemap维度是1?1?56,slidingwindow的大小是?,即我们需要用一个??56?56的卷积核从而对每个位置得到一个56-d的向量;然后就是k=9,对每一个anchorbox输出是物体和是背景的概率,所以clslayer就是18个输出节点了,那么在56-d和clslayer之间使用一个1?1?56?18的卷积核,就可以得到clslayer;同理,reglayer的输出是6个,所以对应的卷积核是1?1?56?6,这样就可以得到reglayer。这里有一点我刚开始没想通:怎么体现论文中所说的种尺度(18,56,51),种长宽比(1:1,1:,:1)这个先验知识?其实这个通过lossfounction可以看出来。说白了,我们相当于是以anchorbox为锚点来对其附近的ground-truthbox做一个bounding-box回归,好饶,,,RPN的lossfouncton:这里x,xa和x?分别代表于此窗口、anchorbox窗口和ground-truth窗口的值。在训练过程中,我们给每一个anchor对应的区域标注label。正标签:那些和任意一个groundtruthbox的重叠区域IOU最大的,对于那些和指定的groundtruth的IOU超过0.7的。负标签:与所有的groundtruth的IOU都小于0.的。剩下的既不是正样本也不是负样本,不用于最终训练。FasterR-CNN的主要步骤如下:
特征提取:同FastR-CNN;
regionproposal:在最终的卷积特征层上利用k个不同的矩形框(AnchorBox)进行regionproposal;即对每个AnchorBox对应的区域进行object/non-object二分类,并用k个回归模型(各自对应不同的AnchorBox)微调候选框位置与大小
区域归一化:同fastR-CNN;
分类与回归:进行目标分类,并做边框回归(感觉这一块再做一次边框回归是不是有点重复)。
FasterR-CNN的训练:为了让RPN的网络和FastR-CNN网络实现卷积层的权值共享,其训练方法比较复杂,简而言之就是迭代的Alternatingtraining。具体可参考下面给出的链接。
这篇论文非常优秀,其中介绍到的一些解决multiplescale或带有权值共享的联合训练的方式都很值得学习借鉴。
R-FCN这一块没了解清楚,只知道一个概念:位置敏感得分地图。RCNN学习笔记(11):R-FCN:ObjectDetectionviaRegion-basedFullyConvolutionalNetworks深度学习论文笔记:R-FCN论文笔记
R-FCN:ObjectDetectionviaRegion-basedFullyConvolutionalNetworks