基于深度学习的车辆检测方法研究与实现

收藏和点赞,您的关注是我创作的动力

概要

  车辆检测是目标检测的子类,其要做的是在给定图像中找出所有车辆并给出它们的边界框,是智能交通系统与车辆驾驶技术中最基础也是最重要的部分。从安全性与实用性的角度来讲,车辆检测器需要具有非常高的检测准确度并能完成实时处理。
  本文首先介绍了深度学习与卷积神经网络的基本概念,之后在此基础上详细叙述了Faster R-CNN与YOLO两种典型目标检测框架的流程,最后分别用这两种框架实现了车辆检测。实验使用的车辆数据集从PASCAL VOC数据集中提取,车辆数据集中包含了自行车、公交车、小汽车、摩托车与火车这5类车辆目标。基于深度学习编程框架Caffe的定制版本,实验实现了Faster R-CNN与YOLO两种目标检测算法并完成了车辆检测。实验使用梯度下降法训练卷积神经网络,使用同一测试集进行测试。
  在测试集上,基于Faster R-CNN实现的车辆检测算法mAP为83.68%,检测速度为9.7FPS,基于YOLO实现的车辆检测算法mAP为70.3%,检测速度为80.7FPS。根据实验结果,基于Faster R-CNN实现的车辆检测算法检测准确率较高,但检测速度相对较慢,基于YOLO实现的车辆检测算法已经达到了实时处理的标准,但对小而密的小汽车目标检测效果较差。

关键词:深度学习;卷积神经网络;车辆检测;Caffe

一、研究背景与意义

  车辆检测作为目标检测任务的子类,其进展与目标检测的进展息息相关。目标检测方法按是否使用人为设计的特征可以分为两类:传统方法与基于深度学习的方法。
  传统的目标检测算法主要研究的是特征的提取与分类,Viola和Jones使用Haar特征与Adaboost算法实现了实时的人脸检测[1],法国研究人员Dalal发现HOG特征与SVM分类器特别适用于行人检测[2]。这些传统方法大致遵循以下流程:使用滑动窗口的方法获取目标候选窗,然后在每一个候选窗上提取Haar、HOG等人为设计的特征,之后将所提取的特征输入到SVM等分类器中判断该候选窗是否为检测目标。传统的目标检测方法的准确度并不能满足实际使用的需求,主要是因为使用的特征为人工设计的特征,这些特征对目标的表征能力不强,是低等级的特征。此外,传统的目标检测方法需要对不同的任务设计不同的特征,同一特征对不同目标的表征效果相差较大。
  表示学习可以让机器自动地发掘原始数据中的特征,而深度学习作为一种表示学习则可以通过组合简单的低等级特征表达复杂的抽象特征,与传统手工设计的特征相比,深度学习学习到的特征具有更强的表征能力。因此,自2006年Hinton提出深度学习的概念后,随着图形处理单元的使用以及大型图像数据库的出现,深度学习被广泛应用到图像处理、语音识别、自然语言处理等诸多领域,且均取得了令人瞩目的效果。
  卷积神经网络是专门为图像处理设计出来的一种深度神经网络,在基于深度学习的目标检测方法中被广泛使用。基于深度学习的目标检测方法又可以分成基于区域提议的方法与基于回归的方法。
  基于区域提议的深度学习目标检测方法主要由R-CNN系列框架组成。在2013年,Ross Girshick提出了R-CNN框架[5],R-CNN框架使用选择性搜索方法获取目标候选窗,再将用卷积神经网络提取的特征送入SVM中进行分类。R-CNN首次将卷积神经网络用于目标检测,极大的提高了目标检测的精确度。在2014年ImageNet大赛目标检测任务上,何凯明、任少卿团队提出的SPP-Net[6]取得了第二名的成绩,SPP-Net使用金字塔池化层解除了卷积神经网络需要固定输入尺寸的限制,此外,SPP-Net还将选择性搜索方法获得的候选窗映射到特征图上,这样只需提取一次卷积层特征,大大减少了特征提取的时间。2015年,Ross Girshick引入了SPP-Net的工作,提出了基于RoI池化层的Fast R-CNN框架[7],Fast R-CNN的亮点在于使用了多任务的损失函数,将边界回归输出并联到卷积神经网络的分类输出上,这进一步提高了目标检测的平均准确度。同一年,任少卿、何凯明与Ross Girshick合作提出了Faster R-CNN框架[8],这个框架使用区域提议网络代替选择性搜索算法获取目标候选窗,这不仅提高了生成目标候选区的质量,还减少了候选窗生成的时间,加速了目标检测的速度。
  相比于基于区域提议的方法,基于回归的深度学习目标检测方法省去了候选窗提取的步骤,直接在整张图片的多个位置上进行边界回归与目标分类。在2016年IEEE国际计算机视觉与模式识别会议(CVPR)上,Joseph Redmon等人提出了名为YOLO[12]的目标检测算法,YOLO将图像分成的网格,在每个网格单元上预测目标的边界框以及目标的置信得分。同年,在欧洲计算机视觉国际会议(ECCV)上,Wei Liu等人提出了SSD目标检测算法[13],SSD在来自不同卷积层的多个特征图上进行预测,可以在低分辨率的图像上取得较好的正确率。由于不需要进行区域提议,基于回归的方法的速度远远快于使用区域提议的方法,但这些方法的检测准确度要低于基于区域提议的方法。

二、基于Caffe框架的车辆检测算法

  基于深度学习的目标检测算法中大量使用了卷积神经网络,而车辆检测算法可以通过修改目标检测算法实现。本章首先介绍了目标检测中的基本概念,包括评估目标检测器性能的指标,之后介绍了一种深度学习编程框架Caffe,最后介绍了YOLO与Faster R-CNN两种目标检测方法的基本原理并在车辆检测应用下对其作了修改。

3.1 目标检测中的基本概念

  目标检测要做的是在给定图像中找出待检测目标的位置并给出目标的边界框,通常边界框由中心像素坐标与高h、宽w确定。我们将两个边界框之间的相交部分与相并部分的面积之比称为交并比IoU。
非极大值抑制NMS往往是目标检测系统的最后一步,其目的是滤除重叠的预测边界框,具体流程为:将所有预测边界框按目标得分从大到小排序,取出第一个边界框,计算其与剩余边界框的IoU值,设一阈值,删去所有的预测边界框,之后取下一个边界框继续上述步骤,直至筛选完所有边界框,留下的边界框即为最终的检测结果。
表3-1 二分类混淆矩阵
在这里插入图片描述

  在二分类问题中,可以根据分类结果与真实标签的关系将所有样本分为四类:真正例、假正例、真反例与假反例,可由表3-1所示的二分类混淆矩阵确定。而查准率与召回率作为一种判断系统性能的指标,可由各类样本的数目计算得到,如式:
在这里插入图片描述

  查准率反映了系统预测为正的样本中实际为正的比例,召回率反映了实际为正的样本中预测为正的比例。可以通过提高置信得分的阈值提升查准率,在这种情况下,只有置信得分非常高的样本才会被判为正例,与此同时,许多置信得分相对较高的实际正例会被判为反例,这会降低召回率,因此,查准率与召回率是一对矛盾值。
  在目标检测领域内,同样可以使用回归率与查准率评估目标检测器的性能。设置一个阈值,给定一类目标,对于一张图像中每一个预测的边界框,首先选取与其IoU最大的那个真实边界框,如果,那么这个预测的边界框样本被记为假正例,如果且真实目标的类别与检测出的目标类别相同,这个样本则记为真正例,反之,如果但真实类别与检测出的类别不同,这个样本就被记为假正例,正常取0.5。对于同一类检测目标,如果将检测器在测试集上的所有预测边界框样本按置信得分从大到小排序,依次从头开始进行采样,采样的点数递增,采样点数的增加体现了当前目标分类阈值的减少,记测试集所有图像中真实边界框的数量为N,用TP记采样的边界框中真正例的个数,用FP记假正例的个数,通过公式:
在这里插入图片描述

  计算每次采样结果的召回率与查准率,并依此绘制查准率-召回率曲线,可以通过计算曲线下的面积得出这一类别的平均查准率AP,通常使用所有类别AP的平均值mAP以评估目标检测器的检测准确度。式(3-2)中的N为标记为正的所有样本数量,是真正例与假反例数量的和,因此式(3-2)与式(3-1)并无本质区别。
  除了mAP值外,评估目标检测算法性能还有另一个指标,检测速度。可以使用目标检测系统每秒处理的图像张数表示检测速度,检测速度常常与检测准确度不可兼得,需要从中取得平衡。

3.3 YOLO算法

  YOLO算法是一种效率优先的目标检测算法,它并没有使用区域提议方法而是直接在输入图像上进行目标边界框的预测,因此,YOLO算法的检测速度相对较高。
  YOLO算法会将图像划分成大小的网格,由目标中心落入的网格单元负责检测该目标。每个网格单元会检测B个边界框并输出C个目标类的条件概率,算法会对每个边界框输出5个值:x、y、w、h以及目标的置信度,其中为相对于网格单元左上角归一化的偏移坐标,w、h为边界框的宽、高相对原始图片宽、高的归一值,置信度的值为目标的概率与真实边界框同预测边界框IoU的乘积,体现了网格单元对边界框含有目标的可能性与边界框正确性的确定程度,因此x、y、w、h和置信度的值都落在区间[0, 1]上。考虑到网络会对每个网格单元输出预测值,故网络的最后输出被设置成维的张量。
训练YOLO算法时,所优化的代价函数为:
(3-3)

式中,代表了所有的网格数,B代表了每个网格预测的边界框数,、、、与为第i个网格中目标相应边界框的5个标定值,如果该网格不负责检测目标,则这5个值为0,为第i个网格中目标类别条件概率的标定值,相应的值则为网络输出的预测值,与则代表了第i个网格中是否包含检测目标。因为大面积的边界框比小面积的边界框对边界长宽误差更具有鲁棒性,为了减少大面积边界框较大长宽值引起的误差,提升小面积边界框较小长宽值引起的误差,代价函数对w与h的值取了平方根。因为不包含目标的网格单元的比例更多,为了提升网络对目标的敏感程度,使用了超参数减少不包含目标的网格引起的置信度损失。考虑到预测边界框的4个坐标值比预测边界框包含目标的置信度更困难,故使用了超参数提升边界框坐标值引起的损失。
  测试时,对网络做前馈计算,YOLO算法总共生成了个边界框,对每个边界框,用预测所得类别条件概率最大值与目标置信度相乘获得确定目标类别的置信度,用一阈值滤除较低值,保留确定目标类别置信度得分较高的那些边界框并使用非极大值抑制获取最后的边界框预测结果,具体流程由流程图3-1表示。
  为了将YOLO算法用于车辆检测,需要对框架进行一些修改。对于全卷积网络实现的YOLO算法,输出层的输出的特征图大小为,为车辆的类别数。在生成训练网络用的lmdb数据库文件时,也需对不同类别对应的标记数值做出修改。
在这里插入图片描述

图3-1 YOLO算法应用时的检测流程

三、实验仿真与性能分析

  在搭建完车辆检测框架后,还需对所用的卷积神经网络进行训练。本章首先介绍了实验的环境以及所用的车辆数据集,之后使用数据集分别对YOLO与Faster R-CNN中实现车辆检测所用的卷积神经网络进行训练,最后对实验结果进行分析并比较两类车辆检测算法的性能。

4.1 实验准备

4.1.1 实验环境

实验在Ubuntu 16.04系统上进行,图形处理器为Nvidia GTX 1070,使用的CUDA版本号为9.0,cudnn版本号为6.0。实验使用了Faster R-CNN与YOLO的两个Caffe定制版本,Python的版本为2.7。

4.1.2 数据集准备

  实验所用的数据来自于PASCAL VOC,VOC数据集是在目标检测领域中使用最为广泛的数据集之一,研究者通常会通过比较不同目标检测算法在VOC数据集上的表现来分析目标检测算法的性能,在2005年至2012年间,PASCAL VOC每年都会更新数据集并举办图像识别挑战,本次实验的数据从VOC2007年与VOC2012年的数据中提取。
  VOC目标检测的数据集中共有20个目标类别,这些类别由集合{“bicycle”,“bus”,“car”,“motorbike”,“train”,“aeroplane”,“bird”,“boat”,“bottle”,“cat”,“chair”,“cow”,“diningtable”,“dog”,“horse”,“person”,“pottedplant”,“sheep”,“sofa”,“tvmonitor”}呈现。为了评估所用目标检测算法用于车辆检测的性能,实验准备了两组数据,第一组数据用于训练原始的20分类目标检测算法,但实验只评估其对{“bicycle”,“bus”,“car”,“motorbike”,“train”}5类车辆的检测性能,第二组用于训练检测5类车辆的车辆检测算法,第二组数据集在本次实验中记为车辆数据集。
  两组数据的测试集部分相同,为VOC2007数据集测试集中提取的包含5类车辆的部分,共1200张图像,图像中包含了310个"bicycle"目标、1205个"car"目标、279个"motorbike"目标、198个"bus"目标与233个"train"目标,实际上VOC2007测试集中包含5类车辆的图像共1556张图片,多余的356张图片会加入到第二组数据的训练集中。
  第一组数据中的训练集为VOC2007与VOC2012的训练验证集,VOC2007训练验证集有5011张图像,VOC2012训练集有11540张图像,共计16551张图像,总共包含了1208个"bicycle"目标、4008个"car"目标、1141个"motorbike"目标、909个"bus"目标与984个"train"目标。第二组数据中的训练集为VOC2007与VOC2012训练验证集中包含5类车辆的部分以及上述多余的356张图像,共计4792张图像,包含了1287个"bicycle"目标、4344个"car"目标、1231个"motorbike"目标、965个"bus"目标与1053个"train"目标,对第二组数据而言,训练集与测试集数据的比例为。

4.2 YOLO算法实现车辆检测

  使用YOLO的定制版Caffe实现YOLO算法。
表4-1 实验时YOLO使用的网络结构
在这里插入图片描述

  YOLO所用的网络结构在GoogLeNet的基础上作了些许修改,将第五阶段的平均池化层改为最大池化层,再增加两层的卷积层并用卷积层实现了最后的输出,具体如表4-1所示。因此,所用的目标检测网络为全卷积网络。网络的输入为分辨率的RGB图像,输入层会对输入数字图像的每一个颜色通道减去ImageNet数据集数据对应颜色通道的均值并作归一化,这三个均值分别为104、117、123。在本次实验中,YOLO将图像分割成大小的网格,每个网格预测两个边界框,当做VOC数据集的20目标分类或者是做车辆数据集的5分类时,检测网络输出的特征图尺寸分别为与,相应的输出卷积层的卷积核个数分别30与15。优化的损失函数如所公式3-3所示,式中的超参数取值为与。
在这里插入图片描述

(2)为使用车辆数据集训练时损失的变化
  使用小批量梯度下降法训练网络,批大小为16,动量系数为0.9,权重衰减为0.0005,起始学习率为0.001,当迭代500次时,学习率变为0.01,当迭代16000次时,学习率变化为0.001,当迭代24000次时,学习率变为0.0001,总共迭代32000次。训练时输入的图像会缩放至分辨率,分别用VOC数据集与车辆数据集进行训练,训练时损失的变化如图4-1所示,损失大体上呈下降趋势且下降坡度较为明显。
表4-2 YOLO算法实现车辆检测后各类的平均查准率
在这里插入图片描述

  对两组数据集均选择迭代32000次后的模型进行测试,测试时采用的批大小为1,总共迭代1200次,测试时各类车辆的平均查准率如表4-2所示。做20分类测试总耗时15129.5ms,检测速度约为79.3FPS,做5分类测试总耗时14872.8ms,检测速度约为80.7FPS。
  从表4-2可以看出,修改YOLO算法实现车辆检测确实可行,5分类的车辆检测器在测试集上的mAP为70.3%,比20分类的目标检测在测试集上的mAP更高。由于YOLO在每个网格处只能检测一种目标类型,而car目标在图像中比例较小、数量较多且容易被其他目标遮挡,所以用YOLO算法实现的车辆检测对car目标的平均查准率较低,图4-2展示了YOLO算法实现的车辆检测器在测试集上图像的效果。
在这里插入图片描述

图4-2 YOLO实现的车辆检测算法在测试集上的效果

4.3 Faster R-CNN算法实现车辆检测

使用Faster R-CNN的定制版Caffe实现Faster R-CNN算法。
在这里插入图片描述

图4-3 实验时Faster R-CNN所用的网络结构
  使用的网络结构在VGG16的基础上添加了区域提议网络并修改了网络的输出层,具体见图4-3,目标检测网络最后的两层全连接层均使用了比例为0.5的dropout以减少过拟合。目标检测网络会对区域提议网络输出的每个感兴趣区域做检测,对每一个感兴趣区域,做VOC数据集的20目标分类时,目标检测网络输出20目标类与背景类的21路softmax分类概率以及确定这个21个类的边界框大小与位置的84个回归值,做VOC车辆数据集的5目标分类时,目标检测网络输出5目标类与背景类的6路softmax分类概率以及这个6个类的边界框大小与位置的24个回归值。使用端到端的训练方法,优化的损失如公式3-5所示,式中超参数的取值为。
在这里插入图片描述

图4-4 (1)为使用VOC数据集训练时损失的变化,
(2)为使用车辆数据集训练时损失的变化
  使用小批量梯度下降法训练网络,批大小为1,但只有当计算完两张图像对各权重的梯度后才对权重进行更新,动量系数为0.9,权重衰减为0.0005,起始学习率为0.001,每再迭代30000次学习率除以10,总共迭代70000次。训练前会将训练集的图像的短边缩放至600像素,分别用VOC数据集与车辆数据集进行训练,训练时损失的变化如图4-4所示。当用VOC数据集进行训练时,损失的波动较大,当用车辆数据集进行训练时,损失在迭代40000后就趋于平缓,当迭代到70000次后已经明显收敛。
  对VOC数据集的训练模型,用迭代70000次后的模型进行测试,对车辆数据集的训练模型,选取迭代60000次的模型进行测试,测试时的批大小均为1,总共迭代1200次,测试时同样会将测试集的图像的短边缩放至600像素,总共生成300个候选窗。每一类别的查准率-召回率曲线见图4-5,每一类别具体的平均查准率在表4-3中显示。做20分类测试总耗时140.04s,检测速度约为8.6FPS,做5分类测试总耗时124.2s,检测速度约为9.7FPS。
表4-3 YOLO算法实现车辆检测后各类的平均查准率
在这里插入图片描述

  由于Faster R-CNN方法使用区域提议网络获取高质量的目标候选窗,用Faster R-CNN算法实现的车辆检测比YOLO取得了更高的mAP,但这也降低了车辆检测算法的速度。此外,Faster R-CNN中的目标检测网络分别对每一个感兴趣区域进行检测,这部分计算没有并行,这也使得Faster R-CNN比YOLO更耗时。Faster R-CNN对小目标的检测能力较好,由于训练集中car目标的数量要远多于其他车辆目标,Faster R-CNN对car目标取得了更高的平均查准率,图4-6展示了Faster R-CNN算法实现的车辆检测器在测试集上图像的效果。

在这里插入图片描述

图4-5 (1)为使用VOC数据集训练时的查准率-回归率曲线,
(2)为使用车辆数据集训练时的查准率-回归率曲线
在这里插入图片描述

图4-6 Faster R-CNN实现的车辆检测算法在测试集上的效果

结 论

  车辆检测作为智能交通系统与车辆驾驶技术中最基础的环节,起着至关重要的作用,为了满足安全性与实用性的要求,车辆检测应该有极高的检测准确率并且能够实现实时检测。车辆检测的性能与目标检测算法的发展息息相关,传统的目标检测方法使用了手工设计的低等级特征,检测准确率远不能满足车辆检测的安全性要求。而随着深度学习尤其是卷积神经网络的发展,基于深度学习的目标检测算法的检测准确率不断提升,研究者也致力于寻找检测准确率与检测速率之间的平衡点,这为安全与实用的车辆检测带来了曙光。本文正是基于这一现状,详细介绍了卷积神经网络的结构并用当前最为流行的两种目标检测框架实现了车辆检测。
本文使用的两种目标检测框架为Faster R-CNN与YOLO,这两种方法差别明显,Faster R-CNN首先使用区域提议网络获取高质量的目标候选区,再在每个目标候选区上对目标进行检测,而YOLO则将图像划分成的网格,对每个网格单元预测目标的边界框,这使得YOLO可以使用高效率的全卷积网络实现。本文基于Faster R-CNN与YOLO的两个定制版Caffe分别实现车辆检测算法,实验使用的数据集提取于PASCAL VOC数据集。在测试集上,基于Faster R-CNN实现的车辆检测取得了83.68%的mAP,检测速度为9.7FPS,基于YOLO实现的车辆检测取得了70.3%的mAP,检测速度为80.7FPS,前一种车辆检测方法检测准确度更高,但这牺牲了检测速度,后一种车辆检测方法实现了实时处理,但它的检测准确度相对较低。

六、 目录

目录
摘要 1
ABSTRACT 2
第1章 绪论 3
1.1 研究背景 3
1.2 国内外进展 4
1.2.1 目标检测算法 4
1.2.2 车辆检测算法 5
1.2.3 深度学习 6
1.3 研究内容和论文结构 6
第2章 深度学习与卷积神经网络 8
2.1 深度学习与卷积神经网络中的基本概念 8
2.1.1 卷积神经网络的基本结构 8
2.1.2 深度学习中的训练与测试方法 11
2.2 经典卷积网络模型 14
2.2.1 VGG网络 14
2.2.2 GoogLeNet网络 14
2.2.3 dropout与批量归一化 16
2.3 本章小结 16
第3章 基于Caffe框架的车辆检测算法 17
3.1 目标检测中的基本概念 17
3.2 Caffe框架 18
3.3 YOLO算法 19
3.4 Faster R-CNN算法 21
3.5 本章小结 23
第4章 实验仿真与性能分析 24
4.1 实验准备 24
4.1.1 实验环境 24
4.1.2 数据集准备 24
4.2 YOLO算法实现车辆检测 25
4.3 Faster R-CNN算法实现车辆检测 27
4.4 本章小结 29
第5章 总结与展望 31
5.1 本文总结 31
5.2 工作展望 31
参考文献 33
致谢 35

猜你喜欢

转载自blog.csdn.net/m0_73485263/article/details/133710851
今日推荐