胡伏原,李林燕,尚欣茹,沈军宇,戴永良
(1.苏州科技大学 电子与信息工程学院,江苏 苏州215009;2.苏州市虚拟现实智能交互及应用技术重点实验室,江苏 苏州215009;3.苏州市大数据与信息服务重点实验室,江苏 苏州215009;4.苏州经贸职业技术学院 信息技术学院,江苏 苏州215009;5.昆山市农业信息中心,江苏 昆山215300)
目标检测是计算机视觉中一项非常重要的任务,其主要目的是在图像中定位出目标边框的位置以及识别该目标所属的类别。近年来,目标检测在无人驾驶(如道路检测[1]、交通灯检测[2])、机器人视觉[3-4]、安防监控[5-7]以及遥感影像分析[8-9]等方面有着广泛的应用。
自2013年提出利用卷积神经网络(CNN)实现目标检测以来,目标检测任务大多数采用基于卷积神经网络的算法。论文针对提取图像特征的方式,将目标检测算法分为基于人工特征的目标检测算法和基于卷积神经网络的目标检测算法[10-14]。
基于人工特征的目标检测算法一般需要人工设计特征描述算子(如SIFT[15]、Haar[16-17]、HOG[18-19]等)提取图像特征,然后利用分类器(如Adaboost[20]、SVM[21]、DPM[22]等)进行图像特征分类,实现目标检测。这些算法在检测不同类型目标的时候,需要设计不同的模型提取特征。2001年提出的Viola-Jones(VJ)[23]检测器,首次实时实现了人脸检测。该算法采用多尺度Haar 特征算子快速提取图像特征,引入级联思想解决多尺度目标特征的重复搜索问题,减少AdaBoost 计算量,从而实时实现人脸检测。2010年提出的基于HOG(Histograms of Oriented Gradients)特征的DPM(Deformable Part Model)在传统的目标检测方法中取得最优的检测结果,在Pascal VOC 上取得了34%的平均精度。
然而,传统的目标检测算法对于不同类型的目标需要设计不同形式的对象表征模型,在生成候选区域(Region Proposal)时容易产生大量的计算开销,目标检测的速度和精度较低,且对于包含多尺度目标图像的特征提取鲁棒性不强。随后几年内,相关优化算法基本上都是基于DPM 算法思路,由于目标特征提取算子的设计大多基于像素级的浅层特征信息,缺乏语义表达能力,并且对不同目标特征设计难度较大,目标检测精度难以得到有效提升。另外,在环境光线变化、目标遮挡、图像畸变以及目标尺度不均匀等复杂的实际应用场景中,难以有效地设计出浅层图像特征算子,容易出现目标漏检和错检的情况,传统目标检测算法的研究面临着巨大挑战。
随着CNN 模型不断地改进和优化,出现一些特征提取能力很强的模型,如AlexNet[24]、VGG[25]、GoogleNet[26]、ResNet[27]等。Szegedy 等人[28]利用DNNs 提取图像特征,基于回归的方法获得目标检测框和分类信息,虽然对比滑动窗口提取特征的方法更加高效,但是算法在VOC 2007 测试集合上的平均精度仅有30%左右。Sermanet 等人[29]提出的OverFeat 模型在ILSVRC 2013 测试集上mAP 为24.3%的。Girshick 等人[30]提出的R-CNN 利用候选区域方法在目标检测精度方面取得巨大提升,VOC 2007 测试集上mAP 可以达到68.4%。随后,通过优化网络结构又提高到了76.8%,同时在ILSVRC 2013 测试集上mAP 达到31.4%。此后,结合传统的计算机视觉处理方法,如选择性搜索(selective search)和图像金字塔(pyramid)等方法,利用卷积神经网络提升目标检测精度成为一大热点研究方向。在提高算法的精度与检测速度方面先后出现了SPPNet[31]、Fast R-CNN[32]、Faster R-CNN[33]、R-FCN[34]、YOLO[35]、SSD[36]等经典的算法。
论文第一部分介绍CNN 算法原理以及优势;第二部分介绍多阶段目标检测算法发展现状;第三部分介绍一阶段目标检测算法的发展现状以及改进算法;第四部分介绍当前主流的数据集和评估方法,以及上述算法的检测结果,并通过分析评估给出当前算法存在的优缺点,并根据其发展趋势提出一些研究方向;最后对论文进行总结。
卷积神经网络(CNN)是当前基于深度学习的图像处理算法中的主流研究方法,通过多层神经网络提取图像大量特征信息,具有极强的鲁棒性与泛化能力,对于多尺度多目标检测具有重大意义。1998年,LeCun提出了卷积神经网络模型LeNet,并将其成功应用于检测手写字符。2012年,Hinton 与Krizhevsky 利用卷积神经网络模型AlexNet 进行图像分类,在ImageNet 大规模视觉识别挑战赛(ILSVRC)上使Top-5 错误率降低到了15.3%,相比DPM 模型在Top-5 错误率上有明显降低。目前,微软的ResNet 和谷歌的Inception V4 将Top-5 错误率降到了4%以内,在这个特定任务上已经超越了人类的表现。CNN 在目标检测任务中存在如下特点:
(1)多层卷积与池化。多层卷积能够学习更加丰富的图像描述特征,采用金字塔池化方法,可以将任何尺度的图像卷积特征转化成相同维度,让CNN 处理更灵活,避免了由于裁剪和扭曲操作导致的信息丢失。
(2)局部感知。低层级的每个神经元先对局部区域进行感知,然后在更高层将局部信息进行整合,获得全局信息。通过局部感知还可以减少训练的参数数量。
(3)权值共享。在局部连接中,每个神经元对应的卷积核参数相同,有效地减少了训练参数的个数。
(4)稀疏性限制。加入稀疏性限制有效抑制了大部分神经元,大大减少了网络的参数数量,有效提升了训练效率。
目标检测算法也开始引入CNN 模型提升特征提取精度。早期的基于深度学习的目标检测算法继承传统的目标检测算法思路,通过候选区域生成、区域特征提取以及区域分类实现目标检测,如图1 所示。首先对输入图像进行裁剪以及正负样本的制作等图像预处理操作,然后利用聚类算法(Select Search)提取可能存在目标的候选区域,并使用CNN 提取区域的特征,最后使用分类器(SVM)进行目标分类。
针对特征提取与目标检测问题解决思路,可以将当前目标检测算法分成多阶段目标检测算法和一阶段目标检测算法两类。多阶段目标检测算法将特征提取与目标分类分开处理,预先提取待测图像中候选区域,然后利用CNN 提取分类。而一阶段目标检测算法是在一个处理过程中将图像的特征提取与目标检测同时完成,CNN 的输出结果中包含目标分类结果和检测框信息。
图1 目标检测流程
多阶段目标检测算法核心是利用CNN 代替传统人工特征提取方法,基于卷积神经网络3 个结构上的特性:局部连接、权值共享以及特征空间上的采样,使得卷积神经网络具有一定程度上的平移、缩放和扭曲不变性,从而提高多尺度目标检测中特征的鲁棒性以及准确性。在候选区域的选取算法上也做了一些改进,从传统的滑动窗口方法,到之后的Selective Search[19]和Edge Boxes[20],一定程度上提高了候选目标的精度。最后,目标分类与目标框回归分开实现,并且目标候选框提取与模型训练也是分开执行(如图2 所示),这会造成较大的存储与计算开销,因此,这类方法的时间复杂度普遍偏高。
图2 多阶段目标检测流程
Girshick 等人[35]利用CNN 提取图像特征替代传统人工特征选择,并采用聚类搜索的Selective Search 算法代替滑动窗口提取候选区域。具体实现步骤包括:
(1)通过Selective Search 从输入图像上提取2000 个候选区域;
(2)将所有区域裁剪或缩放成固定的227×227 维度,利用CNN 提取特征,并输出到紧连的两个全连接层;
(3)利用SVM 对全连接层特征进行分类,同时,针对每个类别需要专门训练边框回归器,该回归器负责对边框位置和大小进行细微调整。
R-CNN 在PASCAL VOC2007 上进行测试,平均精度(mAP)提升到了68%。但是R-CNN 进行前向特征提取获取候选区域时,需要进行一次CNN 的特征提取,图像特征多次重复提取,计算量大,实时性差。此外,R-CNN 中的全连接层需要具有相同尺寸的候选区域,在对图像进行裁剪和缩放时也容易产生畸变,这都影响了检测精度。
由于CNN 全连接层要求输入的图片大小保持一致,而实际应用中输入CNN 的图片大小可能不一致。如果将输入图片进行归一化处理,部分目标检测结果将充满整个图片,部分检测的目标在图像中可能很小。R-CNN 算法的提出对不同图像位置进行裁剪和缩放变换,但是裁剪过程可能会破坏目标完整性或者使得目标发生严重畸变。为了解决该问题,He 等人[31]对SPP-Net 算法进行改进,其主要思想是在卷积特征上引入空间金字塔池化层(spatial pyramid pooling,SPP)替换原始图像上的裁剪或缩放等操作。
SPP-Net 算法的关键步骤是:首先,借助Selective Search 算法,从原始图像中筛选出候选区域;其次,将区域大小缩小为min(w,^)=S,即用最短边的长度缩放候选区域;随后,再用SPP-Net 提取相关特征;最后,利用上述提取的特征训练SVM 模型,并用边框回归方法来调整目标框的位置。SPP-Net 借助SPP 层,调整输入的候选框大小,解决了R-CNN 候选区域crop/warp 带来的图像失真问题。但与R-CNN 一样,仍然存在候选区域特征重复计算的问题。
针对R-CNN 和SPP-Net 提取候选框算法产生的图像特征重复计算的问题,2015年Girshick 等人[32]提出Fast R-CNN 算法,引入图像与特征层的映射关系,减少了重复计算。其主要思想为:首先,与SPP 类似地操作,借助RoI (region of Interesting) Pooling 层映射多尺度特征,通过RoI Pooling 层直接传播梯度,无需多步执行训练和测试;此外,用多任务的方式一起进行分类和回归;最后,将SVD 分解的全连接层参数矩阵,压缩为两个规模小很多的全连接层。Fast R-CNN 的主要步骤如下:
(1)利用CNN 提取图像特征;
(2)将滑动窗口策略等方法提取的区域候选框全部投影到最后的特征层;
(3)借助ROI Pooling 操作对所有区域候选框进行映射,获得大小一致的特征;
(4)对两个全连接层都使用softmax 进行目标识别,利用回归模型调整边框位置与大小。Fast R-CNN 结合了R-CNN 和SPP-Net 方法,借助多任务损失函数方便了模型的训练和测试。损失函数为
式中:i 表示mini-batch 上锚点索引;pi是目标预测概率;ti是向量,表示预测包围盒的4 个坐标;ti*是与锚点对应的坐标向量;Ncls是mini-batch 的大小;Nreg是锚点位置数量;λ 是平衡权重。该方法在VOC2007 测试表明检测精度得到了提升,但是候选区域的选择导致算法的时间复杂度较高,无法实时应用。
2016年,Ren 等人[33]在原有的Fast R-CNN 算法基础上,舍弃了滑动窗口提取候选区域的策略,引入了RPN(Region Proposal Network)网络提取候选区域,提出了Faster R-CNN 算法,如图3 所示。RPN 网络通过共享卷积层特征,利用滑动窗口方法,采用锚框机制和边框回归方法快速获得多尺度的候选区域。
图3 Faster R-CNN 模型
2017年,Cai 等人[37]提出了利用级联Faster R-CNN 网络提高检测精度,即Cascade R-CNN 目标检测算法,结合传统方法中的级联(cascade)思想和当前主流的Faster R-CNN 检测框架,通过不断提升IoU 阈值训练级联检测器,使得检测器的定位精度更高。回天等人[38]在单尖角火焰、多尖角火焰和无规则火焰三种形式火焰的自建数据集上,训练Faster R-CNN 检测模型,具有很高的检测精度和较好的抗干扰能力。
2017年,Lin 等人[39]利用特征金字塔网络(Feature Pyramid Network,FPN)增强卷积层特征强度,将主干CNN 网络提取的多层特征进行侧向输出,并利用残差处理与上层特征融合,最后在新的特征层上检测目标。FPN 网络模型有效地增强了低层语义表达能力,提升了小目标物体检测精度。这种思想首先在Faster RCNN 上得到证实,检测精度提升了3.2%。随后,YOLOv3[40]网络模型中也开始尝试引入金字塔特征融合网络。
2018年,Jiang 等人[41]提出的IoU-Net 模型,在FPN 上加入边框置信度约束,在非极大值抑制算法(Non Maximum Suppression,NMS)处理冗余边框时,减少分类置信度干扰,确保定位更加准确的边框不会因为低分类置信度而被舍弃。Faster R-CNN 和FPN 等算法容易出现分类置信度较低而边框位置准确度较高的问题,这抑制了精确的边框,并且在迭代的回归边框过程中,容易导致定位精度降低问题。将上述改进算法同样嵌入Faster R-CNN[33]和cascade R-CNN[37]中,取得了很好的改进效果。
2017年,He 等人[42]在Faster R-CNN 的基础上增加了一个额外的语义分割分支来进行目标像素级掩膜的预测,该模型框架能够实现目标实例分割和关键点检测,并在目标检测过程获得了当时的最高水准。但是该算法标注代价昂贵,检测速度也难以满足实时性需求[43]。Chen 等人[44]提出的MaskLab 通过结合语义和方向预测来生成实例级掩膜。Huang 等人[45]提出一种给掩膜打分(mask scoring)的新方法。该方法不仅仅依靠检测结果进行置信度计算,而且让每个神经网络单独去学习一个针对Mask 的打分规则[46]。该打分机制评价掩膜生成的质量,对掩膜的修正有积极影响。在公开数据集COCO2017 上,该方法检测准确率比Mask R-CNN方法提高了1.2%。温等人[47]在特征金字塔的基础上,引入一条自下而上的路径增强特征层次,提升了目标分割的精度。
随着SPP-Net、Fast R-CNN、Faster R-CNN、FPN 和Mask R-CNN 等算法的快速发展,基于深度学习的目标检测的精度快速提升,算法时效性也得到较大改善。
一阶段算法的核心思想是将目标检测问题转换为回归问题求解,即根据目标检测模型的输出值,利用权重参数将分类和目标框预测相关联,统一进行计算。此时,模型可以直接利用CNN 提取图像特征,并输出待预测的特征向量,直接得到目标检测结果,如图4 所示。相比基于候选区域的方法,一阶段目标检测算法可以直接进行端到端的训练,不需要额外的存储空间,有效降低了时间复杂度。但是,缺乏图像预处理机制容易导致候选区域提取不够精确,且用于预测的特征层容易丢失大量的小目标信息,目标检测的精度和查全率偏低。
图4 一阶段目标检测流程
2016年,Redmon 等人[35]提出了能够一次性预测多个Box 位置和类别的卷积神经网络。该算法延续了GoogleNet 的核心思想,真正实现了端到端的目标检测算法,能够实时的检测目标,但是精度有所下降。
2017年,Redmon 等人提出的YOLOv2[40]算法在原先YOLO 算法的基础上,通过替换部分目标函数,引入锚点机制和BN(Batch Normalization)层,删除全连接层和最后一个池化层,提升了检测精度;同时,通过合并目标检测和目标训练,有效的平衡了速度和精度。
针对YOLOv2 输出最后一层卷积特征检测目标,丢失大量图像信息,难于检测一些较小的目标,从而导致模型在查全率上具有明显的缺陷。2018年,Redmon 等人提出了YOLOv3[48]算法。该方法调整了网络结构,并借助多尺度特征进行对象检测,用Logistic 取代了softmax 进行对象分类,有效提升了目标检测的mAP 及小物体检测效果。
最精确的现代神经网络需要大量的GPU 来进行小批量的训练,不能实时工作,费用高,难于推广。YOLOv4[49]通过创建一个CNN 解决了这些问题,该CNN 训练只需要一个传统GPU,大大提升了训练效率。同时,该方法整合了不同的特征,提升了检测准确度。
初期的YOLO 算法在7*7 的框架下识别物体,容易漏检小目标。为了对任意大小的目标检测,Liu 等人[36]去掉了YOLO 算法中的全连接层,整合了Faster R-CNN 中的锚点机制,确保了目标检测的精度。李晓光等人[50]在原始SSD 网络基础上,将特征提取网络的原始特征图和反卷积后的特征图进行融合操作,逐层传递语义信息,提升了小目标的检测能力。
DSSD[51]算法将SSD 的VGG 网络用Resnet-101 进行了替换,在分类回归之前引入了残差模块,对原始网络结构进行扩充,添加了一些辅助卷积层并增加了反卷积层形成“宽-窄-宽”的“沙漏”结构。该方法对小目标的检测精度有了很大的提升。由于引入的Resnet-101 网络层数过多,并且增加了很多额外的反卷积操作,检测速度比SSD 慢得多。
FSSD[52]算法借鉴了FPN 的思想,重构了一组金字塔特征图,把网络中某些特征图调整为相同的尺度再进行连接,得到一个增强的像素层,并以此层为基础的网络输入来生成特征金字塔。该算法在检测速度基本一致的情况下,检测精度有了明显提升。
以上方法均是通过增强卷积层特征提升目标检测精度,其中利用的思想包括特征金字塔模型(多层特征融合)、反卷积与特征融合等。通过利用多个卷积层特征信息,有效增强低层语义特征,提高了小目标物体的检测精度。
伴随着深度学习算法的改进与应用研究,大规模图像数据集成为模型训练和优化的基础。大量的研究团队和机构搜集了多种目标的图像数据集,为基于深度学习的目标检测算法训练与验证提供了可能。公开的大型数据集有MS COCO、Pascal VOC 和ImageNet 等,下面进行简要说明。
(1)PASCAL VOC[39]数据集。该数据集是2005年建立,主要用于图像分类、识别和目标检测等任务的一个基准测试集。2005年至今,PASCAL VOC 国际挑战赛通过不断完善数据集,当前常用于竞赛的是VOC2007(430M)和VOC2012 (1.9G)两个子集,包含20 类目标。
(2)ImageNet[37]数据集。该数据集是2009年建立的,现在已经成为目前最大的图像分类数据集。该数据集包含了1400 万幅图像和2.2 万个类,平均每个类包含1000 幅图像。2010年开始,每年都会举行ImageNet 挑战赛(ILSVRC) 。在该挑战赛上涌现了一批经典的深度学习网络模型,极大程度的推动了基于深度学习的目标检测算法发展。
(3)MS COCO[53]数据集。该数据集是2014年发布的,大多数据是从复杂日常场景中截取的图像。该数据集包括80 类物体、32.8 万幅图像和250 多万个标注物体。相比ImageNet 数据集,类型较少,但是每一类的图像较多,已成为平均包含目标数最多的数据集。
常用的目标检测评估标准包括检测精度和检测速度。
4.2.1 检测精度
检测精度通常是用来衡量在测试集合中,模型对图像中目标的预测能力。评估模型的全局准确程度的情况下,可以使用准确率(Accuracy)表示,利用检测对的样本数除以所有的样本数,即:准确率=正确预测的正反例数/总数。该评估参数无法包含太多信息,不能全面评价一个模型性能。因此,需要根据具体检测任务,设定更加精细的评估标准。
针对目标检测任务,检测精度包含目标分类精度(即精确率)和背景误差(查全率)。平均精度(Average Precision,AP)和mean Average Precision(mAP):AP 即为上述Precision-recall 曲线与坐标轴包围的面积,通常AP 值越高表示模型检测效果越好。mAP 为多个类别检测精度的平均值,即对每个类的AP 再求平均,得到的就是mAP 的值,值域在[0,1]之间,其值越大表明模型检测效果越好。文中实验主要是对mAP 值进行了比较。
4.2.2 检测速度
针对同一个测试视频流,按照同等实验条件下每秒钟处理的帧数作为检测速度评估标准,简写为FPS。文中主要使用检测速度评估端到端实时检测模型的处理效率,在较高的检测精度和查全率下,检测速度的提升对于实际场景中目标检测有极大的应用价值。
基于上述目标检测公开数据集,利用mAP 评价指标,对当前主流的基于卷积神经网络的目标检测算法进行评估。训练集均使用Pascal VOC2007 和Pascal VOC2012 的全部训练集,除FPN 测试时使用MS COCO,其他算法均使用Pascal VOC2012 测试集评估模型检测效果。其中,实验结果均基于Nvidia TatianX 显卡加速处理。
表1 列出了不同目标检测算法检测精度以及计算时间。由表1 可知,相比传统的HOG+DPM 算法,基于卷积神经网络的目标检测算法在检测精度和检测速度上有很大的提升。相同的算法和相同的模型,在处理不同分辨率图像时,检测精度和检测速度也有所不同,如YOLOv2 算法,对输入228×228 维的低分辨率的图像达到69%的mAP 和91 FPS,而对输入544×544 维的高分辨率的图像可以达到78.6%和40 FPS。相同的算法和不同的模型,在处理相同输入图像的时候检测结果差异较大,如Faster R-CNN 算法,在VGG16 模型上拥有73.2%的mAP 和7 FPS,而在ResNet-101 模型上可以达到76.3%和5 FPS。
表1 目标检测算法的性能比较
多阶段模型检测结果表明,Faster R-CNN 有很高的检测精度,但是模型复杂度较高,无法达到实时性检测。最新的一阶段检测算法R-SSD 基于VGG16 模型,在保持17 FPS 的情况下,拥有80.8%的检测精度,较相同模型的Faster R-CNN 的73.2%检测精度,提升了7.6%。
上述基于卷积神经网络的目标检测算法在不同领域已经有了大量的研究与应用成果。针对具体的应用场景,利用预训练模型和实际数据集优化检测模型,比传统检测算法取得了更好的检测效果。
沈等人[54-55]利用YOLO 算法,在野外水下数据集Labeled fish in the wild 上进行迁移训练,相比Haar 级联算法,取得了较高的检测精度并可以实现鱼群的实时检测,如图5 第一行所示。
马等人[56]利用YOLO 算法对监控视频中的特定行为进行实时检测,获取当前帧中目标的大小和位置信息。然后,结合LSTM 对目标的行为动作序列建模,实现了目标行为的判别。
曹等人[57]通过选择性搜索算法获得待测图像的候选区域,然后利用Fast R-CNN 提取候选区域特征并做目标检测,对公交车、小汽车两种类型车辆有很高的检测精度。
王等人[58]针对小尺度坦克装甲车辆目标检测方面存在的漏检问题,提出一种改进的Faster R-CNN 算法。该算法根据目标尺度分布情况设置合理大小的滑动窗口,使RPN 能够提取更加精确的建议区域,如图5第二行所示。
裴等人[59]提出一种基于残差网络的航拍目标检测算法。该算法针对航拍影像分辨率低且存在运动模糊、尺度变化大、目标遮挡和光线分布不均匀等问题,结合SSD 算法和残差网络提高目标检测精度,并融合网络结构中低层视觉特征与高层语义特征,提高小目标检测精度,如图5 第三行所示。
徐等人[60]利用Faster R-CNN 算法提取遥感卫星图像特征,在多个数据集上训练优化网络模型,对图像中的水泥制造工厂进行检测,在不同地区的影像图中取得了很高的检测精度,如图5 第四行所示。
刘等人[61]利用全卷积神经网络FCN 对输入的红外图像进行分割,然后与显著性图像进行相乘后,利用阈值分割算法获得红外小目标。在真实的红外图像上进行测试,获得了不错结果。
图5 目标检测应用示例
基于深度学习的目标检测算法主要分成两大类: 基于候选区域的R-CNN 算法系列以及基于回归的YOLO、SSD 等算法系列。R-CNN 系列算法提取图像候选区域较为精细,检测精度较高;YOLO 和SSD 系列直接提取图像信息进行端到端的训练,检测速度快,可以满足实时性要求。随着目标检测在计算机视觉的各个领域应用与扩展,基于深度学习的目标检测算法研究仍然面临一些挑战值得深入研究,比如少样本或零样本情况下目标检测问题。