人工智能论文基于深度学习的目标检测技术综述.docx
《人工智能论文基于深度学习的目标检测技术综述.docx》由会员分享,可在线阅读,更多相关《人工智能论文基于深度学习的目标检测技术综述.docx(17页珍藏版)》请在冰点文库上搜索。
人工智能论文基于深度学习的目标检测技术综述
人工智能论文:
基于深度学习的目标检测技术综述
1.引言
目标检测的任务是判断图像中是否存在属于指定类别的目标,如果存在,则给出目标的类别和位置信息。
近年来,由于卷积神经网络的发展,基于深度学习的目标检测取得了突破性的进展,并在图像分类、人脸识别、自动驾驶、医疗诊断等领域有广阔的应用前景。
例如Wang等人[1]针对监控视频中行人由于聚集而相互遮挡的问题,提出了一种改进的边界框回归的损失的目标检测方法,取得了明显的效果。
Li等人[2]针对医学图像中存在数据分布差异且域适应能力较差的问题,提出一种CLU-CNNs的域适应框架,该框架在小数据集上有良好的扩展性和准确的定位能力。
Li等人[3]针对人脸中多变的尺度、姿态、遮挡、表情、光照等问题导致检测率较低的问题,提出一种双分支人脸检测器。
基于深度学习的目标检测算法由于其网络结构简单、检测速度快、精度高等特点,已经取代传统的基于滑动窗口模型的检测算法,成为了当今主流的目标检测算法。
基于深度学习的目标检测算法可分为两类,基于候选区域的two-stage目标检测算法和基于回归的one-stage目标检测算法。
Two-stage算法主要有四个任务:
特征提取、候选区域获得、分类和回归;而one-stage算法不需要获取候选区域,只有特征提取、分类和回归三个任务。
候选区域的获取利弊兼有,通过获取候选区域可以删掉部分背景框,训练分类器时不会因为‘类别极不均衡’影响训练器的精度。
同时,获取候选区域需消耗较多时间,因此two-stage算法很难实现实时性检测。
本文将对基于深度学习的主流目标检测算法进行总结和比较。
第二节对卷积神经网络的发展做简要概述;第三节对主流卷积神经网络进行分析和比较,总结算法性能以及优缺点;第四、五节分别对基于候选区域和基于回归的目标检测算法深入分析,包括网络结构以及创新和改进。
第六节对目标检测算法的未来研究方向进行了思考和展望论文发表。
2.神经网络的发展
深度学习模型可以看作是为具有深度结构的神经网络。
神经网络的历史可以追溯到1940年代[4],最初的目的是模拟人的大脑系统,以有原则的方式解决一般的学习问题。
随着Hinton等人[5]提出的反向传播算法,神经网络算法逐渐变得流行起来。
但是,由于缺乏大规模的训练数据、过度拟合、有限的计算能力以及与其他机器学习工具相比性能的不足等缺点,到2000年,各学者对神经网络算法的研究趋于冷淡。
自2006年以来,由于语音识别技术的突破,重新燃起了人们对于深度学习研究的热情[6,7]。
对深度学习的重新重视可以归因于以下几点:
1.大规模的带注释的训练数据的出现,以充分展现其非常大的学习能力。
2.快速开发高性能并行计算系统,例如GPU集群。
3.网络结构和培训策略设计方面的重大进步。
在自动编码器的指导下进行无监督的预训练,可以提供良好的初始化。
随着dropout技术和数据扩充,训练中的过度拟合问题得到缓解。
使用批量归一化后,深层次的神经网络的训练变得简单有效。
同时,为了提高神经网络的泛化性能,提出各种不同结构的神经网络。
例如AlexNet[8]、GoogLeNet[9]、VGG[10]和ResNet[11]等。
卷积神经网络CNN是深度学习的最具代表性的模型[12]。
CNN的每一层称为特征图。
输入层的特征图是不同颜色通道(例如RGB)像素强度的3D矩阵。
任何内部层的特征图都是感应的多通道图像,其“像素”可以视为特定特征。
每个神经元都与前一层的一部分相邻神经元相连。
可以在特征图上执行不同类型的转换[13,14],例如滤波和池化,滤波运算将滤波器矩阵(学习的权重)与神经元感受野的值进行卷积,并采用非线性函数(例如Sigmoid,ReLU)以获得最终响应。
池化操作,诸如最大池化、平均池化和L2池化操作[15]是将接收域的响应汇总为一个值,以生成更可靠的特征描述。
通过卷积和池化之间的交织,能够构造初始要素的层次性结构,最后添加几个全连接层以适应不同的视觉任务。
根据涉及的任务,添加不同的激活函数,以获得每个输出神经元的响应。
通过随机梯度下降方法在目标函数(例如均方误差或交叉熵损失)上优化整个网络。
典型的VGG16总共有13个卷积层,3个全连接的层,3个最大池化层和一个Softmax分类层。
与传统方法相比,CNN的优势可总结如下。
(1)通过分层多级结构[16,17]可以学习到从像素到高级语义特征的多级表示,从而获得输入数据的隐藏信息。
(2)与传统的浅层模型相比,更深的网络结构成倍的增加了表达能力。
(3)CNN的架构为共同优化几个相关任务提供了可能(例如,FastRCNN将分类和边界框回归结合为一种多任务学习方式)。
图1目标检测算法发展史
图1为目标检测算法的发展史,时间轴下方展示了基于深度学习的分类网络的发展历程。
其中红色框内为one-stage算法。
可以看出图像分类算法贯穿目标检测算法的始终,而two-stage算法在前期占据主导地位,one-stage目标检测算法在后期蓬勃发展。
这是因为图像分类算法和two-stage目标检测算法中回归分析方法对于one-stage目标检测算法的发展都有重要的促进作用。
不同目标检测算法在COCO数据集上的性能如表1所示。
从中可以看出,RetinaNet由于解决了one-stage算法‘类别不均衡’问题,精度已经超过了two-stage检测器。
然而检测速度只有5FPS,远小于SSD和YOLOv3。
表1不同目标检测算法性能对比
backbone
AP
AP50
AP75
APS
APM
APL
Two-stagemethods
FastR-CNN[18]
VGG-16
19.7
35.9
FasterR-CNN+++[11]
ResNet-101-C4
34.9
55.7
37.4
15.6
38.7
50.9
FasterR-CNNwFPN[19]
ResNet-101-FPN
36.2
59.1
39.0
18.2
39.0
48.2
FasterR-CNNbyG-RMI[20]
Inception-ResNet-v2
34.7
55.5
36.7
13.5
38.1
52.0
FasterR-CNNwTDM[21]
Inception-ResNet-v2-TDM
36.8
57.7
39.2
16.2
39.8
52.1
MaskR-CNN[22]
ResNet-101-FPN
38.2
60.3
41.7
20.1
41.1
50.2
MaskR-CNN[22]
ResNeXt-101-FPN
39.8
62.3
43.4
22.1
43.2
51.2
One-stagemethods
YOLOv2[23]
DarkNet-19
21.6
44.0
19.2
5.0
22.4
35.5
SSD513[24]
ResNet-101-SSD
31.2
50.4
33.3
10.2
34.5
49.8
DSSD513[25]
ResNet-101-DSSD
33.2
53.3
35.2
13.0
35.4
51.1
YOLOv3[26]
Darknet-53
33.0
57.9
34.4
18.3
35.4
41.9
RetinaNet[27]
ResNet-101-FPN
39.1
59.1
42.3
21.8
42.7
50.2
RetinaNet[27]
ResNeXt-101-FPN
40.8
61.1
44.1
24.1
44.2
51.2
3.典型的卷积神经网络
3.1LeNet
手写字体识别模型LeNet[28]诞生于1998年,是最早的卷积神经网络之一。
LeNet通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是近年来大量神经网络架构的起点。
LeNet的网络结构如图2所示,除去输入和输出层后,它有6层网络组成,其中包括3个卷积层(C),2个下采样层(S)和1个全连接层(F)。
其中卷积层采用5×5的卷积核,而下采样层分别采用的平均值池化(S2)和最大值池(S4)。
LeNet特点如下:
(1)使用了卷积来提取特征,组成了基本的结构单元:
卷积-池化-非线性激活。
(2)已经加入了非线性激活,激活函数采用了Tanh和Sigmoid,目前大多数情况下使用的是ReLU激活函数。
(3)池化层使用的是平均值池化,目前大多数情况下使用最大值池化。
(4)分类器使用了GaussianConnections,目前已经被Softmax替代。
图2LeNet网络结构
3.2AlexNet
受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注。
直到2012年,Alex等人[8]提出的AlexNet以16.4%的显著优势问鼎ILSVRC的冠军,重新燃起了人们对于深度学习研究的热情。
它第一次采用ReLU,Dropout,GPU加速等技巧,参数量为6000万,模型大小240M左右。
其网络结构如图3所示,共8层网络结构,其中5个卷积层和3个全连接层。
第一个卷积层的卷积为步长为4,大小为11×11;第二个卷积层的卷积核步长为1,大小为5×5,;其余卷积层的大小均为3×3,步长为1很。
AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了更深的网络中。
AlexNet主要使用到的新技术点如下:
(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。
虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。
(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。
(3)在CNN中使用重叠的最大池化。
此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。
并且AlexNet中提出让步长比池化核的尺寸小的概念,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
(4)提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
(5)使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。
(6)数据增强。
随机的从256×256的原始图片中,裁剪得到224×224的图片,从而使一张图片变为了(256-224)2张图片。
并对图片进行镜像,旋转,随机噪声等数据增强操作,大大降低了过拟合现象。
图3AlexNet网络结构
3.3VGGNet
VGGNet[10]由GoogleDeepMind公司和牛津大学计算机视觉组联合提出的深度卷积网络。
其网络结构如图4所示,可以看出,VGG16相比AlexNet模型具有较深的深度。
从AlexNet到VGGNet,网络表达能力进一步增强,同时在ImageNet上测试的精度进一步提高,VGG16网络优点:
(1)VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3×3)和最大池化尺寸(2×2)。
(2)验证了几个小滤波器(3×3)卷积层的组合比一个大滤波器(5×5或7×7)卷积层好。
一方面可以减少参数;另一方面能够进行了更多的非线性映射,可以增加网络的表达能力。
(3)验证了深层次的网络可以获得高级的语义特征,通过不断加深网络结构可以提升网络的性能。
图4VGG16网络结构图
3.4GoogleNet
在2014年的ILSVRC比赛中,GoogLeNet[9]取得了第一名的成绩,并且所用模型参数不足AlexNet(2012年冠军)的1/12。
论文题目《Goingdeeperwithconvolutions》中的deeper有两层含义,一是指本文引入了一种新的结构“Inceptionmodule”,二就是其直接含义—网络深度的增加。
GoogleNetv1是一个22层的深度网络。
如果考虑池化层,则有29层。
在主干卷积环节有3个inception模块,模块之间用3×3的最大池化层隔开。
Inception模块如图4中蓝色框所示,该结构分四条线路并行,将CNN中常用的卷积(1×1,3×3,5×5)、池化操作(3×3)堆叠在一起。
采用不同大小的卷积核是为了获得不同大小的感受野,最后拼接则是为了融合不同尺度的特征。
这样做一方面增加了网络的宽度,另一方面也增加了网络对尺度的适应性。
为了解决计算过量的问题,在后三条路线上增加了1×1卷积核来进行降维。
同时为了缓解梯度消失的问题,GoogleNetv1增加了两个辅助分类器(图4红色框内)。
这两个辅助分类器被添加到网络的中间层,它们和主分类器共享同一套训练数据。
GoogleNet特点:
(1)采用了1×1卷积核,性价比高,用很少的计算量既可以增加一层的特征变换和非线性变换。
(2)提出BatchNormalization,通过一定的手段,把每层神经元的输入值分布回归到均值0方差1的正太分布,使其落入激活函数的敏感区,避免梯度消失,加快收敛。
(3)引入Inception模块,4个分支结合的结构,每个分支采用1x1的卷积核。
(4)去除了最后的全连接层,大大减少计算量。
图4GoogleNet网络结构图
3.5ResNet
2015年何凯明等提出的ResNet[11]网络,一举获得ILSVRC比赛的冠军。
ResNet的出现是CNN史上的一个里程碑事件,ResNet可以训练出更深的CNN模型,从而实现更高的准确度。
ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(shortcuts,skipconnection),这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。
我们知道,越深的网络一般有越高等级的特征,拥有强大的表达能力。
然而神经网络随着层数的增加,网络退化严重,即深层次的网络反而不如稍浅层次的网络性能;而且这并非是过拟合导致的,因为在训练集上也存在退化问题。
其实,在浅层网络的基础上叠加y=x层(也就是identitymapping,恒等映射),可以让网络深度增加而不退化。
图5为残差模块的示意图,残差函数F(x)=H(x)-x,这里如果F(x)=0,则就是恒等映射。
事实上,可以这样理解:
我们期望深层次模块训练后的函数结果F(x)=0,这样学习训练过程相当于自主确定了多少层次的网络是最优的。
Resnet特点:
(1)通过残差模块的将网络深度进一步提高,解决了不断深化神经网络而使准确率饱和的问题。
通过活用1×1卷积降低了特征图的维度,控制了参数数量。
(2)存在明显层级,特征图个数层层递进,保证输出特征的表达能力。
(3)使用较少池化层,大量采用下采样,提高传播效率。
图5残差网络结构
3.6DenseNet
DenseNet[29]模型的基本思路与ResNet一致,通过短路连接来融合前后几层的信息,但是DenseNet建立的是前面所有层与后面层的密集连接(denseconnection)。
DenseNet的另一大特色是通过特征上的连接来实现特征重用(featurereuse)。
这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR2017的最佳论文奖。
DenseNet网络结构如图6所示,主要结构分稠密块(DenseBlocks)和过渡层(transitionlayers)。
稠密块结构能够互相连接所有的层,具体来说就是每个层都会接受其前面所有层作为其额外的输入。
对于一个L层的网络,DesNet共包含个连接,这可以实现特征重用,提升效率,并且缓解了深层网络的梯度消失问题。
过渡层为相邻2个稠密块的中间部分,稠密块是连接两个相邻的稠密块,并且通过池化使特征图大小降低。
DenseNet的优势主要体现在以下几个方面:
(1)由于密集连接方式,DenseNet提升了梯度的反向传播,使得网络更容易训练。
由于每层可以直达最后的误差信号,实现了隐式的“deepsupervision”。
(2)参数更小且计算更高效,由于DenseNet是通过concat特征来实现短路连接,实现了特征重用。
(3)由于特征复用,最后的分类器使用了低级特征。
图6DenseNet网络结构
4.基于候选区域的目标检测算法
目前基于深度神经网络的目标检测算法主要分为两大类;一类是基于候选区域的目标检测算法,即two-stage目标检测算法。
该方法先提取到目标的候选区域,然后再由神经网络做分类和回归;另一类是基于回归的目标检测算法,也称为one-stage目标检测算法。
该方法没有生成候选区域的环节,直接由神经网络做分类和回归。
two-stage目标检测算法在精度上普遍要优于one-stage目标检测算法,然而由于候选区域提取过程用时较多,速度远低于one-stage目标检测算法,并不能达到实时检测的要求。
本节将就two-stage目标检测主流算法做简要介绍。
4.1R-CNN
Girshck等针对卷积神经网络如何实现目标定位的问题,提出了将于Regionproposal和CNN结合的算法R-CNN[16]。
开创了神经网络实现目标检测的先河。
使PASCALVOC2007测试集的mAP刷新到了58.5%。
经过改进的R-CNN在该数据集的mAP刷新到66%,ILSVRC2013数据集上的mAP达到31.4%。
其计算流程如图7所示,可分为4步,首先利用选择搜索算法(selectivesearch)提取候选区域(约2000个),接着将候选区域缩放到固定大小,然后进入卷积神经网络提取特征,随后将提取的特征向量送入SVM分类器得到候选区域目标的类别信息,送入全连接网络进行回归得到位置信息。
R-CNN缺点:
(1)输入的图像大小会进行缩放,导致图像失真。
(2)用选择性搜索算法提取约2000个候选区域,每个候选区域都要送入卷积神经网络提取特征,计算量大耗时多。
(3)训练测试复杂,候选区域提取、特征获、分类和回归都是单独运行,中间数据也是单独保存卷积提取的特征需单独存储,占用大量硬盘空间。
图7R-CNN网络结构示意图
4.2SPP-Net
2014年何凯明等人针对R-CNN的缺陷进行了改进,开发出了SPP-Net(SpatialPyramidPoolingNetwork)[30]。
其网络流程如图8所示,SPP-Net将整个图片送入卷积提取特征,避免了候选区域分别送入卷积层提取特征造成的重复计算。
再次,在卷积层和全连接层之间增添了空间金字塔池化层(SPP,SpatialPyramidPooling),可以对不同大小特征图进行池化操作并生成特定大小的特征图,避免了R-CNN对图像进行缩放导致图像失真。
SPP-Net缺点:
(1)与R-CNN设计相同,训练各个阶段都是单独运行,且中间数据必须保存。
(2)训练数据的图像尺寸大小不一致,使候选框感受野过大,不可以使用反向传播有效的更新权重。
(3)网络微调只更新了全连接层,不能实现端到端的检测且检测精度还需进一步提升。
图8SPP-Net网络结构示意图
4.3FastR-CNN
借鉴SPP-Net的SPP层的设置,Ross等人2015年提出FastR-CNN[18],用RoIPooling层代替了SPP层,该层可以看成一层的金字塔池化层,它去掉了SPP的多尺度池化,直接用M×N的网格,将每个候选区域均匀分成M×N块,对每个块进行最大值池化。
从而将特征图上大小不一的候选区域转变为大小统一的特征向量。
针对在训练期间为多阶段和特征重复计算造成的时间代价以及数据存储过量的问题,将神经网络与SVM分类相结合,由全连接层同时负责分类和回归任务,实现了多任务端到端训练,使检测精度和速度同时得到了提高。
FastR-CNN网络流程如图9所示,主要分三部分,首先将图送入卷积网络提取特征,然后通过RoIPooling将候选区域池化为同一长度的特征向量,最后通过全连接层进行分类和回归。
FastR-CNN在PASCALVOC数据集中检测时间为每张0.32s,远小于R-CNN的45s和SPP-Net的2.3s。
虽然FastR-CNN实现了多任务端到端的训练,然而通过选择性搜索算法提取候选区域耗费了较多时间,训练和预测所需时间仍较长,不能实现实时性检测。
图9FastR-CNN网络流程图
4.4FasterR-CNN
R-CNN、SPPNet和FastR-CNN都需要用选择性搜索算法预先提取出候选区域,这导致了网络时效性较差,为了解决这个问题,Ren等人在FastR-CNN的基础上提出FasterR-CNN[31]算法,在卷积层后添加了区域提取网络RPN(RegionProposalNetwork),代替了FastR-CNN的选择性搜索算法。
RPN的核心思想是使用CNN卷积神经网络直接产生RegionProposal,因为anchor机制和边框回归可以得到多尺度多长宽比的RegionProposal。
RPN网络也是全卷积网络(FCN,fully-convolutionalnetwork),可以针对生成检测建议框的任务端到端地训练,能够同时预测出目标物体的边界和分数。
FasterR-CNN整个流程如果10所示,先对图像进行卷积提取特征,然后进入RPN层获得候选区域,接着通过RoIPooling层,最后全连接层进行分类和回归。
整个流程从图像特征提取、候选区域获得到分类和回归都在神经网络中得到,且整个网络流程都能共享卷积神经网络提取的特征信息,提高了算法的速度和准确率,从而实现了两阶段模型的深度化。
FasterR-CNN在PASCALVOC2007和2012上的mAP分别为73.2%和70.4%,检测速度达到5FPS。
缺点:
(1)获取候选区域,再对每个候选区域分类计算量还是比较大。
(2)虽然速度有了提高,但还是没达到实时性检测的要求
从R-CNN、SPPNet、FastR-CNN到FasterR-CNN算法网络逐步优化,各个算法解决了一部分难题,具体来说RCNN解决的是,“为什么不用CNN做classification呢?
”FastR-CNN解决的是,“为什么不一起输出boundingbox和label呢?
”FasterR-CNN解决的是,“为什么还要用selectivesearch呢?
”
图10FasterR-CNN网络流程图
4.5MaskR-CNN
2017年何凯明等人在FasterR-CNN的基础上再次改进,提出了MaskR-CNN[22]算法,通过添加Mask分支,能够同时实现目标检测和语义分割任务。