冯 媛,李敬兆
(安徽理工大学 电气与信息工程学院,安徽 淮南 232001)
近年来深度学习相关理论快速发展,优秀的神经网络模型层出不穷,基于深度学习的目标识别模型在准确性和实时性方面都明显优于传统的人工设计特征的检测算法[1]。深度学习也被广泛应用到行人检测中,并逐渐成为计算机视觉领域的研究热点之一[2]。
传统的行人检测方法大多集中在人工特征的提取和分类方面,但此类方法存在特征维度高、泛化能力差等缺点,对传统方法的改进通常是建立在梯度直方图(HOG)[3]、Haar特征、局部二值模式(LBP)[4]等基础上。
目前,目标检测领域的深度学习方法主要分为两类:区域提名算法和端到端算法。区域提名算法通常是结合候选区域(region proposal,RP)和卷积神经网络来进行目标检测,代表性的网络有R-CNN系列[5-7]等;端到端算法,代表性的网络有SSD[8]、YOLO系列[9-11]。相较于区域提名算法,SSD和YOLO算法舍弃了RP阶段,牺牲了一定的检测精度,但提高了检测速度。何恺明等提出了ResNet[12],引入新思路进行神经网络优化。DenseNet[13]在ResNet的思想上再做创新,使各层间连接更加紧密,其网络结构不复杂,却非常有效。
近年来,神经网络的轻量化一直是业界的发展趋势,YOLO系列虽然具有较好的检测准确率和实时性,但其对电脑的GPU等硬件配置要求较高。因此,本文提出了一种融合DenseNet和YOLOV3的行人检测方法,改良后的Dense-YOLO网络拥有更少的卷积层、更快的检测速度以及较好的检测精度,更适合应用在行人检测的场景中。
现有的YOLO系列神经网络模型虽然在目标检测方面已达到了较好的效果,但是面对行人检测场景,YOLO系列神经网络并不完全适合,所以需对YOLO算法进行改进,使其更适合行人检测工作。目前有研究者提出基于Faster-RCNN的行人检测方法,该方法通过聚类和构建区域候选网络(region proposal network,RPN),快速生成可能感兴趣的框,从而将含有行人的区域提取出来[14]。也有通过改进Tiny-YOLO的网络结构来实现行人检测的轻量化模型[15]。针对行人检测,本文提出了一个融合了YOLOV3和DenseNet的轻量化行人检测算法,利用卷积神经网络提取低层图像特征,并调节IOU(交并比)和学习率的阈值来改善行人重叠或遮挡的问题,通过k均值聚类算法 (k-means) 提取可能含有行人的区域。针对画面中行人大小不一,尺寸不同的情况,利用特征金字塔网络(feature pyramid networks,FPN)[16]来做高低层的行人的特征融合,不同尺寸的行人特征图对应不同大小的行人会有更好的预测效果。较小的特征图对尺寸较大的行人会有较好的预测能力,较大的特征图对尺寸较小的行人或者是被遮挡的行人具有更好的预测能力。再利用Dense Block的结构对行人检测的网络进行轻量化完善,提升行人检测网络的实时性,改进后的模型结构如图1所示。
图1 Dense-YOLO结构
为了让本文的行人检测方法能够获得更全面的行人特征,使特征提取的效果更好,从输入图像这方面着手,本文做出以下两点改进:
(1)在卷积神经网络训练时,对部分输入图像的大小进行随机变换,放大倍数区间为(0.25,2)。同时,为了让行人检测模型的鲁棒性更好,采取了对图片随机添加偏移量的操作。为了让行人检测模型适用于任何光照强度的情景,减少图片明暗度对行人检测结果造成的影响,本文额外进行了图片随机旋转和随机扭曲HSV颜色空间模型的操作,HSV是一种较为直观的颜色模型,在许多图像编辑工具中应用广泛。HSV模型中颜色的参数分别是:色调(hue,H),饱和度(saturation,S),明度(value,V)。进行随机扭曲HSV,如图2所示,在灰度图像下,标定框里的行人颜色发生了变化,这就相当于改变了行人的明暗程度,不仅增强了数据集的丰富度,也使神经网络具有更好的泛化性,后续实验结果表明,此举有效提高了行人检测的准确率和召回率。
图2 随机扭曲HSV颜色空间模型
(2)据现有的行人检测实验研究表明,图像中行人身高和宽度通常为3∶1的定值,也就意味着行人的横向特征比纵向特征表达少[17]。因此,本文中采用9∶16的输入图片的长宽比,与原网络输入图像大小416×416相比,增加了图像的宽度,增强了行人横向特征的表达,丰富了行人特征信息。
值得关注的是YOLO系列借鉴了Faster R-CNN的思想,在网络中使用了anchor boxes,用k-means的思想来确定初始候选框。YOLOV2和YOLOv3初始候选框的个数分别是在PASCAL VOC数据集和COCO数据集使用聚类算法确定的,YOLOV2有5个anchor boxes,YOLOV3有9个anchor boxes。YOLOV3结合FPN的多尺度融合思想,将9个anchor boxes平均分到3个尺寸的网络层实行预测。COCO以及PASCAL VOC数据集含有的物体种类很多,因此原有anchor boxes的参数也不太适和应用于行人检测。为了对行人的定位进行更准确的预测,本文在INRIA行人数据集上进行k均值聚类,根据该数据集的大小和行人的特征,确定最优的anchor boxes的参数。传统的k-means测距通常用的是欧氏距离算法,但这样会出现“大框优势”的问题,即较大的边界框比小的边界框会产生更大的距离误差。IOU是产生的候选框与原边界框的重叠率,且IOU的大小与原边界框尺寸无关,因此使用IOU参与距离计算可以避免这一问题,计算距离如式(1)所示,b表示k均值聚类的结果,c表示聚类中心
D(b,c)=1-IOU(b,c)
(1)
通过k值和平均IOU的关系,选择最适合网络的k值,二者关系如图3所示。
图3 平均IOU的k曲线
如图3所示,k=6是曲线的斜率慢慢减小的点,为了加快网络的识别速度,Dense-YOLO网络会在两个尺度的预测层上进行预测,可采取每层分配3个anchor boxes的策略,因此采用k=6的聚类结果。
Dense Block这一概念来自于CVPR2017最佳论文所提出的DenseNet。在传统的卷积神经网络中,神经网络的层数通常等于连接的数量,但在DenseNet中,其每一层的输入都是来自前面所有层输出的并集,层与层之间的连接变得更紧密。DenseNet的网络比传统的卷积神经网络宽度窄很多,这归功于它的Dense Block中的子模块Bottleneck layer和Translation layer结构。DenseNet提出K值的概念,K代表网络成长率(Growth rate),它被用来控制网络的宽度。Dense Block结构如图4所示。
图4 Dense Block结构
如图4所示,假设x0是输入,H1的输入是x0,H2的输入是x0和x1(x1是H1的输出),以此类推。具体概念体现在式(2)中,[x0,x1……xl-1] 表示将0到l-1层的输出特征图做通道的合并,Hl包括BN,ReLU和3×3的卷积,经过Hl处理之后输出的特征图的数量都为K,便于控制网络的宽度(特征图的通道数)。如果神经网络有l层,那么第l层有K(l-1)+K0个输入特征图,K0是输入图片的通道数
xl=Hl([x0,x1……xl-1])
(2)
因为DenseNet的层层紧密连接,当网络层数加深时,特征图的通道数也会变得很大,即特征图数量变多。因此在每个Dense Block的3×3卷积前面都加入了一个1×1的卷积操作,即Bottleneck layer,这个操作不仅是为了减小输入的特征图的数量,也是为了可以融合各个通道特征,从而达到降维和减少计算量的目的。另外,为了进一步压缩参数,DenseNet在每两个Dense Block之间又增加了1×1的卷积操作,即Translation layer,调节参数reduction(范围是0到1),通常默认为0.5,如此一来传递给下一个Dense Block的时候通道的数量就会减少一半,在一定程度上减少了参数量。由于这几个机制的加入,使得DenseNet的每个卷积层的输出特征图的数量都很小。这种紧密连接的方式使得特征和梯度的传递更加有效,减轻了梯度消失的情况,网络也变得更加容易训练。
本文在YOLOV3的基础上,将YOLOV3原有的主网络DarkNet换成DenseNet,不但减少了神经网络的层数,而且达到了降低网络参数数量的目的,将YOLOV3原有的残差模块替换成Dense Block。
结合图5简述网络的训练策略,以输入尺寸为480×270的图片为例,先经过一层卷积层,图片大小不变,通道数变为64。激活函数选用Leaky Relu是因为其在负轴有一个小斜率倾斜,当激活函数进入负半轴时依然能令神经元继续保持学习的状态。经过最大池化(max polling,MP)层,MP对特征图进行(270/3,480/4)的处理,在保留主要特征的同时还可以起到降低参数数量的作用。之后进入DB(dense block)层,对于模块中每一层的输入特征图的层数是不断增加的,每次增加的个数设为K,为了网络不变宽,K值不宜过大,本实验中取K=32。 但仅凭K的控制网络宽度还不够,随着Dense Block模块深度的加深,由于层层紧密连接,后面的输入特征图的维度会越来越大。为了解决这个问题,在Dense Block模块中加入了Bottleneck模块,采用1×1卷积进行降维,输出维度都被降到4K维,可以起到降维减参的功效。Translation Layer模块再次采用1×1卷积做降维,默认输出特征图的数量为上一个DB模块的输出特征图的一半,运算量和参数再次被减少。
图5 网络流程
结合FPN的思想,基于神经网络的一贯特性,小尺度特征图可以更好表征大目标,大尺度的特征图可以更好表征小目标。为了对不同大小的行人检测的效果更好,在Dense-YOLO的输出端分为两个尺度做预测。在经过第一个Dense Block之后的特征图大小为30×30,这作为第一个尺度特征图输出。之后再经过两个Dense Block后,得到大小为15×15的特征图,其特征通道数为15。其中15×15对应将输入图像分为15×15个栅格,共设置6个预测框,两个尺度的各个栅格都要预测3个边界框,各个边界框都需要预测x、y、wide、hight、置信度以及框内是n类待检测物体中哪些类的条件概率。
本实验中只存在行人这一目标,为了加快检测速度,可以不用显示行人标签,即n=0,直接标出预测框。所以每一个栅格对应的特征维数是3×(4+1)=15,最后Reshape成(15,15,3,5)的特征向量,再用非极大值抑制算法(non-maximum suppression,NMS)去除多余(交叉重复)的窗口,找到最佳行人检测位置。
本实验中训练用到的数据集皆为国际公认的行人检测数据集:INRIA数据集和Caltech数据集。目前使用度最高的行人检测数据集就是INRIA数据集,其中虽然包含了正负样本,但是本实验中对于神经网络的训练只是用数据集中的正样本,该数据集清晰度较高,行人拍摄情况多样化,存在行人遮挡情景下的图片,平均像素为279左右,其训练数据集中有正样本614张(包含2416个行人),测试数据集有正样本288张(包含1126个行人)。Caltech数据集是由加州理工等高校组成的视觉小组整理的,他们从10小时的车载摄像头视频中选取了137 min(约250 000张图像),2300个行人,作者标注了350 000个边界框,Caltech数据集很好的标注了行人被遮挡情况,这有利于神经网络对行人遮挡问题做出改进,本文挑选了Caltech数据集中行人较多的2000张图片进行训练。实验在INRIA数据集和Caltech数据集混合数据集中进行,图6展示了实验中测试集中部分测试结果的图片。
图6 实验测试结果
本文采用深度学习架构YOLOV3和DenseNet搭建实验运行环境,并配置CUDA 9.2环境进行GPU并行加速计算,本文的实验平台软硬件配置见表1。
表1 实验平台软硬件配置
深度学习的神经网络结构的搭建只是第一步,超参数的选择对于神经网络的成功起到至关重要的作用,合理的设置网络超参数,可以达到更好的训练神经网络模型的目的。设置学习率、动量系数、迭代次数等参数能够优化超参数,让神经网络达到更好的预测效果。多次实验后,本文选取网络训练效果最好的一组值为最终的超参数。训练时模型的初始学习率设为0.01,学习率为0.1,权值衰减系数为0.0010,动量系数为0.9,成长率(K)设为32,批大小为32,epochs为10 000。为了增强网络的泛化性,在网络训练时还会进行随机调整图片大小、将图片旋转某些角度以及随机明暗度调节等操作。
2.3.1 强化行人特征图像处理模块测试
在行人测试数据集上,将加入强化行人特征图像处理模块的网络模型和未加入该模块的网络模型进行测试与比较,实验结果如表2所示,与不加该图像处理模块的方法相比,本文提出的方法使mAP提高了3.87%,召回率提升了3.39%。
表2 强化行人特征处理模块的测试结果
2.3.2 行人检测网络的轻量化实现
为了验证Dense-YOLO网络模型的轻量化,从模型的计算需求量、训练参数的数量、网络模型的大小3个方面与YOLOV3和Tiny-YOLOV3网络进行比较,具体的比较结果见表3。Dense-YOLO网络模型的计算需求量是YOLOV3的1/118,训练参数数量是YOLOV3的1/120,模型大小是YOLOV3的1/107,与YOLOV3的轻量化模型Tiny-YOLOV3相比,Dense-YOLO在实现网络轻量化方面也有很大进步。
表3 网络模型规模比较
2.3.3 速度测试
本实验采用的检测速度的评判标准为FPS(frames per second),FPS是图像领域中的定义,是指画面每秒传输的帧数,FPS值反映了保存以及显示动态视频的信息数量。FPS越大,表示每秒钟的帧数越多,所显示的视频就会越流畅。为了满足行人检测的实时性要求,FPS的值越大越好。将DenseNet与传统行人检测算法HOG+SVM、YOLOV3以及轻量化神经Tiny-YOLOV3等方法比较,具体的比较结果见表4,Dense-YOLO的检测速度比HOG+SVM方法快35倍,比Tiny-YOLOV3快1.75倍,比YOLOV3快8倍,结果表明,Dense-YOLO的实时检测速度实现了大幅提升。
2.3.4 精度测试
mAP(mean average precision)的定义式如式(3)所示,其含义是h类目标物体的平均精度的均值
(3)
表4 目标检测速度各方法对比实验结果
召回率(Recall)的定义如式(4)所示,其表示测试数据集的全部目标(NAll)中有多少被正确检测到,正确检测到的比例占多少
(4)
具体的测试结果见表5,Dense-YOLO的mAP相较于YOLOV3提升了2.91%,相较于Tiny-YOLOV3的mAP提升了29.09%。Dense-YOLO的召回率相较于YOLOV3提升了3.93%,相较于Tiny-YOLOV3提升了15.68%。YOLOV3由于主网络是DarkNet,存在着网络层数过多,容易造成梯度消失等问题,导致网络学习过早停滞;Tiny-YOLOv3又因为网络层数过少,行人特征学习的不够充分,而Dense-YOLO 在网络层数和准确率上做到了更好的平衡。
表5 不同网络模型测试的结果
本文基于YOLOV3和DenseNet提出一种轻量化的行人检测模型,在公开行人检测数据集INRIA数据集以及Caltech数据集上对网络模型进行了训练,并通过对输入神经网络的图片进行随机变化处理,增强网络的泛化性,利用维度聚类分析选择合适的k值,改进网络结构,提出了一种基于Dense-YOLO网络的行人检测模型。
(1)与现有的行人检测算法和YOLO系列算法相比,Dense-YOLO网络更为轻量化,在保证一定准确率的前提下,其具有更快的检测速度,提高了行人检测的实时性,借鉴特征金字塔的思想,Dense-YOLO网络对不同尺寸的行人也具有更好的检测效果。
(2)通过Dense-YOLO与复杂网络的对比实验可以看出,Dense-YOLO网络提升了目标检测速度,但由于行人检测中依然存在遮挡、对小目标行人检测效果较差等问题。如何在保证高速检测的前提下对网络的准确率以及召回率进行提升,将会是下一步研究的重点。