本网站提供普刊和核心期刊职称论文业务;提供实用新型专利、发明专利业务;提供个人出书业务、主编、副主编、参编挂名,独著;提供国家级课题一条龙服务,课题上知网,欢迎各位客户加微信、qq 在线咨询。

联系方式:QQ:1281888234(微信同号);

人工智能论文:基于深度学习的目标检测技术综述

来源:未知 2021-02-04 13:42

摘要:

  目标检测的任务是判断图像中是否存在属于指定类别的目标,如果存在,则给出目标的类别和位置信息。近年来,由于卷积神经网络的发展,基于深度学习的目标检测取得了突破性的进

  人工智能论文:基于深度学习的目标检测技术综述

  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的架构为共同优化几个相关任务提供了可能(例如,Fast RCNN将分类和边界框回归结合为一种多任务学习方式)。

  图1 目标检测算法发展史

  图1为目标检测算法的发展史,时间轴下方展示了基于深度学习的分类网络的发展历程。其中红色框内为one-stage算法。可以看出图像分类算法贯穿目标检测算法的始终,而two-stage算法在前期占据主导地位,one-stage目标检测算法在后期蓬勃发展。这是因为图像分类算法和two-stage目标检测算法中回归分析方法对于one-stage目标检测算法的发展都有重要的促进作用。

  不同目标检测算法在COCO 数据集上的性能如表1 所示。从中可以看出,RetinaNet由于解决了one-stage算法‘类别不均衡’问题,精度已经超过了two-stage检测器。然而检测速度只有5FPS,远小于SSD和YOLOv3。

  表1 不同目标检测算法性能对比

 

back bone

AP

AP50

AP75

APS

APM

APL

Two-stage methods

 

 

 

 

 

 

 

Fast R-CNN[18]

VGG-16

19.7

35.9

 

 

 

 

Faster R-CNN+++[11]

ResNet-101-C4

34.9

55.7

37.4

15.6

38.7

50.9

Faster R-CNN w FPN[19]

ResNet-101-FPN

36.2

59.1

39.0

18.2

39.0

48.2

Faster R-CNN by G-RMI[20]

Inception-ResNet-v2

34.7

55.5

36.7

13.5

38.1

52.0

Faster R-CNN w TDM[21]

Inception-ResNet-v2-TDM

36.8

57.7

39.2

16.2

39.8

52.1

Mask R-CNN[22]

ResNet-101-FPN

38.2

60.3

41.7

20.1

41.1

50.2

Mask R-CNN[22]

ResNeXt-101-FPN

39.8

62.3

43.4

22.1

43.2

51.2

One-stage methods

 

 

 

 

 

 

 

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.1 LeNet

  手写字体识别模型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)分类器使用了Gaussian Connections,目前已经被Softmax替代。

  图2 LeNet网络结构

  3.2 AlexNet

  受到计算机性能的影响,虽然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张图片。并对图片进行镜像,旋转,随机噪声等数据增强操作,大大降低了过拟合现象。

  图3 AlexNet网络结构

  3.3 VGGNet

  VGGNet[10]由Google DeepMind 公司和牛津大学计算机视觉组联合提出的深度卷积网络。其网络结构如图4所示,可以看出,VGG16相比AlexNet模型具有较深的深度。

  从AlexNet到VGGNet,网络表达能力进一步增强,同时在ImageNet上测试的精度进一步提高,VGG16网络优点:

  (1)VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3×3)和最大池化尺寸(2×2)。

  (2)验证了几个小滤波器(3×3)卷积层的组合比一个大滤波器(5×5或7×7)卷积层好。一方面可以减少参数;另一方面能够进行了更多的非线性映射,可以增加网络的表达能力。

  (3)验证了深层次的网络可以获得高级的语义特征,通过不断加深网络结构可以提升网络的性能。

  图4 VGG16网络结构图

  3.4 GoogleNet

  在2014年的ILSVRC比赛中,GoogLeNet[9]取得了第一名的成绩,并且所用模型参数不足AlexNet(2012年冠军)的1/12。论文题目《Going deeper with convolutions》中的deeper有两层含义,一是指本文引入了一种新的结构“Inception module”,二就是其直接含义—网络深度的增加。

  GoogleNet v1是一个22层的深度网络。如果考虑池化层,则有29层。在主干卷积环节有3个inception模块,模块之间用3×3的最大池化层隔开。Inception模块如图4中蓝色框所示,该结构分四条线路并行,将CNN中常用的卷积(1×1,3×3,5×5)、池化操作(3×3)堆叠在一起。采用不同大小的卷积核是为了获得不同大小的感受野,最后拼接则是为了融合不同尺度的特征。这样做一方面增加了网络的宽度,另一方面也增加了网络对尺度的适应性。为了解决计算过量的问题,在后三条路线上增加了1×1卷积核来进行降维。同时为了缓解梯度消失的问题,GoogleNet v1 增加了两个辅助分类器(图4红色框内)。这两个辅助分类器被添加到网络的中间层,它们和主分类器共享同一套训练数据。

  GoogleNet特点:

  (1)采用了1×1卷积核,性价比高,用很少的计算量既可以增加一层的特征变换和非线性变换。

  (2)提出Batch Normalization,通过一定的手段,把每层神经元的输入值分布回归到均值0方差1的正太分布,使其落入激活函数的敏感区,避免梯度消失,加快收敛。

  (3)引入Inception模块,4个分支结合的结构,每个分支采用1x1的卷积核。

  (4)去除了最后的全连接层,大大减少计算量。

  图4 GoogleNet 网络结构图

  3.5 ResNet

  2015年何凯明等提出的ResNet[11]网络,一举获得ILSVRC比赛的冠军。ResNet的出现是CNN史上的一个里程碑事件,ResNet可以训练出更深的CNN模型,从而实现更高的准确度。ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(shortcuts,skip connection),这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。

  我们知道,越深的网络一般有越高等级的特征,拥有强大的表达能力。然而神经网络随着层数的增加,网络退化严重,即深层次的网络反而不如稍浅层次的网络性能;而且这并非是过拟合导致的,因为在训练集上也存在退化问题。其实,在浅层网络的基础上叠加y=x层(也就是identity mapping,恒等映射),可以让网络深度增加而不退化。图5为残差模块的示意图,残差函数F(x) = H(x) - x, 这里如果F(x) = 0,则就是恒等映射。事实上,可以这样理解:我们期望深层次模块训练后的函数结果F(x) = 0,这样学习训练过程相当于自主确定了多少层次的网络是最优的。

  Resnet特点:

  (1)通过残差模块的将网络深度进一步提高,解决了不断深化神经网络而使准确率饱和的问题。通过活用1×1卷积降低了特征图的维度,控制了参数数量。

  (2)存在明显层级,特征图个数层层递进,保证输出特征的表达能力。

  (3)使用较少池化层,大量采用下采样,提高传播效率。

  图 5 残差网络结构

  3.6 DenseNet

  DenseNet[29]模型的基本思路与ResNet一致,通过短路连接来融合前后几层的信息,但是DenseNet建立的是前面所有层与后面层的密集连接(dense connection)。DenseNet的另一大特色是通过特征上的连接来实现特征重用(feature reuse)。这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。

  DenseNet网络结构如图6所示,主要结构分稠密块(Dense Blocks)和过渡层(transition layers)。稠密块结构能够互相连接所有的层,具体来说就是每个层都会接受其前面所有层作为其额外的输入。对于一个 L 层的网络,DesNet共包含个连接,这可以实现特征重用,提升效率,并且缓解了深层网络的梯度消失问题。过渡层为相邻2个稠密块的中间部分,稠密块是连接两个相邻的稠密块,并且通过池化使特征图大小降低。

  DenseNet的优势主要体现在以下几个方面:

  (1)由于密集连接方式,DenseNet提升了梯度的反向传播,使得网络更容易训练。由于每层可以直达最后的误差信号,实现了隐式的“deep supervision”。

  (2)参数更小且计算更高效,由于DenseNet是通过concat特征来实现短路连接,实现了特征重用。

  (3)由于特征复用,最后的分类器使用了低级特征。

  图6 DenseNet网络结构

  4. 基于候选区域的目标检测算法

  目前基于深度神经网络的目标检测算法主要分为两大类;一类是基于候选区域的目标检测算法,即two-stage目标检测算法。该方法先提取到目标的候选区域,然后再由神经网络做分类和回归;另一类是基于回归的目标检测算法,也称为one-stage目标检测算法。该方法没有生成候选区域的环节,直接由神经网络做分类和回归。two-stage目标检测算法在精度上普遍要优于one-stage目标检测算法,然而由于候选区域提取过程用时较多,速度远低于one-stage目标检测算法,并不能达到实时检测的要求。本节将就two-stage目标检测主流算法做简要介绍。

  4.1 R-CNN

  Girshck等针对卷积神经网络如何实现目标定位的问题,提出了将于Region proposal和CNN结合的算法R-CNN[16]。开创了神经网络实现目标检测的先河。使PASCAL VOC2007 测试集的mAP 刷新到了58.5%。经过改进的R-CNN 在该数据集的mAP 刷新到66%,ILSVRC 2013 数据集上的mAP达到31.4%。其计算流程如图7所示,可分为4步,首先利用选择搜索算法(selective search)提取候选区域(约2000个),接着将候选区域缩放到固定大小,然后进入卷积神经网络提取特征,随后将提取的特征向量送入SVM分类器得到候选区域目标的类别信息,送入全连接网络进行回归得到位置信息。

  R-CNN缺点:

  (1)输入的图像大小会进行缩放,导致图像失真。

  (2)用选择性搜索算法提取约2000个候选区域,每个候选区域都要送入卷积神经网络提取特征,计算量大耗时多。

  (3)训练测试复杂,候选区域提取、特征获、分类和回归都是单独运行,中间数据也是单独保存卷积提取的特征需单独存储,占用大量硬盘空间。

  图7 R-CNN网络结构示意图

  4.2 SPP-Net

  2014年何凯明等人针对R-CNN的缺陷进行了改进,开发出了SPP-Net(Spatial Pyramid Pooling Network)[30]。其网络流程如图8所示,SPP-Net将整个图片送入卷积提取特征,避免了候选区域分别送入卷积层提取特征造成的重复计算。再次,在卷积层和全连接层之间增添了空间金字塔池化层(SPP,Spatial Pyramid Pooling),可以对不同大小特征图进行池化操作并生成特定大小的特征图,避免了R-CNN对图像进行缩放导致图像失真。

  SPP-Net 缺点:

  (1)与R-CNN设计相同,训练各个阶段都是单独运行,且中间数据必须保存。

  (2)训练数据的图像尺寸大小不一致,使候选框感受野过大,不可以使用反向传播有效的更新权重。

  (3)网络微调只更新了全连接层,不能实现端到端的检测且检测精度还需进一步提升。

  图8 SPP-Net 网络结构示意图

  4.3 Fast R-CNN

  借鉴SPP-Net的SPP层的设置,Ross等人2015 年提出Fast R-CNN[18],用RoI Pooling层代替了SPP层,该层可以看成一层的金字塔池化层,它去掉了SPP的多尺度池化,直接用M×N的网格,将每个候选区域均匀分成M×N块,对每个块进行最大值池化。从而将特征图上大小不一的候选区域转变为大小统一的特征向量。针对在训练期间为多阶段和特征重复计算造成的时间代价以及数据存储过量的问题,将神经网络与SVM分类相结合,由全连接层同时负责分类和回归任务,实现了多任务端到端训练,使检测精度和速度同时得到了提高。Fast R-CNN网络流程如图9所示,主要分三部分,首先将图送入卷积网络提取特征,然后通过RoI Pooling将候选区域池化为同一长度的特征向量,最后通过全连接层进行分类和回归。Fast R-CNN在PASCAL VOC 数据集中检测时间为每张0.32s,远小于R-CNN的45s和SPP-Net的2.3s。

  虽然Fast R-CNN实现了多任务端到端的训练,然而通过选择性搜索算法提取候选区域耗费了较多时间,训练和预测所需时间仍较长,不能实现实时性检测。

  图9 Fast R-CNN网络流程图

  4.4 Faster R-CNN

  R-CNN、SPP Net和Fast R-CNN都需要用选择性搜索算法预先提取出候选区域,这导致了网络时效性较差,为了解决这个问题,Ren等人在Fast R-CNN 的基础上提出Faster R-CNN[31]算法,在卷积层后添加了区域提取网络RPN(Region Proposal Network),代替了Fast R-CNN的选择性搜索算法。RPN的核心思想是使用CNN卷积神经网络直接产生Region Proposal,因为anchor机制和边框回归可以得到多尺度多长宽比的Region Proposal。RPN网络也是全卷积网络(FCN,fully-convolutional network),可以针对生成检测建议框的任务端到端地训练,能够同时预测出目标物体的边界和分数。

  Faster R-CNN整个流程如果10所示,先对图像进行卷积提取特征,然后进入RPN层获得候选区域,接着通过RoI Pooling层,最后全连接层进行分类和回归。整个流程从图像特征提取、候选区域获得到分类和回归都在神经网络中得到,且整个网络流程都能共享卷积神经网络提取的特征信息,提高了算法的速度和准确率,从而实现了两阶段模型的深度化。Faster R-CNN在PASCAL VOC 2007和2012上的mAP分别为73.2%和70.4%,检测速度达到5FPS。

  缺点:

  (1)获取候选区域,再对每个候选区域分类计算量还是比较大。

  (2)虽然速度有了提高,但还是没达到实时性检测的要求

  从R-CNN、SPP Net、Fast R-CNN到Faster R-CNN算法网络逐步优化,各个算法解决了一部分难题,具体来说 RCNN解决的是,“为什么不用CNN做classification呢?”Fast R-CNN解决的是,“为什么不一起输出bounding box和label呢?”Faster R-CNN解决的是,“为什么还要用selective search呢?”

  图10 Faster R-CNN网络流程图

  4.5 Mask R-CNN

  2017年何凯明等人在Faster R-CNN的基础上再次改进,提出了Mask R-CNN[22]算法,通过添加Mask分支,能够同时实现目标检测和语义分割任务。由于Faster R-CNN在下采样和RoI Pooling层都采取了取整运算,对检测任务产生了影响,特别是对于像素级检测的任务。通过RoI Align层替换RoI Pooling层,使用双线性插值来确定非整数位置的像素,这样可以让每个RoI取得的特征更好地对齐原图上的RoI区域。此外Mask R-CNN用基础网络ResNet[34],并采用FPN(Feature Pyramid Network)来提取图像特征,在COCO 数据集上的检测准确率从Fast R-CNN 的19.7%提高至39.8%。

  Mask R-CNN网络的优点在于:它在Faster R-CNN网络的基础上增加了目标掩码作为输出量,掩码是将一个对象的空间布局进行编码,从而使得对目标的空间布局提取更精细。其缺点在于:Mask R-CNN比Faster R-CNN检测速度慢一些。

  图10 Mask R-CNN网络流程图

  5. 基于回归的目标检测算法

  5.1 YOLO

  R-CNN开创性的提出了候选区域(Region Proposals)的方法,先从图片中搜索出一些可能存在对象的候选区(Selective Search),大概2000个左右,然后对每个候选区域进行对象识别。大幅提升了对象识别和定位的效率。不过R-CNN的速度依然很慢,其处理一张图片大概需要49秒。因此又有了后续的Fast R-CNN 和 Faster R-CNN,针对 R-CNN的神经网络结构和候选区的算法不断改进,Faster R-CNN已经可以达到一张图片约0.2秒的处理速度。

  2015年Joseph等人提出了基于回归的目标检测算法YOLO (You only look once)[32],其检测速度达到45张每秒,速度优势让它成为了端到端的领跑者。YOLO创造性的将候选区和对象识别这两个阶段合二为一。事实上,YOLO并没有真正去掉候选区,而是采用了预定义的候选区(并不是Faster R-CNN所采用的Anchor)。将图片划分为 S×S个网格,每个网格允许预测出2个边框。对于每个网格,YOLO都会预测出B个bounding box(bbox),而对于每个bbox,YOLO都会预测出5个值,其中4个代表bbox的位置,还有一个代表bbox的confidence值。

  图11 YOLO思想示意图

  YOLO直接使用一个卷积神经网络来实现整个检测过程。网络结构示意图如图12所示,其中,卷积层用来提取特征,全连接层用来进行分类和预测。网络结构是受GooleNet的启发,把GooleNet的inception层替换成1×1和 3×3 的卷积。最终,整个网络包括24个卷积层和2个全连接层,其中卷积层的前20层是修改后的GooleNet。网络经过最后一个FC层得到一个1470×1 的输出,7×7×30的一个张量,即最终每个网格都有一个30维的输出,代表预测结果。

  YOLO优点:

  (1)YOLO将目标检测问题转化为一个回归问题求解。YOLO的结构非常简单,它是一个one-stage的检测方法,直接使用一个卷积神经网络就可以同时预测bbox的位置和类别。

  (2)YOLO速度非常快,YOLO只需将图片输入到网络中即可得到最终的检测结果,所以YOLO也可以实现视频的实时检测。

  (3)YOLO的泛化能力强,YOLO可以学习到高度泛化的特征,所以可以迁移到其他领域。

  图12 YOLO网络结构图

  5.2 YOLOv2

  Joseph等人对YOLO网络结构做修改,提出了YOLOv2方法[23],YOLOv2用Darknet-19用做基础网络(如图13),包含19个卷积层、5个最大值池化层。YOLOv2网络通过在每一个卷积层后添加都添加了Batch Normalization层,并且不再使用dropout。使用Batch Normalization后,YOLOv2的mAP提升了2.4%。YOLOv2增加了在ImageNet数据集上使用448×448的输入来微调分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集上微调之前已经适用高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约4%。YOLOv2引入了anchor boxes的概念,这样做的目的就是得到更高的召回率,YOLOv1只有98个边界框,YOLOv2可以达到1000多个。网络中去除了全连接层,网络仅由卷积层和池化层构成,保留一定空间结构信息。结果mAP由69.5%下降到69.2%,下降了0.3%,召回率由81%提升到88%,提升7%。尽管mAP下降,但召回率的上升意味着模型有更大的提升空间。同时利用Kmeans聚类,解决了anchor boxes的尺寸选择问题。

  图13 YOLO v2网络结构图

  5.3 YOLOv3

  YOLOv3[26]的网络结构如图14所示。YOLOv3借鉴了ResNet的残差结构,使主干网络变得更深(从v2的darknet-19上升到v3的darknet-53)。整个YOLOv3结构里面,没有池化层和全连接层的。在前向传播过程中,张量的尺寸变换是通过改变卷积核的步长来实现的。相应改进使YOLOv3 与SSD 相当的精确度下达到50FPS的检测速度,并在COCO test-dev 上mAP的最佳效果达到33.0%,与RetinaNet 的结果相近,速度快了3倍,但整体模型变得更加复杂,速度和精度相互制衡。

  YOLOv3改进之处:

  (1)多尺度预测,借鉴FPN,采用多尺度来对不同大小的目标进行检测。

  (2)更好的分类网络,从darknet-19到darknet-53。

  (3)分类器的更换。YOLOv3采用Logistic对目标进行分类,替换之前用Softmax的分类方法。主要考虑到像Open Images这种数据集,目标可能有重叠的类别标签,因此Softmax不适用于多标签分类。且Softmax可被独立的多个Logistic分类器替代,准确率不会下降。

  图14 YOLOv3网络结构图

  5.4 SSD

  Wei Liu等提出的SSD(Single Shot MultiBox Detector)方法[24]是对YOLO算法的改进,当用VOC2007 数据集测试300×300 的输入图像,取得59FPS (Titan X 的GPU),76.8%的mAP 好成绩。其网络结构如图15所示。SSD与YOLO主要不同在于以下几个方面:

  (1)采用多尺度特征图用于检测。SSD使用VGG16作为主干网络,并在VGG16的基础上添加了新的卷积层以获得不同大小的特征图,较大的特征图用来检测小目标,较小的特征图用来检测大目标。

  (2)采用卷积进行检测。YOLO最后采用全连接,而SSD直接采用卷积对不同的特征图进行提取特征。对于形状为m×n×p特征图,只需要采用3×3×p这样较小的卷积核得到检测值。

  (3)设置先验框。YOLO中每个单元预测多个边界框,但是都是相对于这个单元本身的,YOLO需要在训练过程中自适应目标的形状。SSD借鉴了Faster-RCNN的anchor理念,每个单元设置尺度或者长宽比不同的先验框。这样就减小了训练的难度,对那些重叠或近邻的物体有更好的预测效果。

  SSD算法检测速度较快,整个过程只需要一步。首先在图片不同位置按照不同尺度和宽高比进行密集抽样,然后利用CNN提取特征后直接进行分类与回归,所以速度较快,但均匀密集采样会造成正负样本不均衡使得训练比较困难,导致模型准确度有所降低。SSD对小目标的检测没有大目标好,因为随着网络的加深,在高层特征图中小目标的信息丢失掉了,适当增大输入图片的尺寸可以提升小目标的检测效果。

  图13 SSD网络结构图

  5.3 DSSD

  为了提高SSD对小目标的检测能力,Fu等人提出了DSSD(De-convolutional single shot detector)方法[25]。DSSD的核心思想:提高浅层的表征能力。首先将主干网络由VGG替换成更深的Resnet-101,增强了网络提取的能力,其次修改了预测模块,添加了类似于Resnet的shortcuts通道,将各层次之间特征相结合。DSSD的主要特点是增加了反卷积模块 DM(Deconvolution Module),如图13所示,DM模块与SSD中的卷积层网络构成了不对称的“沙漏”结构。DM模块与整个沙漏结构,更充分利用了上下文信息和浅层的特征,从而与SSD相比在小目标和密集目标的检测率上有很大的提高。但是由于Resnet-101网络层数太深,网络结构过于复杂,导致检测速度大幅度降低,DSSD检测513×513图像时速度只有6FPS。

  图13 DSSD网络结构图

  5.4 RetinaNet

  Lin等人[27]认为基于回归的目标检测方法精度不及基于候选区域的目标检测方法的根本原因是因为‘类别不平衡’导致的,基于候选区域的目标检测算法由于RPN网络的存在,过滤掉了大部分背景框,从而缓解了‘类别不平衡’的问题。而one-stage算法直接在生成的‘类别极不平衡’的bbox中进行难度极大的细分类,意图直接输出bbox和标签。而原有交叉熵损失作为分类任务的损失函数,无法抗衡“类别极不平衡”,容易导致分类器训练失败。因此,one-stage目标检测算法虽然保住了检测速度,却丧失了检测精度。

  Lin等人提出的RetinaNet[27]采用Focal Loss损失函数代替交叉熵误差,来抑制量大的类别所贡献的损失值。通过此种方法,使得训练过程中量少的类别的权重更大,从而缓解了‘类别不平衡’的问题。RetinaNet的网络结构如图14所示,采用ResNet+FPN网络提取图像的多尺度信息,再利用one-stage目标识别法+Focal Loss,这个结构在COCO数据集上的mAP达到了39.1%,速度为5FPS,精度超过同期所有two-stage的检测器。

  图14 RetinaNet网络结构图

  6. 总结和展望

  本文对基于深度学习的主流目标检测算法做了简要综述。对基于候选区域的two-stag和基于回归的one-stage目标检测算法的基本模型做了介绍和总结,分析讨论了各个算法的优缺点以及改进部分。通过对不同检测算法的分析和比较,结果表明one-stage目标检测算法结构简单,可直接对输入图像进行处理,检测精度较高并且检测速度快,可以实现实时性检测,但是对小目标、多目标物体检测精度较低;two-stage目标检测算法由于事先获取候选区域,能够充分学习到目标的特征,其检测精度和定位精度高,但是网络结构复杂,计算量大,检测速度较慢。目前基于深度学习的目标检测算法受到了学者的广泛关注和深入研究,并且几乎每隔几个月就有新的技术成果。但是,仍然存在许多难以解决的问题。下面是对面临的难题以及未来发展方向的一些讨论:

  (1)小目标检测[33]。目前算法对于小目标的检测能力相对较弱,但无人机航拍、卫星遥测、红外目标识别等领域对小目标检测有较强的需求。小目标图像往往面临着分辨率低、像素少和训练数据难以标记的问题。例如在无人机高清航拍过程中,即使照片分辨率已经达到4k级别,但由于小目标所占面积较小,导致难以标定和训练。

  (2)基于自动机器学习的检测。为特定任务设计最佳的骨干网络可以显着改善检测结果,但也需要大量的工作。因此,直接在数据集上学习骨干架构是一个十分有趣的研究方向。但是,大多数研究人员无法负担自动机器学习所需的计算资源(用于训练单个模型的100多张GPU)[34]。因此,开发一个低计算量的框架将是自动机器学习检测的重要突破点。

  (3)场景信息的融合。目前的目标检测算法都是检测前景信息,剔除背景信息,而背景信息有着丰富的上下文信息,能为前景信息提供更多线索。因此合理高效利用背景信息,将有益于算法性能的优化。

  (4)新兴的目标检测集。当前,MSCOCO是最常用的检测集。但是,MSCOCO只有80个类别,对于了解现实世界中更复杂的场景而言,该类别仍然太小。为了收集更丰富的分类信息,最近创建了一个新的基准数据集LVIS[35]。LVIS包含具有1000多个类别的164000张图像,并且总共有220万个高质量实例分割蒙版。LVIS将在不久的将来开启一个新的基准,以应对更具挑战性的分类、检测和分割任务。

核心期刊推荐