您的位置:首页 > 其它

基于深度学习的目标检测研究进展

2017-10-29 08:48 344 查看
转载链接:http://blog.csdn.net/timeflyhigh/article/details/52015163



目标检测领域得益于卷积神经网络CNN和region proposal算法的发展,在各种大规模竞赛数据集(ImageNet,Pascal VOC,COCO等)上准确率突飞猛增。
目标检测中非常重要的指标:识别精度,识别速度,定位精度

目标检测中衡量识别精度的指标是mAP(mean average precision)。多个类别物体检测中,每一个类别都可以根据recall和precision绘制一条曲线,AP就是该曲线下的面积,mAP是多个类别AP的平均值。目标检测评价体系中衡量定位精度的指标是IoU,IoU就是算法预测的目标窗口和真实的目标窗口的交叠(两个窗口面积上的交集和并集比值),Pascal VOC中,这个值是0.5(已被证明相对宽松)。而2014年以来出现的MS COCO竞赛规则把这个IoU变成了0.5-1.0之间的综合评价值,也就是说,定位越准确,其得分越高,这也侧面反映了目标检测在评价指标方面的不断进步。

一.传统目标检测方法

存在问题:1基于滑窗的区域选择策略没有针对性,时间复杂度高,窗口冗余;2手工设计的特征对于多样性的变化并没有很好地鲁棒性。

二.基于RegionProposal的深度学习目标检测算法

Region Proposal很多好的解决了滑窗策略的冗余性。Region Proposal(候选区)是预先找到所有可能包含目标的位置。Region proposal利用了图像中的纹理、边缘、颜色等信息,可以保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率,大大降低了后续操作的时间复杂度,并且获取的候选窗口要比滑动窗口的质量更高(滑动窗口固定长宽比)。有了候选区域,剩下的工作实际就是对候选区域进行图像分类的工作(特征提取+分类)。

2014年,Ross B.Girshick使用region proposal+CNN代替传统目标检测中的滑动窗口+手工设计特征,设计了R-CNN框架,使得目标检测取得巨大突破,并开启了基于深度学习目标检测的热潮。

1. R-CNN (CVPR2014, TPAMI2015)

R-CNN目标检测流程:

(1) 输入测试图像

(2) 利用selective search算法在图像中提取2000个左右的regionproposal。

(3) 将每个region proposal缩放(warp)成227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征。

(4) 将每个region proposal提取到的CNN特征输入到SVM进行分类。

R-CNN存在的问题:

(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器

(2) 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件

(3) 速度慢: 使用GPU, VGG16模型处理一张图像需要47s。

2. SPP-NET (ECCV2014, TPAMI2015)

R-CNN慢:对图像提完region proposal(2000个左右)之后将每个proposal当成一张图像进行后续处理(CNN提特征+SVM分类),实际上对一张图像进行了2000次提特征和分类的过程!

SPP-NET解决速度慢的方法:对整张图像只提一次卷积层特征,然后只需要将region proposal在原图的位置映射到卷积层特征图上,然后将每个region proposal的卷积层特征输入到全连接层做后续操作。(对于CNN来说,大部分运算都耗在卷积操作上,这样做可以节省大量时间)。
问题难点和解决方法:
1.每个region proposal的尺度不一样,直接这样输入全连接层肯定是不行的,因为全连接层输入必须是固定的长度。
2. SPP-NET的网络结构图,任意给一张图像输入到CNN,经过卷积操作我们可以得到卷积特征(比如VGG16最后的卷积层为conv5_3,共产生512张特征图)。图中的window是就是原图一个region proposal对应到特征图的区域,只需要将这些不同大小window的特征映射到同样的维度,将其作为全连接的输入,就能保证只对图像提取一次卷积层特征。SPP-NET使用了空间金字塔采样(spatial pyramid pooling):将每个window划分为4*4, 2*2, 1*1的块,然后每个块使用max-pooling下采样,这样对于每个window经过SPP层之后都得到了一个长度为(4*4+2*2+1)*512维度的特征向量,将这个作为全连接层的输入进行后续操作。

SPP-NET存在问题:

(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练训练边框回归器

(2) SPP-NET在微调网络的时候固定了卷积层,只对全连接层进行微调,而对于一个新的任务,有必要对卷积层也进行微调。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还需要目标的位置信息)

 
3. Fast R-CNN(ICCV2015)

创新点:一是最后一个卷积层后加了一个ROI pooling layer,二是损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。

(1) ROI pooling layer:SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个7*7*512维度的特征向量作为全连接层的输入。

(2) R-CNN训练过程分为了三个阶段,而FastR-CNN直接使用softmax替代SVM分类,同时利用多任务损失函数边框回归也加入到了网络中,这样整个的训练过程是端到端的(除去region proposal提取阶段)。

(3) Fast R-CNN在网络微调的过程中,将部分卷积层也进行了微调,取得了更好的检测效果。

Fast R-CNN存在的问题:时间瓶颈在regionproposal算法selective search上,不能实现真正意义上的end to end的训练测试。

 

4. Faster R-CNN(NIPS2015)

创新点:RPN(RegionProposal Networks)网络只提取几百个或者更少的高质量的预选窗口,而且召回率很高。

RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。RPN的设计比较巧妙,RPN只需在最后的卷积层上滑动一遍,因为anchor机制和边框回归可以得到多尺度多长宽比的region
proposal。

给定输入图像(假设分辨率为600*1000),经过卷积操作得到最后一层的卷积特征图(大小约为40*60)。在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,最后一层卷积层共有256个feature map,那么这个3*3的区域卷积后可以获得一个256维的特征向量,后边接cls layer和reg layer分别用于分类和边框回归(跟Fast R-CNN类似,只不过这里的类别只有目标和背景两个类别)。3*3滑窗对应的每个特征区域同时预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的region
proposal,这种映射的机制称为anchor。所以对于这个40*60的feature map,总共有约20000(40*60*9)个an
4000
chor,也就是预测20000个region proposal。

RPN网络设计优点:
1. 滑动窗口操作是在卷积层特征图上进行的更高效,因为维度较原始图像降低了16*16倍(中间经过了4次2*2的pooling操作);
2. 多尺度采用了9种anchor,对应了三种尺度和三种长宽比,加上后边接了边框回归,所以即便是这9种anchor外的窗口也能得到一个跟目标比较接近的region proposal。
RPN的网络和Fast R-CNN网络联合训练,分为4阶段:

1.     ImageNet上预训练模型的初始化参数,微调RPN网络

2.     使用1中的RPN网络提取region proposal训练Fast R-CNN网络

3.     使用2中的Fast R-CNN网络重新初始化RPN,固定卷基层进行微调

4.     固定2中的Fast R-CNN的卷基层,使用3中的RPN提取的region proposal微调网络

注意:最新的版本已经将RPN网络和Fast R-CNN网络结合到了一起——将RPN获取到的proposal直接连到ROI
pooling层。

 

三.基于回归的深度学习目标检测算法

Faster R-CNN的方法目前是主流的目标检测方法,但是速度上并不能满足实时的要求。YOLO这类方法使用了回归的思想,既给定输入图像,直接在图像的多个位置上回归出这个位置附近的目标位置和目标类别。

1.    YOLO (CVPR2016, oral)

YOLO目标检测流程:

1.    给定一个输入图像,首先将图像分割成7*7的网格

2.    对于每个网格,都负责预测2个边框(包括每个边框的位置,目标物体置信度和多个类别上的概率)

3.    根据上一步可以预测7*7*2个目标窗口,根据阈值去除执行度比较低的目标窗口,最后NMS去除冗余窗口

优点:YOLO将目标检测任务转换成回归问题,大大加快了检测的速度。同时由于网络预测每个目标窗口时使用的是全局信息,使得false positive比例大幅降低(充分的上下文信息)。

存在的问题:使用整图特征在7*7的粗糙网格内回归,对目标的定位并不是很精准,检测精度不高

2.    SSD

SSD结合YOLO的回归思想以及Faster R-CNN的anchor机制实现了精准定位。YOLO预测某个位置使用的是全图的特征,SSD预测某个位置使用的是这个位置周围的特征。

建立某个位置和其特征的对应关系使用Faster R-CNN的anchor机制。

3.    G-CNN(CVPR2016)

Region proposal方法考虑数以万计的潜在框来进行目标位置搜索,这种方式存在的问题是负样本空间大,因此需要一定的策略来进行抑制(OHEM还是region proposal方法,其本质都是一种抑制负样本的工作)。G-CNN初始化时将图像进行划分(有交叠),产生少量的框(大约180个),通过一次回归之后得到更接近物体的位置。然后以回归之后的框作为原始窗口,不断的迭代回归调整,得到最终的检测结果。

 

四.其它方法

1.    LocNet(CVPR2016)

LocNet出发点为如何产生更准确的目标位置

LocNet的解决方案是:针对每一个给定的初始框进行适当的放大,然后用一个CNN网络回归出这个放大后的框包含的那个正确框的位置。经过把原始的框(比如selective search生成的)进行再一次回归之后,再放入Fast
R-CNN进行检测,在IoU=0.5的情况下,在Pascal VOC
数据集上mAP可以提升大约5个百分点,而IoU=0.7时可以达到13个百分点的提升,效果还是挺惊人的。

2.     提高目标检测方法

1.    难样本挖掘(hard negativemining)

R-CNN在训练SVM分类器时使用了难分样本挖掘的思想,但Fast
R-CNN和Faster R-CNN由于使用端到端的训练策略并没有使用难分样本挖掘(只是设置了正负样本的比例并随机抽取)。OHEM将难样本挖掘机制嵌入到SGD算法中,使得Fast
R-CNN训练过程中根据region proposal的损失自动选取合适的region proposal作为正负例训练。

2.     多层特征融合

Fast R-CNN和Faster R-CNN都是利用了最后卷基层特征进行目标检测,而高层特征损失了很多细节信息(pooling操作),所以定位不是很精准。所谓的多层特征融合(又叫skip-connection)就是将不同层特征沿着通道维度融合,融合方式可以是按元素相加,也可以是在通道维度直接连接起来得到通道更多的特征。

HyperNet、ION、ParseNet等方法利用了CNN多层特征融合进行目标检测,不仅利用了高层特征的语义信息,还考虑了低层特征的细节纹理信息,使目标定位更精准。

3.    使用上下文信息

在提取region proposal特征进行目标检测时,结合region proposal上下文信息,检测效果往往会更好一些。所谓上下文信息(context)在目标检测中是指ROI周围的信息,可以是局部的,也可以是全局的。
Objectdetection via a multi-region & semantic segmentation-aware CNN model使用了上下文信息
ION网络在Fast R-CNN的基础上引进IRNN的概念来增加context信息
4.  更深的网络学习更有力的特征
ResNet肃然不是针对目标检测来做的,但其能够学习到更有力的特征。使用ResNet网络代替ZF,VGG,GoogleNet等网络模型无论在图像分类、目标检测还是图像分割等任务上都可以大大提高识别率的准确率。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: