陈伟骏,周长胜,2,黄宏博,2,彭 帅,崇美英
(1.北京信息科技大学 计算机学院,北京 100101;2.北京信息科技大学 计算智能研究所,北京 100192)
目标检测一直是计算机视觉领域的研究热点。目标检测的任务是找到图像中感兴趣的目标并确定它们的位置和大小。在使用卷积神经网络之前,传统目标检测算法一般由学者手动设计特征。如SIFT(scale-invariant feature transform),HOG(histogram of oriented gradient),采用在图像上使用不同大小的滑动窗口截取图像再提取特征的方式来获得检测框的类别和位置。基于这种思想设计的检测器往往在检测速度和精度等性能方面难以适应实际应用需求。
由于Alexnet显著提升了图像分类的效果,卷积神经网络也被应用到目标检测领域。基于卷积神经网络的目标检测方法基本分为两个方向:基于候选区域的两步检测器和基于一体化卷积神经网络的单步检测器,前者的优势在于检测精度高,后者的优势在于检测速度快。两种类型的检测器由于自身特点适用于不同的应用场景,在学术研究和实际应用两方面发挥着重要作用。本文对近期基于卷积神经网络的目标检测算法进行了详细的调研,从基于候选区域的两步检测器和基于一体化卷积网络的单步检测器两个方面对目前目标检测算法进行了总结,并对主要方法的性能指标进行了比较分析,对未来可能的发展方向进行了展望。
基于候选区域的两步检测器一般通过预先选择的感兴趣区域(region of interest,RoI)进行特征匹配和回归来判断目标的类别和位置。在传统的目标检测算法中,为了能完整检测各种尺度的视觉目标,一般会以使用不同大小的检测框在图像上滑动的方式来检测是否存在参考目标。基于卷积神经网络的目标检测延续了这种思想,在两步检测器中第一步是获取候选区域,第二步是对候选区域的目标分类和坐标回归。
1.1.1 R-CNN
Girshick等[1]提出的R-CNN (region-CNN)是最早将卷积神经网络引入目标检测领域的检测方法。其首先在一张图片上用选择性搜索 (selective search)生成数千个候选区域,并统一缩放到指定大小,对于每个候选区域分别使用神经网络提取特征,然后使用SVM(support vector machine)和全连接网络分别进行分类和回归得到检测结果。R-CNN在PASCAL VOC[2]数据集上的检测精度高于传统的DPM(deformable parts model)算法,而且在速度上有了很大提升。在神经网络的设计中R-CNN将网络中的全连接层[3]数减少后发现性能并没有显著变差,而参数量却能大大减少,从而可以明显加快检测速度。
然而,对于实际应用来说,R-CNN仍然存在一些不足之处:
1)检测速度仍然较慢。一张图片甚至需要40 s左右,这主要是由于对选择性搜索生成的每一个候选框都用神经网络提取了特征,进行了很多重复运算。
2)由于将候选框缩放到固定大小,往往导致截取的图像形变较为严重,影响检测的精度。
3)训练复杂。候选区域提取、特征提取、分类都是分开操作,中间过程需要过多人工参与,中间数据的保存也需要耗费额外的存储空间。
R-CNN作为卷积神经网络在目标检测领域的初次尝试,其表现证明了深度学习在目标检测领域也是一个有研究价值的方向。
1.1.2 SPP-Net
在检测中选择不同的候选区域虽然能够适应一定的尺度变化,但是仍然难以从根本上解决多尺度的目标检测问题,而且候选区域缩放到固定大小容易导致目标的形变。He等[4]提出了SPP-Net(spatial pyramid pooling-net),使用空间金字塔池化的方法来解决图像处理时遇到的尺度和缩放问题。由于神经网络中全连接层的存在,网络的输入大小是固定的,当需要检测不同大小的目标时,需要进行一定的缩放来调整图像的大小,这会在一定程度上导致图片信息的丢失或者形变,影响检测精度。为了解决这个问题,SPP-Net在网络的卷积层和全连接层之间加入了空间金字塔池化层,通过设定不同的池化核大小,将不同尺寸的特征图统一组合池化到相同维度的输出,再传入全连接层进行后续计算。通过使用空间金字塔池化,可以将任意大小的特征图转换成固定大小的特征向量,从而无需在网络的输入端把候选区域缩放到固定大小,保持了原始目标的形状信息。另一方面,SPP-Net在提取图像特征时只需将整个输入的图片进行一次网络的前向计算,在卷积层的最后得到的特征图里可以通过映射的方式获取各个候选区域对应的特征区域,再通过空间金字塔池化转换为特定维度的特征向量。通过这种方式,SPP-Net大大缩短了前向计算的时间,在检测精度上也有一定的提高。
SPP-Net提出的空间金字塔池化思想不仅可以用于目标检测,在图像分类任务以及其他的任务上也具有很好的借鉴意义。很多研究工作以此为基础,出现了许多更适用于目标检测的新算法,Girshick[5]提出的Fast R-CNN就是其中具有代表性的一种。
1.1.3 Fast R-CNN
Fast R-CNN基于R-CNN的工作,引入了空间金字塔池化的思想,提出了两方面的改进。一个是提出了类似空间金字塔池化的RoI pooling(region of interest pooling),这种池化方式舍弃了空间金字塔池化中的多尺度操作,直接使用单一尺度的可变窗口大小池化方式来输出下层网络输入要求的特定尺寸的特征;另一方面,借鉴了SPP-Net的思想,对整个输入图像只进行一次前向计算,通过坐标的映射来截取输出特征图上与候选区域对应的特征;同时,Fast R-CNN改善了网络结构,使用Simonyan等[6]提出的VGG网络作为自己的特征提取网络架构,增强了提取特征的能力,并且使用softmax来代替原来的SVM对检测框分类,减少了中间环节,节省了额外的存储空间。
Fast R-CNN在R-CNN的基础上,对特征提取策略进行了改进,缩短了训练时间和检测时间,同时,由于引入了新的特征提取网络和RoI池化,在检测的精度上也有一定程度的提高。
1.1.4 Faster R-CNN
Ren等[7]提出的Fast R-CNN其检测速度有了很大提升,但是候选区域选取需要特定的算法预先处理,无法做到端到端的训练和检测,也影响了检测速度的进一步提升。一方面,使用选择性搜索来进行候选区域的提取耗时较多,另一方面提取的区域中依然有大量无用区域,造成了计算的浪费。Faster R-CNN对候选区域的提取方式进行了改进,使用了一种RPN(region proposal network) 网络来代替选择性搜索进行候选区域的提取,使目标检测从候选区域选取到特征提取以至最后的分类与回归都使用神经网络来实现,真正做到了端到端的训练和检测,减少了中间环节和人工干预。研究表明,当使用RPN来进行候选区域提取时,提取的区域数量从原先选择性搜索生成的2000个减少到300个时,检测的召回率并没有显著下降,说明RPN对于检测任务的目的性更明确。同时RPN可以与之后的分类和回归网络共享权重,无需单独训练一个特有网络,一定程度上也减少了参数量和计算量。RPN依据预设的各种尺度的锚框位置和坐标,在特征图上获取对应的特征,输出每个锚框的分类、回归和评分信息。所有锚框中评分最高的作为目标物体的候选区域进行下一步的分类和回归。
Faster R-CNN在Fast R-CNN基础上引入RPN结构,由RPN代替了选择性搜索等候选区域选取方法,在没有损失准确率的情况下可以大大减少检测时间,并且是第一个真正意义上基于卷积神经网络的端到端的目标检测算法,减少了中间环节的数据存储和人工干预,使模型训练和实际应用都变得更为简洁和便利,因而是一个具里程碑意义的目标检测算法。
1.1.5 R-FCN
Faster R-CNN实现了端到端的检测模式,而且实现了候选区域提取网络和特征提取网络的共享,但目标分类和目标位置回归的网络仍然使用的是全连接网络。全连接网络的神经元之间是稠密连接,需要较多的参数,因而这部分的参数量占据了整个网络参数的相当大一部分,过多的参数不便于模型的训练和泛化。同时,候选区域提取网络RPN和回归网络由于是不同类型的结构(卷积网络与全连接网络)而难以共享权值。为解决这些问题,Dai等[8]提出了R-FCN(region-based fully convolutional networks)方法。Dai在目标检测中使用文献[9]提出的全卷积网络,通过设计位置敏感得分图来获取目标的分类和位置信息,其中RPN和位置敏感得分图可以共享特征提取网络。且因其都是卷积网络,整个网络中的神经元连接全部是卷积网络连接,从而舍弃了全连接部分,这样就可以进一步提升整个模型检测速度。
1.1.6 Mask R-CNN
He 等[10]提出的Mask R-CNN是在Faster R-CNN的基础上进行改进的算法。通过引入Mask的概念,使模型框架可以用于实例分割任务。在目标检测方面,Mask R-CNN主要的改进是用RoI Align代替RoI池化。在RoI池化中为了获取特定尺寸的输出,当特征图的尺寸不能和对应输出的尺寸成整除关系时,往往会采取取整操作,这样往往会导致一定的定位偏差。Mask R-CNN提出了RoI Align,当坐标映射不为整数时,利用双线性插值的方法获取更为精确的定位结果,从而在一定程度上提升了目标检测的精度。RoI Align的提出让Mask R-CNN在目标检测方面的性能有一定提高,同时RoI Align的思想在实例分割的任务上也有一定的作用。
为比较上述两步检测器的检测性能,将这些检测算法在常用的PASCAL VOC2007、VOC2012、COCO[11]等目标检测数据集上的检测结果进行对比,各算法在不同数据集上的检测精度和检测速度如表1所示,表中数据分别取自文献[1,4,5,7-8,10]。从表中可以看出,使用全卷积网络的R-FCN在PASCAL上的精度最高,在COCO数据集上,R-FCN和Mask R-CNN都有较好的表现,其中Mask R-CNN效果更佳。从速度上来看,R-FCN由于使用了全卷积网络,速度的优势较为明显。而早期的R-CNN、SPP-Net和Fast R-CNN等算法在速度上要慢很多,Faster R-CNN在速度和精度上做到了较好的平衡。
表1 两步检测器性能对比
尽管两步检测器的检测速度已经比传统的目标检测算法有了提升,但是在投入实际应用时还存在一些限制。为了设计更快速的目标检测算法,学者们提出了基于一体化卷积神经网络的单步检测器。单步检测器与两步检测器的不同之处在于它舍弃了两步检测器中的先提取候选区域再进行检测的流程,直接使用一体化的卷积神经网络经过单一路线的前向计算得到检测结果,因而称之为单步检测器。一般说来其检测速度比两步检测器要快,精度会比两步检测器略低。
2.1.1 YOLO
最早出现的单步检测器是Redmon等[12]提出的YOLO(you only look once),对于一个N类目标检测的问题,它将输入图像分成数量为S×S的网格,整张图片输入神经网络后,经过计算最终得到的是S×S×(N+5×2)维输出,也可看成是S×S个N+5×2维向量,每个向量都对应了之前划分的每个网格的检测信息,其中N对应于每种分类的预测概率,5×2对应每个网格预测的2个检测框的x、y、w、h、c的预测信息,其中x、y、w、h表示检测框的回归信息,c表示当前网格是否包含物体中心的置信度。通过这种方式,实现了通过一个单一神经网络结构就可以得到检测结果的单步检测器模型。
YOLO的检测速度很快,但是检测精度相比两步检测器有一些差距。由于按照固定大小划分网格,且同一网格中预测的两个框默认为同一类别,当需要检测距离较近的物体时效果较差。当同一物体出现不常见的长宽比时检测准确率也有下降。
2.1.2 YOLOv2
尽管YOLO在检测精度上的表现比两步检测器要稍差,但是已经证明了设计快速的单步检测器的可行性。鉴于YOLO具有高速度低精度的特点,YOLO的作者在其基础上进行了一些改进,提出了YOLOv2[13],这些改进包括:
1)对每一个卷积层加入Batch Normalization[14];
2)使用更高分辨率输入在ImageNet上对预训练模型微调;
3)去掉全连接层,使用卷积层输出的特征图来表示预测结果;
4)使用K-means聚类生成特定尺寸的锚框,以锚框的坐标来代替网格的坐标;
5)修改损失函数,让网络预测坐标的偏移量而不是直接输出坐标值;
6)在最后的特征层通过层间直连来融合之前网络层的浅层特征;
7)采用多尺度训练策略[15];
8)提出darknet19作为主干网络。
基于以上改进,YOLOv2显著提升了检测精度,而且仍然保持了检测速度快的特点。同时,由于舍弃了全连接层,YOLOv2可以自行设定输入图像的分辨率,以适应不同的应用场景,根据需要在检测的速度和精度之间寻求平衡。
2.1.3 YOLOv3
YOLOv3[16]是在YOLOv2的基础上进一步改进的YOLO系列算法。YOLOv3使用了更深层的新主干网络darknet53代替之前的darknet19,另一方面引入FPN[17](feature pyramid network)结构将深层特征与浅层特征融合。darknet53在ImageNet上的分类准确率与ResNet-152[18]接近但是拥有更快的计算速度。通过引入多尺度预测的方式,设计3种尺度共9种大小的锚框输出,并且在对象分类时使用logistic来代替softmax,提供了对多标签对象的支持。
YOLOv3在mAP@0.5及小目标上具有不错的结果,但随着 IoU(intersection over union)的增大,性能下降,说明YOLOv3不能十分准确地与真实数据切合。但在对于预测框的精确性要求不高的情况下,YOLOv3具有明显的速度优势。
2.1.4 SSD
在视觉任务中,不同尺度的特征对于检测不同细粒度的目标往往具有不同的意义。基于这种先验,Liu等[19]提出的SSD(single shot multibox detector)使用不同尺度的特征图来做检测,大尺度特征图(对应较靠前的特征图)可以用来检测小目标,而小尺度特征图(对应较靠后的特征图)用来检测较大目标。
与YOLO一样,SSD将图片经过神经网络计算输出的特征图看作一个个网格,另外使用了类似Faster R-CNN中的锚框设计思想提出了先验框(default box)的概念。图片首先进入卷积神经网络计算,获取到输出的不同尺度的特征图,对于各尺度的特征图,分别设计先验框在特征图上选取特征框,再传入卷积神经网络计算输出不同尺度的检测结果。由于对于每种尺度的特征都设计了对应尺寸的先验框,因而基本可以覆盖各种形状和大小的目标。
SSD结合了YOLO和Faster R-CNN的优点,在检测速度上基本达到了与YOLO相当的水平,检测的准确率与Faster R-CNN接近,在小目标物体的检测上表现出了特别的优势。
2.1.5 RetinaNet
RetinaNet[20]的设计初衷是其作者发现在训练检测器的时候,往往使用交叉熵损失函数来作为置信度的计算损失,而在一个场景中有目标的前景类数量往往远少于无目标的背景类数量,而对于同样的交叉熵损失函数这两种类别中每一个样本返回的损失值都是均衡的,这就会大大影响训练的结果;另一方面,当预测值和真实值相差较大时,这种样本称为难例样本,当预测值和真实值相差不大时,这种样本称为简单样本,难例样本对于一个检测器的训练往往比简单样本更具有价值。所以提出了一种新的损失函数FL(focal loss),通过在交叉熵损失函数之前乘上权重,从而达到解决正负样本不均衡和增大难例样本的损失返回比重的目的。
一般的交叉熵损失函数(cross entropy, CE)为:
CE(pt)=-lb(pt)
式中:p为预测结果;y为数据的真实标签。
FL新损失函数为
FL(pt)=-αt(1-pt)γlb(pt)
式中αt和γ为设定好的权重参数。
通过FL函数可以看出,设计者通过在传统的交叉熵损失函数之前乘上两个权重的方式来解决样本平衡问题,其中αt通过在正负样本计算损失函数时乘以不同的权重来平衡样本,(1-pt)γ则是通过取预测结果的数值指数形式让难例样本在损失值返回时占有更大的比重。
RetinaNet没有设计新的检测器模式和方法,但其从训练本身入手,发现了检测器训练的根本问题,后续研究和一些其他模型的实验也表明FL对于其他检测模型的训练具有通用性。
2.1.6 RefineDet
为了兼顾检测速度和检测精度,Zhang等[21]提出了RefineDet,设计了两个相互连接的模块,一个是过滤锚框的Anchor Refinement Module(ARM)模块,另一个是负责分类和回归的Object Detection Module(ODM)模块,同时设计了Transfer Connection Block(TCB)来进行模块之间特征的传输以及类似FPN结构的特征融合。RefineDet先将锚框用ARM模块过滤一遍,删除其中大量的无用锚框,并且对其进行初次位置回归,再将回归后的锚框传入TCB经过转换作为ODM的输入,最后通过ODM输出检测结果。
RefineDet的ARM与RPN的作用类似,第一次调整了锚框的位置和尺度并且过滤掉不想要的锚框,ODM与SSD类似,并且引入TCB来作为多尺度融合的手段,在一定程度上做到了结合两步检测器和单步检测器的优点,在检测速度和检测精度上都达到了不错的效果。
对单步检测器在各个常用目标检测数据集上进行性能对比,各算法在不同数据集上的检测精度和检测速度如表2所示,表中数据分别取自文献[12,13,16,19-21]。从表中可以看出YOLO系列算法更加强调检测速度,与其他检测器相比精度略低。RefineDet和RetinaNet在COCO数据集上都有不错的表现,其中RefineDet在PASCAL VOC数据集上的效果也很出色。从检测速度来看,YOLO系列的各个检测器都保持了检测速度快的特点,而其他检测器当采用最佳检测精度的模型时,在检测速度上与YOLO都有较大差距。
表2 单步检测器性能对比
近年来,目标检测领域的研究进展不仅限于检测器算法流程的设计,还有一些其他方面的改进也在推动着目标检测领域的进步,如:
1)基础主干网络的更新。如AlexNet、VGG、ResNet、ResNext、darknet、FPN、FCN(fully convolutional networks)、ShuffleNet、DenseNet、Inception等网络结构的提出,增加了网络本身的特征提取能力,使检测算法的性能有进一步提升。
2)坐标框表示方式的改进。早期方法直接以框的坐标作为预测值,后续的改进方法使用相对于锚框坐标的偏移量作为预测值,提升了算法的准确度。
3)训练策略的改进。如在线难例挖掘[22]和一些有效的数据增广策略,也在一定程度上提高了算法的鲁棒性和准确度。
4)损失函数的改进。早期方法使用坐标回归的均方误差作为损失函数,后来FL、IoU loss[23]、GIoU(generalized IoU) loss[24]的提出也提升了坐标回归的准确度。
5)锚框的提出。早期使用选择性搜索作为候选区域的提取方法,而改用Faster R-CNN使用的锚框策略可以更加合理地提取候选区域,有效减少了计算量。
6)使用更适用于目标检测的非极大值抑制[25]策略在检测的最后阶段过滤重叠的冗余检测框,可以减少检测框的误识和漏识率。
近年也有一些新的目标检测算法提出抛弃用锚框进行候选区域的提取和坐标回归的思想(anchor free),如通过预测目标的角点或中心点来判断检测框的位置,也取得了不错的成果。在未来的一段时间内无锚框的检测器可能也将成为目标检测领域的研究热点之一。
本文主要介绍了将卷积神经网络引入目标检测领域的主流算法的工作原理以及各个算法的特点。在卷积神经网络出现之后,目标检测领域的发展迅速,并且每年都有新的检测算法被提出。尽管基于卷积神经网络的检测算法在性能上已经超越传统的检测算法如DPM、Viola-Jones等,但是传统算法中的一些设计思想可以借鉴到基于卷积神经网络的方法中,用来推动目标检测算法的研究[26]。在未来无论是基于图像的还是基于视频的目标检测都有广泛的应用需求。随着计算设备的不断升级和可用标注数据规模的不断扩大,新的目标检测算法性能也将有更大的提升,目标检测对于计算机视觉和人工智能的作用和贡献也将越来越突出。