高 杨,肖 迪
(南京工业大学 电气工程与控制科学学院,江苏 南京 211816)
目标检测主要可以划分成两个部分,一是找出图像或视频的中的感兴趣区域,二是输出检测目标和位置,总的来说就是从视频或者图像中找到目标物体并且定位。
现在目标检测的算法主要有两种,一种是基于手工特征的传统目标检测算法,另一种是基于深度学习的目标检测算法。传统的目标检测算法主要通过对目标提取手工特征,进行特征学习检测来实现目标检测。尺度不变特征变换(scale invariant feature transform,SIFT)[1]、方向梯度直方图(histogram of oriented gradient,HOG)[2]、局部二值化(local binary patterns,LBP)[3]等是人们根据自身经验所设计的经典的手工特征,它们在传统目标检测算法中有着优秀的表现。但在人们的研究中,基于手工特征的传统目标检测算法主要存在两个问题,一个是滑动窗口的区域选择方法会导致很多冗余窗口的出现,占用很多的目标检测时间,同时会影响最后的检测精度,另一个是这些手工特征大多数都是浅层特征,只能在某一方面或是特定的场景下表现出不错的效果,面对通用的目标检测时表现的不尽如人意,对于目标变化缺乏鲁棒性。卷积神经网络和深度学习推动目标检测领域取得突破性进展,使得目标检测不再局限于手工特征。深度学习在目标检测算法中主要衍生出两个方向,一方面是结合region proposal和CNN分类的“两步”式深度学习目标检测算法,主要代表为R-CNN[4]、FastR-CNN[5]、FasterR-CNN[6]。R-CNN算法在PASCALVOC2012测试集上的平均精度达到了53.3%,相比于传统目标检测方法在性能上提高了30%。随后在 R-CNN 的基础上进行不断的改进,产生了FastR-CNN、FasterR-CNN等目标检测算法。另一方面是基于回归的“一步”式深度学习目标检测算法,主要包括SSD[7]、YOLO[8]。这两个方面的目标检测算法在目标检测上有着不同的表现形式,基于region proposal的“两步”式深度学习目标检测算法可以有很高的检测精度,但由于候选框的生成需要耗费许多时间,导致这一类算法在检测速度上没有很好表现,基于回归思想的目标检测算法因为舍去了候选框这一步骤,这类算法在检测速度上有很好的表现,能达到实时的目标检测的效果,但在检测精度上表现的不如上一类算法。因此提升目标检测精度和检测速度是现在目标检测算法研究的主要方向。
目标检测算法性能在深度学习的帮助下有了很大的提升,准确率(precision)、召回率(recall)和平均检测精度(mean average precision)的表现越来越好。但是我们发现这些算法在小尺度目标上的检测表现的不是太好,主要因为一些小尺度目标分辨率低,背景复杂,通过卷积神经网络中的池化操作后,这些小目标的特征图会出现模糊和分辨率不足的情况。本文针对Faster R-CNN目标检测算法中小目标检测精度不高和定位不准确的问题,提出运用特征融合的方法来丰富特征图的信息,增强模型的检测精度,尤其是提升模型对于小目标的检测能力。FasterR-CNN运用RPN(region proposal network)来获得目标候选区域,比之前R-CNN系列目标检测模型有更快的速度和精度。在RPN网络中对于锚框进行新的设定,在特征融合基础上继续加强小目标的检测。本文通过运用多层特征融合增强特征表现形式,重新设定锚框增加小尺度的锚框,算法检测速度没有受到影响的基础上进一步提高模型对目标的检测精度,小目标定位不准确和识别困难的问题也得到了一定的改进。
卷积神经网络(convolutional neural networks,CNN)[9]是深度学习中重要的组成部分,是由人工神经网络发展而来,是一种深度前馈人工神经网络。在目标检测中主要用于特征提取部分,相比于手工特征不能很好地表达原始目标的特征信息,CNN可以通过优化算法获得提取特征的合适参数,从而获取目标更深层次的语义信息,有利于目标检测中的分类。CNN在特征提取方面那么的受欢迎,不仅仅因为CNN提取的特征具有很强的表征能力和鲁棒性,更因为CNN本身有着自己独特的优势:权值共享、局部感知野。CNN通过权值共享和局部感知野可以降低网络参数的数量,网络训练因此不会那么复杂。卷积层、激活层、池化层、全连接层等是CNN的主要内容,卷积层和池化层主要用于目标的特征提取,通过这两个结构进行特征提取后,特征分辨率减少但也增加了模型的不变性。在特征提取方面运用的卷积神经网络是VGG16[9],VGG16主要由13层卷积层和3层全连接层组成,卷积层主要采用了3*3、1*1 的卷积核,池化层则运用了2*2的最大池化来进行网络的降维,如图1所示。采用多个小卷积核的卷积层可以实现卷积核较大的卷积层的效果,还能够在网络中加入更多的非线性映射,使得网络有更强的表达能力。
图1 VGG16网络结构
在FasterR-CNN模型中,使用VGG16网络来用于关键的特征提取部分,该模型运用了VGG16网络的卷积层5的输出特征。只采用卷积层5的输出特征使得提取的特征具有丰富的语义信息,对于目标的分类有很好的提升效果,但卷积层5的输出特征在经过pooling操作后导致输出特征丢失了许多低层网络包含的细节信息,如目标像素信息、边缘信息等[10],对于一些像素较小的目标在经过4个pooling操作后,会使得小目标的特征图比原目标减少了1/16,也就是说一些像素小的目标的特征图的像素更小或者导致特征消失。因此,单单采用卷积层5的输出特征不仅会影响模型的目标检测准确度,而且对于小目标的检测准确度影响更大。本文拟运用多层特征融合的方法来增强模型的目标检测准确度,对于得到的多特征图既利用了低层网络的输出特征,还拥有高层网络的语义信息,使得目标检测的准确度得到了提升。
VGG16网络结构中主要包含5个卷积段,前面两个卷积段中每个卷积段是采用两个卷积层组合的形式,后面3个卷积段则是采用3个卷积层组合的形式。对于多层特征融合,采用合适的卷积层的输出特征进行特征融合是很重要的。卷积层1的特征图尺寸大,目标的特征数量也很多,对目标检测的贡献是不明显的,对于检测速度还会有影响,卷积层5的输出特征包含了丰富的语义特征,对于目标检测的影响很明显。因此,在进行多层特征融合时,舍去了卷积层1的输出特征,以卷积层5的输出特征为主,联合卷积层2、卷积层3、卷积层4进行特征融合研究,选择合适的多层卷积特征进行融合。VGG16每个卷积层提取出的特征进行融合的前提是需要每一层特征在融合前具有相同的分辨率,本文主要以卷积层4为基础,前面的卷积层需要进行下采样,卷积层5则利用反卷积来使得所融合的特征具有相同的维度。在进行特征融合之前,再利用局部响应归一化对特征图的输出进行处理,提高模型的鲁棒性,增强目标检测的准确度。本文设计了3种多层特征的融合方式,第一种是融合卷积层4和卷积层5,第二种是融合卷积层3、卷积层4和卷积层5,第三种是融合卷积层2、卷积层3、卷积层4、卷积层5。通过实验来选取合适的多层特征融合方式,提高模型的检测准确度。
候选区域的提取是目标检测的主要内容之一,FasterR-CNN的核心就是提出了RPN网络结构,将候选区域的提取和提取特征图的方法联系到一起,将候选区域的提取融入到卷积神经网络当中,相比于FastR-CNN,目标检测的速度加快了很多。本文将不采用conv5_3的输出作为RPN网络的输入,使用多层融合的特征图作为RPN网络的输入来提取候选区域。原RPN网络中锚框的设计是在特征图上产生9个锚框,这9个锚框包括3种不同的面积和3种不同的比例的预测框。锚框的设计可以根据需求改变,为了进一步提升目标检测的精度以及加强模型对于小目标的检测能力,对于锚框进行新的设定,采用了5种不同大小面积(322,642,1282,2562,5122),4种不同比例(1∶2,1∶1,2∶1,3∶1)。这样的设定融入了很多像素较小的目标以及增添了不同的比例,对于一些小目标的检测进行了提升。在候选区域提取过程中,会产生较多的候选框,对于重叠的目标检测候选框,利用非极大值抑制(non maximum suppression,NMS)[11]算法来剔除掉,得到最好的候选框。
1.4.1 算法描述
目标检测,实际上可以分为两个部分,一是找出图像或视频的中的感兴趣区域,二是输出检测目标和位置。针对Faster R-CNN目标检测算法中小目标检测精度不高和定位不准确的问题,提出多层特征融合的方法来丰富特征图的信息,提升Faster R-CNN的检测精度以及小目标的检测能力。在提取候选框环节,本文重新设定了锚框,设置了更多大小和比例,进一步加强模型对于小目标的检测能力。
1.4.2 算法步骤
算法流程如图2所示。算法具体步骤如下:
(1)输入目标图像,利用深度卷积神经网络提取每一卷积层目标特征;
(2)利用多层特征融合的方法融合不同卷积层的特征,生成融合特征图;
(3)将融合特征图作为RPN网络的输入进行候选区域提取,设置新的锚框增强不同目标的检测性能,生成目标检测候选框;
(4)运用NMS取出重叠的检测候选框,寻找最优的候选框;
(5)将融合特征图和获得的候选框送到RoI pooling层;
(6)通过RoI pooling层之后送入后续网络进行目标分类和判别。
图2 基于多层特征融合的小目标检测算法流程
为了验证本文算法的有效性,本文采用PASCAL VOC 2007[12]测试数据集来对设计的3种融合方式进行实验。VOC 2007数据集中包括20类目标,这些目标都是我们日常生活中常见的,也具有许多生活中的实际场景,其中也有现在一些目标检测算法不容易解决的小目标,综上考虑选择了PASCAL VOC 2007测试数据集。本文算法所采用的运行环境为操作系统64位Ubuntu14.04,运用的深度学习框架为TensorFlow框架,所用编程语言是Python。在目标检测算法中,通常采用的评价指标有准确率(precision)、召回率(recall)、AP(average precision)、mAP(mean average precision)、FPS(frame per second)等。本文提出的算法是保证FasterR-CNN检测速度基础上提升目标的检测精度,因此本文采用的评价指标为mAP和FPS。mAP是种类不一样的目标的AP取平均值,其定义如式(1),式(2)所示。评价指标FPS主要代表目标检测模型的检测速度
(1)
(2)
为了验证本文所提方法的有效性,对3种不同的融合方式进行实验,将3种不同的融合方式与FastR-CNN和FasterR-CNN作比较。通过与优秀的目标检测算法比较,验证得出多层特征融合对于目标检测的准确度是有所提升的,再从3种不同融合方式中选择最适合的多层特征融合方式。不同特征融合方式的目标检测精度和速度实验结果见表1。
表1 基于PASCAL VOC 2007的目标检测精度和速度
由表1可知,多层特征融合可以有效地提升目标检测的精度,不同的融合方式对于检测精度的影响不同。卷积层4与卷积层5相融合的mAP比FastR-CNN提高了4.1%,比检测精度已经很高的FasterR-CNN提升了0.9%。另外两种融合方式在检测精度上提升的更多,卷积层2、卷积层3、卷积层4和卷积层5的融合在精度上与卷积层3、卷积层4、卷积层5相差不多,但前一种融合方式检测速度受影响较大,卷积层3、卷积层4、卷积层5在检测速度影响不大情况下提升了更多的检测精度,不同层特征融合可视化如图3所示,特征融合可视化让我们可以更好地去了解多层特征融合,从图中不仅可以看出特征映射的响应强度,而且对于目标的位置信息也有良好的表现。
图3 特征融合可视化
通过对于每个种类的具体分析,发现多层特征融合在一些形态多样、较小目标检测上提升了更多的检测精度,如椅子、船只和植物等,具体见表2。
由表2可知,多层特征融合在小目标的检测上比原模型表现的优秀的多,植物这一类别是原有优秀算法表现最差的一个类别,进行多层特征融合之后,植物这一类别的精确度提升了将近10%,多尺寸,多形态的椅子、瓶子和船只等在检测精度上都有了很大的提升。因此多层特征融合和锚框的重新设定可以使目标检测有更高的精度,在一些形态多样,尺寸多样的小目标上表现的更为突出。
表2 基于PASCAL VOC 2007中小目标的检测精度
通过对于实验结果的分析,3种多层特征融合方式都可以一定程度上提升目标检测的精度,但第一种融合方式在精度上提升不是很明显,第三种融合方式在精度上提升了很多,但检测速度受到了一定的影响。本文得出卷积层3、卷积层4和卷积层5三层卷积特征相融合能够在FasterR-CNN基础上有效地提高检测精度且不影响目标检测速度。因此基于FasterR-CNN改进的目标检测算法在多层特征融合方面选择卷积层3、卷积层4和卷积层5的卷积特征,锚框的设定增添了不同的面积与不同的比例。为了比较两种算法的性能,选取了一些代表性的实验结果,FasterR-CNN目标检测算法实验结果如图4所示,本文提出的改进算法如图5所示。对比图4(a)和图5(a),本文算法能够检测出更远处的目标小车,相比于FasterR-CNN算法提升小目标的检测能力,从图4(b)和图5(b)可以看出对于椅子一类形态多样的目标,本文算法有着更好的检测效果,总体的检测精度也有很好的提升,图4(c)和图5(c)则可以看出本文提出的基于特征融合的小目标检测算法在目标定位上效果稍好一点。仔细分析后可以得出,基于FasterR-CNN的目标检测算法在运用多层特征融合的方法后,不仅目标的检测精度得到了提升,而且对于小目标的召回率也有不错的提升,锚框的新设定增强了目标定位问题。通过完整的实验,本文提出的基于改进的 FasterR-CNN 目标检测算法的mAP为75.4%,相较于FasterR-CNN提高了2.2%,有效提升了FasterR-CNN的检测精度,对于小目标的检测能力有着明显的提升,目标的定位效果也有很好的改善,在目标检测速度上没有明显的影响。因此认为本文的改进算法的综合性能比原有算法有着明显的提升。
图4 Faster R-CNN算法
图5 本文算法
本文针对Faster R-CNN目标检测算法中小目标检测精度不高和定位不准确的问题,运用多层特征融合和锚框的重新设定来增强目标检测的精度。利用多层特征融合生成融合特征图,使得到的特征图具有丰富的信息,有利于目标的检测,对于锚框的重新设定能生成更多的候选框,有利于不同尺寸的目标检测。本文提出的基于多层特征融合的小目标算法在不影响检测速度的情况下能够有效地提高目标检测精度。如何在高检测精度基础上提高目标检测速度将是我们之后研究的方向。