基于卷积神经网络的实时车辆检测
2021-03-09易国洪洪汉玉陈思媛
金 旺,易国洪,2,洪汉玉,陈思媛
1.武汉工程大学 计算机科学与工程学院,武汉430205
2.武汉工程大学 智能机器人湖北省重点实验室,武汉430205
3.武汉工程大学 图像处理与智能控制实验室,武汉430205
随着汽车的越发普及,城市交通事故愈发频繁,自动驾驶技术能够有效地避免交通事故发生。车辆检测是自动驾驶中的一项关键技术,快速准确的车辆检测在减少交通事故上起着重要作用。
由于深度学习的快速发展,特别是卷积神经网络的出现,越来越多的深度学习模型应用于目标检测任务。根据检测框的不同,目标检测算法可分为两类,分别为基于候选区域生成的检测算法和基于回归的检测算法。基于候选区域生成的算法主要有R-CNN[1]、SPPNet[2]、Fast R-CNN[3]、Faster R-CNN[4]、R-FCN[5]。RCNN首次将深度学习应用于目标检测任务,利用选择性搜索方法生成候选框,将每个候选框中提取的特征输入到SVM中进行分类。R-CNN相较于传统检测方法性能有很大的提升,但是R-CNN要求输入图像的尺寸固定,且候选框的生成需要大量计算导致检测速度慢。SPP-Net引入了金字塔池化层,解决了图像输入尺寸固定的问题,但是SPP-Net难以进行网络参数微调,限制了检测精度的提升。Fast R-CNN使用感兴趣区域池化层替代金字塔池化层,同时使用多任务损失的端到端训练,解决了SPP-Net整体训练困难的问题。但是Fast RCNN仍然使用选择性搜索方法生成候选框,使得检测速度仍然很慢。Faster R-CNN提出了区域生成网络用于候选框的生成,极大地提高了候选框生成速度。但是Faster R-CNN仍然未能达到实时检测的要求。R-FCN提出位置敏感池化层,相较于Faster R-CNN检测速度更快,但是R-FCN同样未能实现实时检测。基于候选区域生成的算法虽然在检测精度上有着良好的表现,但在检测实时性上仍面临巨大的挑战。
基于回归的算法主要有YOLO[6]、SSD[7]、YOLOv2[8]、YOLOv3[9]。基于回归的方法直接通过回归得到目标的位置和分数。这种方法不需要生成候选区域,极大地减小了计算量,从而提高了检测的速度。YOLO最先使用回归的方法进行目标检测,该方法在GPU上检测速度达到45 f/s,真正意义上实现了实时检测。但是YOLO存在定位误差,且对于重叠物体以及小物体检测效果差。SSD通过预设先验框以及采用多尺度特征进行检测,提高了对于尺度变化较大的物体的检测能力。但是SSD的多尺度特征均来自于最后的全连接层,没有考虑卷积层之间的联系。YOLOv2通过使用预设先验框、批量标准化以及多尺度训练等系列优化手段,来提高算法的检测精度。但是YOLOv2在检测精度上相较于SSD并未得到提高。YOLOv3改变了基础网络结构,使用残差网络提取特征,构建特征金字塔网络实现多尺度预测,在检测精度上得到极大的提高。但是YOLOv3对于遮挡物体检测性能不佳,对于尺寸变化较大的目标存在漏检的问题。同时,YOLOv3网络模型参数规模较大,计算成本高。
目前已有很多基于深度学习的车辆检测算法,史凯静等人[10]通过改进FAST R-CNN算法来检测道路前方的车辆;阮航等人[11]提出了一种基于加权特征映射的卷积神经网络模型;王得成等人[12]提出一种基于卷积神经网络并融合了彩色与深度图像的车辆检测算法;通过改进YOLOv3来实现车辆的检测[13-15]。但是这些车辆检测算法存在以下问题:(1)尺度敏感。对于尺度变化较大的车辆容易出现误检漏检问题。(2)重叠车辆检测效果差。(3)模型结构复杂,训练较为困难,检测速度过度依赖于计算资源。
针对上述问题,本文以深度残差网络作为骨干网络,在主网络后增加卷积层与主网络卷积层共同构建多尺度特征金字塔,以解决尺度敏感的问题;使用软化非极大抑制线性衰减置信得分,解决车辆遮挡的问题;对批标准化层中的γ系数施加正则化,裁剪特征通道,缩减参数规模,精简网络结构,使网络模型更易训练。实验结果表明,本文所提的方法有效降低了模型的参数量,显著提高了对于复杂场景中尺度变化较大车辆以及遮挡车辆的检测效果。
1 车辆检测模型
本文提出的车辆检测网络结构如图1所示。该方法以车辆图像作为输入,同时输出车辆的位置和置信得分。首先,使用深度残差网络提取车辆特征;然后将高层特征图上采样与浅层特征图共同构建特征金字塔网络,用于多尺度预测;最后将车辆预测框使用软化非极大抑制线性衰减置信得分,得到最后的车辆检测结果。同时,在训练过程中,对每个特征图进行正则化约束,对网络进行裁剪,从而精简网络结构,缩减参数规模。与现有车辆检测方法相比,本文方法更易训练,针对尺度变化较大目标以及遮挡目标具有较好的检测效果。
图1 车辆检测网络结构图
1.1 深度残差网络提取车辆特征
残差学习[16]能够很好地解决深度神经网络随网络层数加深而导致网络退化的问题,深度残差网络能够提取更为丰富的特征。受残差学习的启发,本文使用残差模块作为特征提取网络的基本模块。残差网络由一系列残差模块组成,每个残差模块可分为映射部分和残差部分。残差块表示方式如式(1)所示,xi表示第i个残差块的输入,f(⋅)表示中间卷积输出,xi+1表示第i个残差块的输出。
残差块结构如图2所示,残差块包含三个卷积层,卷积层间使用relu激活函数,第一个1×1卷积操作用于通道降维,第二个1×1卷积操作用于维数恢复。这种做法能够有效地减少计算量和参数量。
图2 残差块结构图
深度残差网络结构如表1所示。将分辨率为512×512的图像输入到深度残差网络中,首先使用32个尺寸为3×3的卷积核对图像进行过滤,得到图像初始特征图。然后使用步长为2的卷积对特征图进行降采样,接着将降采样后的特征图分别经过1、2、8、8、4、4、4的残差块,分别得到尺寸为128×128、64×64、32×32、16×16、8×8、4×4的特征图。这样,浅层特征图感受野小可用于小物体的检测,高层特征图感受野大可用于大物体的检测。
表1 深度残差网络结构
1.2 特征金字塔多尺度预测
特征金字塔网络[17]通过将高层语义信息与浅层位置信息融合得到多个尺度不同的特征图用于目标检测,能够很好地解决车辆尺度变化较大导致检测效果较差的问题。在深度残差网络中,得到了6种尺寸的特征图。将尺寸为4×4的特征图分别进行2倍、4倍、8倍、16倍上采样得到8×8、16×16、32×32、64×64尺寸特征图,然后将上采样得到的特征图与深度残差网络中对应尺寸的特征图进行融合,得到5种尺度的信息融合特征图,并形成5个检测分支,用于检测不同尺寸的车辆。
1.3 软化非极大抑制遮挡检测
传统的非极大抑制方法直接将重合度大于某一阈值的预测框的置信得分置为0,而在真实场景下获得的车辆图片往往存在车辆重叠的情况,这样使用普通的非极大抑制就会造成车辆的漏检。本文使用软化非极大抑制方法[18],利用高斯加权平滑函数,通过线性衰减置信得分来降低重叠车辆的漏检率。现有的目标检测算法大多使用预测框与真实框的交并(Intersection over Union,IoU)来反映预测框与真实框的重合度。然而当预测框与真实框没有相交时,对应的IoU为0,根本无法反映预测框与真实框的重合度。为了解决这一问题,本文使用DIoU[19]代替IoU,设定预测框为A及真实框为B,A和B的最小凸集为C(包含A和B的最小包围框),IoU和DIoU的计算方法如式(2)和式(3)所示:
式(3)中,bgp和bgt分别表示预测框和真实框的中心点,ρ(⋅)表示两中心点之间的欧式距离,c表示最小凸集C的对角线距离。这样,得到了软化非极大抑制的计算方法如式(4)所示:
式(4)中,si表示第i个检测框的得分,bm表示得分最高的检测框中心点,bi表示第i个检测框的中心点,σ为常数。
1.4 网络裁剪
目标检测算法往往利用深度神经网络来提高算法的检测精度。而深度神经网络通常模型结构复杂,参数量大,难以训练,且网络在训练过程中需要庞大的计算资源。对网络进行裁剪能有效地减少计算资源,精简网络结构,缩减参数规模。以数据驱动的通道裁剪相较于层级裁剪更为灵活,可以获得更好的裁剪质量。
在卷积神经网络中,通常在卷积层后使用批标准化进行特征缩放。批标准化可表示为式(5)的形式,γ和β为可学习参数,一个特征通道对应一组(γ,β)。当γ较小时,该通道特征对最终检测结果影响较小。通过将较小γ所在特征通道进行裁剪,从而实现模型的通道级裁剪[20]。
对特征通道的裁剪,通常的做法是直接设置裁剪阈值,当裁剪因子小于裁剪阈值时,将该裁剪因子对应的特征通道删除,但是这种方法存在两个问题:裁剪阈值需要多次尝试才能得到较好的裁剪模型,而每次尝试需要重新训练,耗费大量时间;直接设置裁剪阈值可能导致网络中某一层的特征通道全部被裁剪。在本文中,使用裁剪率替代裁剪阈值,将所有裁剪因子的值进行排序,选取裁剪率对应的裁剪因子作为裁剪阈值。为了避免网络某层的特征通道全部被裁剪,将每层网络中最大的裁剪因子进行排序,选取其中最小的裁剪因子作为裁剪阈值的限定值。当裁剪阈值小于限定值时,将该裁剪阈值作为最终的裁剪阈值,当裁剪阈值大于限定值时,使用限定值作为最终的裁剪阈值。通过将小于裁剪阈值的裁剪因子所在的特征通道删除,从而实现模型的精简。
1.5 训练
本文网络基本参数设置如下:最大迭代次数为50 000次,学习率(learning rate)初始值为1E−3,并依次衰减为1E−4、1E−5,对应迭代次数分别为25 000、15 000、10 000。设置动量(momentum)为0.9,权重衰减(decay)为5E−4,批量大小(batch size)为8,优化器选用随机梯度下降(Stochastic Gradient Descent,SGD)。本文网络的损失由分类置信度损失和位置损失以及正则化约束函数构成。正则化约束函数是为了使裁剪因子γ产生稀疏解,通常使用L1正则化约束函数,但是L1正则化函数不是连续可导的,直接使用L1正则化函数可能导致网络在训练过程中无法收敛。为了解决这一问题,将L1正则化函数进行平滑操作,对应公式如式(6)所示,λ为0到1之间的常量。
最终定义网络的损失函数如式(7):
在式(7)中,L1为置信度损失函数,L2为位置损失函数,lconf和lloc分别为两者的平衡参数,ypc和ytc分别为预测类别和真实类别,bgp和bgt分别为预测位置和真实位置。置信度损失使用交叉熵损失函数,位置损失使用均方损失函数,Ω(⋅)为正则化约束函数。
2 实验结果与分析
本次实验基于Darknet53和pytorch1.0框架,在Intel Core i7-8750H和NVIDIA GTX 1080 8 GB GPU的机器上运行。
2.1 数据集描述
PASCAL VOC数据集来自于PASCAL VOC挑战赛,主要用于评估模型在目标分类、目标检测、目标分割任务的性能。PASCAL VOC挑战赛从2005年持续到到2012年,目前使用最多的数据集是VOC2007和VOC2012。VOC数据集分为4个大类、20个小类。本文结合VOC2007和VOC2012,对两个数据集中的标签信息进行处理,仅保留车辆标签信息及对应的图像,最后得到2 595张包含车辆信息的数据集VOC0712。并将车辆数据集分为两个部分:包含2 465张图片的训练验证数据集;包含130张图片的测试数据集。
Apollo数据集是由百度提供的自动驾驶数据集,是目前环境最复杂、标注最精准、数据量最大的数据集。本文选取3D车辆实例数据集,其中包括4 283张图片的训练数据集和1 040张图片的测试数据集。
2.2 性能评估指标
本文实验使用精度(Average Precision,AP)、速度(Frames Per Second,FPS)、参数量(Parameters)、计算力(FLOPS)、模型体积作为性能评价指标。
精度是指模型的P-R曲线的线下面积,本文使用逐点积分的方法来计算模型的检测精度。计算公式如式(8)所示。其中,r表示召回率,p表示准确率,n为召回率和准确率的数量,min(⋅)表示取小。
速度是指模型每秒检测图像的帧数。参数量是指模型训练参数的数量,参数量计算公式如式(9)所示。其中,Kw和Kh表示卷积核尺寸,Ci和Oi分别表示输入通道数和输出通道数,N表示卷积层数。
模型体积是指训练得到的模型大小。计算力是指模型消耗的计算资源,其计算公式如式(10)所示。其中,Hi和Wi表示输出特征图尺寸。
2.3 PASCAL VOC数据集实验结果
在该数据集上,将本文提出的方法与Fast R-CNN、Faster R-CNN、SSD512、YOLOv3进行比较。表2显示了各种方法在该数据集上的性能,主要使用检测精度、检测速度作为模型的评价指标。
表2 不同模型在PASCAL VOC数据集上的结果
由表2可以看出,本文所提方法在VOC0712上的检测平均精度达到87.6%,优于其他检测方法。检测速度为每秒42帧图像,实现了车辆的实时检测。
基于区域生成的方法Fast R-CNN和Faster RCNN在检测精度和检测速度上远低于本文所提方法。在检测精度上,相较于Fast R-CNN,本文提出的方法提升了24.8个百分点;相较于Faster R-CNN,本文提出的方法提升了16.4个百分点。在检测速度上,Fast RCNN和Faster R-CNN没有达到实时检测的要求,而本文所提方法每秒检测42帧图像,能够实现实时检测。特别地,Fast R-CNN和Faster R-CNN的网络层数少,但是模型的体积较大,尤其是Faster R-CNN,其模型体积大约是本文模型的2倍,这是因为本文增加了正则化约束,对模型进行了裁剪,使得模型体积得到极大的降低。
基于回归的算法中,YOLOv3算法性能高于SSD512,检测效果更好。本文提出的方法相较于YOLOv3和SSD512,精度分别提高了3.7个百分点和9.8个百分点。但是本文所提方法检测速度不及YOLOv3,这是因为本文网络拥有更多的卷积层和尺度,这导致模型的参数量极大增加。虽然本文对模型结构进行了精简,但是本文模型参数量仍然是YOLOv3的1.5倍,这使得模型的检测速度有了一定的下降。
值得注意的是,本文对Fast R-CNN、Faster R-CNN、YOLOv3、SSD512等方法进行了重复实验,发现相较于原始实验结果,本文的重复实验结果在精度上有所降低。其原因可能是本文实验在单块8 GB显卡和8 GB内存上进行,考虑到内存和显存限制,本文适当缩小了网络的初始参数,如本文将YOLOv3的批量大小由64改为16,这种做法在一定程度上降低模型的收敛精度。
图3 显示了Fast R-CNN、Faster R-CNN、YOLOv3、SSD512以及本文方法在VOC0712上的PR曲线。
通过比较P-R曲线下的面积,可以得出本文所提出的方法获得了最佳的检测精度,这说明了本文模型在VOC0712上的漏检和误检率更低,具有更好的检测效果。
图3 不同模型的P-R曲线
2.4 Apollo数据集实验结果
由于YOLOv3在现有的检测算法中实现了最优的性能,在Apollo数据集中,重点将本文模型与YOLOv3模型进行了比较。表3显示了本文模型与YOLOv3模型在该数据集上性能,使用模型参数量、模型体积、模型的计算力以及在数据集上的检测精度作为模型评价指标。
表3 不同模型在Apollo上的性能
从表3中可以看出,本文方法和YOLOv3相比具有更少的网络参数,更小的模型体积。本文方法需要的计算资源更少,检测精度更高。
图4 显示了本文方法和YOLOv3方法在Apollo数据集上的检测效果。第一列是原始图像,第二列为YOLOv3检测结果,最后一列是本文模型检测结果。从图中可以看出,本文模型相较于YOLOv3模型,对于尺度变换较大车辆以及遮挡的车辆具有更好的鲁棒性。
图4 不同模型在Apollo数据集上的检测效果
2.5 多尺度预测分析
在实际环境中采集的车辆图片通常存在较大的尺度变换,YOLOv3使用了52×52、26×26和13×13三种尺度进行目标检测。但是YOLOv3在尺度变换大的Apollo数据集中存在漏检和误检的问题。本文分析其原因可能有两个:网络层数少,提取的细粒度特征不足;13×13的尺度感受野有限,无法检测尺度较大的目标。
为了探究尺度对检测精度的影响,本文在YOLOv3的基础上,增加网络的尺度。同时,由于YOLOv3是全卷积网络,为了更方便进行卷积操作和消除图像输入尺寸对实验结果的影响,本文使用统一的输入图像尺寸512×512。由于网络复杂度会随着网络层数的加深而加大,考虑到设备显存容量的限制,本文对YOLOv3进行增加一个尺度和两个尺度的操作,最终得到4个尺度的网络模型和5个尺度的网络模型。将三种模型在Apollo数据集上进行测试。结果如表4所示。
表4 多尺度预测结果
从表4中可以看出,随着尺度的增加,检测精度也得到提升。增加一个尺度和两个尺度的模型相较于3个尺度模型检测精度分别提高了0.016和0.033。但是随着尺度的增加,模型的检测速度随之降低,这是因为尺度增加导致模型结构更加复杂,模型的参数量和计算量都大幅提高,这导致了模型的检测速度降低。
2.6 网络裁剪分析
为了精简网络结构、缩减参数规模,本文对网络进行了通道级裁剪。为了分析裁剪阈值对实验结果的影响,本文选用不同的裁剪阈值进行实验,结果如表5所示。
表5 不同裁剪率实验结果
从表5可以看出,在不执行网络裁剪的情况下,特征通道数为13 376,当裁剪率为90%时,检测速度提升了3.6倍,但是经过微调后模型检测精度降低了0.112;当裁剪率为85%时,微调模型的检测速度提升了2.6倍,但是检测精度降低了0.059;当裁剪率设定为80%时,经过微调后模型的检测精度与未裁剪模型相比不仅没有降低,反而提高了0.002,且检测速度提高了2倍;当裁剪阈值为70%时,微调模型检测精度基本保持不变,但检测速度相较于80%裁剪率模型有所降低。综上,当设定裁剪率为80%,裁剪阈值为0.007 1时,裁剪模型的综合性能表现最优。图5显示了模型裁剪因子的权重分布。
图5 裁剪因子权重分布
为了分析网络裁剪对不同模型造成的影响,将本文的深度残差网络模型模型和YOLOv3模型与对应的裁剪模型在Apollo数据集上进行对比实验,裁剪率为0.8。实验结果如表6所示。
表6 不同模型裁剪结果
从表6可以看出,裁剪后的YOLOv3模型相比原始YOLOv3模型参数量由6.15×107缩减至1.09×107,降低了82.3%;模型体积由246 MB缩减至43 MB,降低了82.5%;计算力由32.8×109缩减至9.6×109,降低了70.7%;检测速度由45 f/s提升至67 f/s,提高了48.9%;裁剪网络经过微调后,精度不仅没有降低,反而有微弱的提升,由77.5%提升至77.6%。本文模型裁剪后参数量减小了80.1%,模型体积仅为未裁剪模型的1/5,计算量降低了57.0%,而检测速度得到了大幅提升,达到42 f/s,满足了实时检测的要求。
4 结语
为了提高在实际场景中车辆检测的精度和鲁棒性,本文构建了深度残差网络提取车辆的细粒度特征。针对车辆尺度变换较大的问题,本文构建了包含五种尺度的特征金字塔网络,为了解决车辆的遮挡问题,本文使用软化非极大抑制线性衰减置信得分,提升了模型的检测精度。同时,本文通过数据增强等方式增强模型的鲁棒性。为了降低多尺度模型对计算资源的损耗,本文对批标准化层的γ系数进行正则化约束,从而对模型进行通道级的裁剪,有效地降低了模型的参数规模,节省了计算资源,提高了模型的检测速度,最终实现车辆的实时检测。在PASCAL VOC和Apollo数据集上的实验结果证明本文提出的方法在检测精度上优于现有的检测方法,且在检测速度上取得了不错的表现。在后续的工作中,将继续研究车辆的精细分类以及车辆行驶过程中的障碍物检测等任务。