基于深度学习的目标检测算法综述*
2021-03-05宋晓茹陈超波
吴 雪,宋晓茹,高 嵩,陈超波
(西安工业大学 电子信息工程学院,陕西 西安 710021)
0 引 言
随着计算机技术快速发展,图像的分类[1]和检测[2]成为计算机视觉[3]领域非常活跃的两个研究方向,已被广泛应用于国家安防、人机交互[4]和信息安全等方面。与目标分类不同,目标检测的任务包括目标分类与目标定位两部分,除了判断是否包含目标物体,目标检测算法还要负责找出感兴趣的区域的位置并用外接矩形框出。
根据目标检测算法中是否需要手动提取特征,可以将目标检测算法分为传统方法和基于深度学习[5]的目标检测算法。传统的目标检测算法由不同尺度和宽度的区域选择、特征提取[6]和目标分类3个部分组成。区域选择多是采用基于滑动窗口的物体检测[7]方法,特征提取主要采用手动选择的方式,如颜色特征、纹理特征、尺度不变特征变换(scale invariant feature transform,SIFT)特征[8]和HOG[9]特征,分类器常用的是支持向量机(support vector machine,SVM)[10]和AdaBoost[11]。由于滑动窗口的无针对性和需要手动提取特征,导致检测算法时间复杂度高,鲁棒性低、准确度和实时性差的缺点。
基于深度学习的目标检测技术解决了传统目标检测滑动窗口选择和手动提取特征的缺点,通过引入卷积神经网络(CNN)[12]自学习目标特征来代替传统手动选择和提取特征的过程,引入区域候选框或直接回归方法使目标检测准确度和实时性大幅度提升。
本文介绍了深度学习中CNN的发展,对目前基于深度学习的主流的两阶段目标检测算法和单阶段目标检测算法进行了综述,最后针对目标检测领域现存的问题做出了总结和展望。
1 CNN的发展
CNN是深度神经网络模型的一种,由输入层、卷积层、池化层和全连接层组成,在深度学习领域表现出色,成为目前的研究热点。1998年,Lecun Y L教授[13]将LeNet5 CNN应用到图像的二维卷积,开创了现代CNN的先河。
2012年,Krizhevsky A[14]提出Alex-Net 网络,该网络由5个卷积层和3个全连接层组成,在2个GPU上加速计算,首次引入Relu非线性激活函数、最大池化、Dropout过拟合方法和标准化层等新技术,获得了Image net比赛的冠军,证明了通过更深层的网络可以提取图像更鲁棒的信息,标志着深度学习革命的开始。
2013年,Zeiler M D[15]在Alex-Net基础上进行细节调整,将第一层卷积核大小变为7×7,设置卷积参数步长为2,加入更多的卷积核数目,通过更小的卷积核和步长提取更多的信息。从可视化角度出发,解释CNN特征分层次体系结构,深层特征更鲁棒等性能的原因,并取得2013年ILSVRC的冠军。
2014年,Simonyan K[16]提出VGG模型,该网络提出的目的是为了探究在大规模图像识别任务中,卷积网络深度对模型精确度的影响。相比之前CNN,VGG模型将一个大的卷积核分解为连续多个小卷积核,在每次池化后通道数量增加1倍,网络层数达到19层,参数在140 M左右。VGG模型的优点是结构简洁有效,泛化性能好,容易修改和迁移到其他任务中去。但缺点是更深的网络模型产生巨量参数,在小样本时容易产生过拟合。
GoogLe-Net是2014年ImageNet比赛的冠军,该网络取消了全连接层和引入辅助分类器,不仅强调网络的深度,也会考虑网络的宽度,通过增加CNN的宽度来增加对多尺度的适应性,巧妙地利用1×1的卷积核来进行通道降维,减少计算量,网络深度达到22层。GoogLe-Net卷积神经网络的优点是预先给网络添加所有可能值,让网络自行学习其需要什么参数,不需要人为确定使用哪个过滤器;但缺点是该网络结构复杂,迁移能力弱。
2015年,微软研究院He K M等人提出Res-Net残差网络[17],获得ILSVRC比赛的冠军。该网络全部采用相同大小的卷积核,使用卷积步长取代池化,平均池化层代替全连接层减少参数量,通过引入跳远连接来解决梯度消失的问题,使网络深度达到152层。ResNet的提出使得更深层次的模型可以被训练,后续2016年到2017年提出的ResNeXt[18],Densenet[19]网络对ResNet网络结构做出优化,大大加快了人工智能的发展。
为了CNN模型能够在移动端和嵌入式平台运行,CNN朝着轻量型化[20]发展,SqueezeNet[21]使用1×1卷积核和不同尺寸的卷积核进行特征提取,使用压缩技术实现模型的减小。MobileNet[22]使用深度可分离卷积方法代替传统卷积方式,达到减少网络权值参数的目的。
2 基于深度学习的目标检测器
图像的目标检测任务主要是找到图像中的目标位置并对其进行分类。基于深度学习的目标检测算法利用CNN代替传统的手动选取特征,主要可以分为两阶段的目标检测算法和单阶段的目标检测算法。两阶段检测算法将物体检测按分类问题对待,首先生成包含物体的区域,然后对候选区域进行分类和校准,得到最终的检测结果。单阶段检测算法直接给出最终的检测结果,没有显式的生成候选框步骤。
2.1 两阶段目标检测算法
2.1.1 R-CNN模型
Girshick R等人提出的R-CNN[23]模型使目标检测取得巨大突破,成为后续R-CNN系列两阶段目标检测的开山之作。R-CNN的框架流程如图1所示,首先使用SS (selective search) 算法提取大约2 000个候选框;然后将提取到的候选框做预处理固定到相同尺寸,送入Alex-Net网络进行区域特征提取;最后对CNN提取的区域特征使用SVM进行分类与边框校准。R-CNN算法的性能较传统算法有很大的提升,但还存在SS算法产生候选框耗时严重,裁剪会导致信息丢失或引入过多背景,卷积特征重复计算量大和网络训练需要分步骤进行的缺点。
图1 R-CNN模型
2.1.2 SPP-Net模型
为了任意大小的图像能够输入网络,何凯明等人提出SPP-Net[24]目标检测模型,如图2所示。
图2 SPP-Net目标检测框架
通过在最后一个卷积层与全连接层间加入金字塔池化层,结构如图3所示,将SS算法生成的不同大小的候选框归一化到固定尺寸的全连接层上,完成对整张图像只需进行一次卷积特征提取的操作,避免了R-CNN对2 000个区域都会计算CNN特征的过程。SPP-Net目标检测算法能够适应不同尺寸,实现了卷积特征的共享计算,大大减少了计算量。但缺点除了继承R-CNN需要存储大量特征和多阶段训练等剩余问题,而且由于金字塔池化层的多尺度,增加了在金字塔池化层之前的所有卷积层不能微调的新问题。
图3 金字塔池化层
2.1.3 Fast R-CNN模型
2015年Ross G等人[25]提出Fast R-CNN目标检测算法,该模型的流程结构如图4所示。通过结合SPP-Net改进R-CNN,使用VGG16代替Alex-Net网络,简化SPP算法中的金字塔池化层为单尺度使得所有层参数可以微调,将SVM分类器改为SoftMax分类器,通过引入多任务学习模式,同时解决分类和位置回归的问题。相比于R-CNN和SPP-Net,Fast R-CNN将多个步骤整合到一个模型中,训练过程不再分步进行,减少了磁盘空间的占用,在提升网络性能的同时加快了训练速度。但Fast R-CNN的不足仍是需要专门的生成候选框算法。
图4 Fast R-CNN 流程图
2.1.4 Faster R-CNN模型
使用SPP-Net与Fast R-CNN进行检测的耗时性主要集中在使用专门的候选框生成算法,为了解决此问题,Ren S 等人[26]又提出Faster R-CNN目标检测框架,过程如图5所示。
图5 Faster R-CNN框架
该算法引入RPN(region proposal networks),代替专门的生成候选窗口算法,通过对特征图上的每个点进行滑窗操作,将不同尺寸的锚点框映射到原始图片,得到候选区域,完成前景背景的粗分类和粗定位。RPN的使用,使Faster R-CNN能够将网络中区域建议、特征提取、分类及定位多个步骤整合到一起,真正成为端到端的训练。但由于Faster R-CNN特征图上的一个锚点框对应于原图中一块较大区域,因此,Faster R-CNN对小目标检测效果不是很好。
2.1.5 后续两阶段目标检测器的改进
Faster R-CNN已经形成了具体的两阶段检测框架,后续也有从更好的CNN特征,更完善的ROI分类,更精准的RPN和样本后处理等方面对Faster R-CNN算法的改进。R-FCN[27]提出全卷积化设计,引入变换敏感分值图和位置敏感池化,将VGG16主干网络替换为ResNet,进一步实现更多计算的共享。Hyper Net[28]是2016年由清华大学提出的Faster R-CNN变种,该网络对高层特征采用Pooling方式进行下采样,低层次特征采用反卷积方式进行上采样,然后将不同尺度的特征融合输入到RPN网络中,相比Faster R-CNN,能够对小物体检测有比较好的效果。但由于引入了新的卷积、池化和反卷积操作,带来了时间上的消耗。
2.2 基于回归的检测算法
2.2.1 YOLO v1算法
两阶段目标检测算法虽然在检测任务上取得了很大的进步,但由于模型复杂,仍存在训练参数多,训练时间长的缺点。基于回归的YOLO v1[29]算法直接使用一个CNN同时完成分类和回归任务,模型如图6所示。
图6 YOLO流程框架
该算法剔除了生成候选框的操作,将图像划分为网格,使用一个神经网络,直接在每个网格中预测物体边框和类别,大大提升了检测速度。且由于每个物体边框的预测都以整张图的特征作为输入,因此,YOLO v1算法预测出来的边框都是综合了整张图的信息,包含了充足的上下文信息。但由于YOLO v1算法以每个格子作为中心点,因此存在准确率低,对小尺度物体、密集排布的物体检测精度低的问题。
2.2.2 YOLO v1 系列优化算法及扩展
为了克服YOLO v1检测速度快,但检测精度低的问题,YOLO v2[30]算法引入BN(batch normalization)、多尺度训练、锚框机制和细粒度特征等方法对YOLO v1算法进行改进,YOLO v3[31]算法在YOLO v2的基础上,采用更好的主干网络、多尺度预测和9个锚框进行检测,使得检测算法在保证实时性的同时,精度提高。
2.2.3 SSD算法
2016年,SSD[32](single shot multibox detector)算法被提出。该算法结合了YOLO算法和Faster R-CNN中的锚框设计机制,在结构上采用VGG16的卷积层作为主干网络,并在VGG基础上新增加了6个卷积层来获得更多的特征图。通过新增加多尺度检测和设置多个先验框,利用大尺度特征图检测小物体,小尺度特征图检测大物体来识别不同大小同一类别的物体。相比Faster R-CNN和YOLO算法,SSD算法的优点是将不同层次的特征图进行融合,提升了速度和检测精度。但缺点仍是对小目标不具有鲁棒性。
2.2.4 SSD系列优化算法及扩展
SSD算法对小目标不够鲁棒性的主要原因是特征图表征能力不够强,2017年提出的DSSD[33]算法使用更好的ResNet CNN作为主干网络,将经过反卷积得到的深层次特征和浅层次特征相融合,为小目标增加更多的上下文信息,使用更复杂的带跨层连接的预测模块预测类别和边框。DSSD相比SSD,提取到了更加鲁棒性的特征,使得精度有所提高。Retina Net[34]使用对样本给予不同权重的方法解决样本不平衡导致精度不高的问题,大幅度提升了单阶段检测器的精度。
3 结 论
两阶段目标检测算法和单阶段目标检测算法是目前基于深度学习目标检测的主流框架。两阶段目标检测算法相比单阶段目标检测算法,优点是在定位和检出率方面精度高,使用锚框机制考虑不同尺度的区域提升目标检测性能。但缺点是速度慢,训练时间长。单阶段目标检测算法相比两阶段目标检测算法,优点是速度快,能够学习到物体的泛化特征,但缺点是在定位和检出率方面精度低,对小物体检测效果不好。基于深度学习的目标检测算法相比传统检测算法在精度和实时性上获得了较大的提升,但由于现实场景的复杂多变性,依然面临有许多问题。如何减小背景复杂对目标检测的影响以及如何降低因目标尺度和形状变化引起的精度下降问题成为目标检测领域研究的热点。