目录
摘要 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
摘要
车辆检测是目标检测的子类,其要做的是在给定图像中找出所有车辆并给出它们的边界框,是智能交通系统与车辆驾驶技术中最基础也是最重要的部分。从安全性与实用性的角度来讲,车辆检测器需要具有非常高的检测准确度并能完成实时处理。
本文首先介绍了深度学习与卷积神经网络的基本概念,之后在此基础上详细叙述了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
ABSTRACT
Vehicle detection is a subclass of object detection. What vehicle detection needs to do is to find all vehicles in a given image and give their bounding boxes. This is the most basic and important part of intelligent transportation systems and automatic drive. From the viewpoint of safety and practicality, vehicle detectors need to have a very high detection accuracy and can realize real-time processing.
This article first introduces the basic concepts of deep learning and convolutional neural networks. After that, it clarifies how Faster R-CNN and YOLO which are two typical kinds of object detection frameworks work, and finally uses these two frameworks to implement vehicle detection. The vehicle data set used in the experiment was extracted from the PASCAL VOC data sets. The vehicle data set contained five types of vehicle objects: bicycle, bus, car, motorbike, and train. Using the customized version of the deep learning programming framework Caffe, the experiment implements Faster R-CNN and YOLO and then completes the vehicle detection. The gradient descent method was used to train the convolutional neural network, and the two vehicle detectors are tested on the same test set.
On the test set, the mAP of vehicle detection algorithm based on Faster R-CNN is 83.68%, and the detection speed is 9.7 FPS. The mAP of vehicle detection algorithm based on YOLO is 70.3%, and the detection speed is 80.7 FPS. According to the results of this experiment, the detection accuracy of vehicle detection algorithm based on Faster R-CNN is high, but the detection speed is relatively slow. The vehicle detection algorithm based on YOLO has met the requirement of real-time processing, but has a poor detection performance on cars which are small and dense.
Key Words: Deep Learning, Convolutional Neural Network, Vehicle Detection, Caffe
第1章 绪论
1.1 研究背景
随着我国社会经济水平的飞速发展,我国的汽车保有量日益增长。自上世纪八十年代执行改革开放后中国刚开始出现私人汽车起,到2017年年底我国的汽车保有量达到2.17亿辆止,在这近40年间,获得相同数量的汽车增长所要的时间越来越短。2003年我国汽车的社会保有量为1219万辆,私人汽车突破千万用了约20年时间,而到2006年,只经过3年,我国的汽车保有量已经达到2000万量,此后,我国汽车保有量增长的速度越来越快,到2010年,我国汽车保有量为7000万辆,而到2011年8月,汽车的保有量已经突破了1亿辆,我国现在已经成为世界最大的汽车生产国和第一大的新车市场。汽车的出现与增长为人类社会带来了极大便利,不仅减少了两地间的交通时间,促进了各地区间的联系,还催生了许多新的产业,促进了经济与科技的发展。
我们不能否认汽车给人类社会带来的积极作用,但是另一方面,汽车也引发了很多问题。首先,汽车数量的大量增长带来了严重的交通事故,尽管我国的交通事故发生数呈减少态势,但我国仍是世界上交通事故最多的国家之一,根据国际上的统计,交通事故损失会占到一个国家GDP的1.5%-3%,这个数字不容小觑。其次,随着全球车辆数目的增长,道路上的车辆密度也日益增加,这导致整个交通网络的车速持续下降,道路拥挤的比例不断增加。此外,汽车的尾气还造成了一定的环境污染。在信息与通信技术高速进步的背景下,为了减轻汽车造成的负面影响,智能交通系统的建设已经走上日程。2017年6月,杭绍甬高速公路开始施工,计划在2022年杭州亚运会前建设完成,浙江政府将在这条高速公路上构建路网综合运行监测与预警系统,通过智能化、容错化设计整体提升该公路的运行效率,提高安全性,还计划远期构建车联网系统,全面支持自动驾驶。而在智能交通系统与自动驾驶技术中,车辆检测是必不可少的一环,起着至关重要的作用。
车辆检测要做的是在给定图片中定位所有的车辆,这要求计算机不仅能在各种物体中辨别出车辆,还要能给出正确的边界框信息。为了在实际场景中引入车辆检测技术,我们必须确保车辆检测器拥有非常高的检测正确率,此外,我们还需要不断降低检测所消耗的时间以满足实时检测的要求。
综上所述,研究车辆检测很有现实意义。
1.2 国内外进展
1.2.1 目标检测算法
车辆检测作为目标检测任务的子类,其进展与目标检测的进展息息相关。目标检测方法按是否使用人为设计的特征可以分为两类:传统方法与基于深度学习的方法。
传统的目标检测算法主要研究的是特征的提取与分类,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在来自不同卷积层的多个特征图上进行预测,可以在低分辨率的图像上取得较好的正确率。由于不需要进行区域提议,基于回归的方法的速度远远快于使用区域提议的方法,但这些方法的检测准确度要低于基于区域提议的方法。
1.2.2 车辆检测算法
车辆检测算法同目标检测算法类似,同样可以分为传统的方法与基于深度学习的方法。在传统的车辆检测算法中,中国科学院大学的Zheng Wei使用精心设计的strip特征在车辆检测上取得了不错的效果[3]。而在深度学习的基础上,高丽大学的Won Jae Lee使用可视化手段从卷积神经网络内提取了车辆的优质特征,之后使用Adaboost分类器对提取的特征进行分类以此实现车辆检测[4],这种方法使用与传统方法类似的流程,只是将传统手工设计的特征替换成用卷积神经网络提取的特征,这种方法表明卷积神经网络提取的特征更有效。
基于深度学习的车辆检测算法还可以通过修改现有的目标检测算法实现。用使用区域提议方法的目标检测框架实现的车辆检测[9][10][11]均取得了非常高的检测准确度,但只有在昂贵的高性能GPU上进行处理时,这些方法才能到达较高的检测速度,这还远不能满足实时处理的要求。
1.2.3 深度学习
因为用于目标检测的数据量比较少,所以基于深度学习的目标检测方法通常都会使用监督预训练初始化所用的卷积神经网络[5]。监督预训练类似于迁移学习,先用分类数据集训练卷积神经网络,用于分类的图像数据集含有数量更多、质量更高的带标记图像,之后,将训练好的卷积神经网络的输出层替换为用于检测的结构,保留低层卷积层的权重,用目标检测的数据集再次训练。使用监督预训练能有效提高算法检测的准确率。因此,卷积神经网络结构的选择对检测器的性能有非常大的影响。
卷积神经网络最早由Lecun提出[14],被成功应用于手写数字识别。在2012年后,卷积神经网络开始大放异彩,各种结构的卷积神经网络不断刷新ImageNet大赛分类任务的记录。2012年Krizhevsk等人提出的AlexNet[15]使用dropout方法减少过拟合并使用ReLU激活函数加快训练速度;2014年Simonyans等人使用3x3的小卷积核加深了网络的深度,提出VGGNet模型[16];2015年,谷歌团队提出的GoogLeNet模型使用Inception模块加深了卷积神经网络的宽度和深度[17],何凯明团队在ResNet[18]中提出残差学习的概念,解决了网络退化的问题。以VGG16、GoogLeNet以及ResNet等为基础网络的目标检测算法取得了比较优异的检测结果。
1.3 研究内容和论文结构
本文首先介绍了深度学习与卷积神经网络的基本概念,然后在此基础上阐明了Faster R-CNN与YOLO这两种典型的目标检测算法的流程并以此实现了车辆检测,之后说明了实验中的一些细节并对实验结果进行了分析。
本文的章节安排如下:
第1章介绍了车辆检测的研究背景以及相关领域近年来的发展状况。
第2章重点介绍了卷积神经网络的基本结构与训练方法,之后选择性的介绍了一些经典的卷积神经网络结构与优化方法。
第3章首先介绍了目标检测中的常用概念以及评估目标检测算法性能的常用指标,之后介绍了一种深度学习编程框架Caffe,最后介绍了Faster R-CNN与YOLO两种基于深度学习的目标检测方法并对这两种方法进行修改以实现车辆检测。这两种框架差别明显,Faster R-CNN先通过区域提议网络获取目标候选窗,再在目标候选窗上进行检测,而YOLO直接在数字图像上对目标边界框进行回归预测。
第4章为实验部分,实验使用Faster R-CNN与YOLO算法分别实现了车辆检测,第4章首先介绍了实验的环境与使用的数据集,然后阐述了实验的细节与实验结果,通过对实验结果的分析,指出了Faster R-CNN与YOLO算法的差别。
第5章对论文进行了总结,指出了论文的不足并对以后的研究进行展望。
第2章 深度学习与卷积神经网络
深度学习包含了多种神经网络模型,如卷积神经网络与循环神经网络,在车辆检测领域,最常用的深度学习模型为卷积神经网络。本章首先介绍了深度学习与卷积神经网络的基本概念,包括卷积神经网络的基本结构与训练方法,之后选择性的介绍了一些经典的卷积神经网络以及改善卷积神经网络性能的算法。
2.1 深度学习与卷积神经网络中的基本概念
深度学习的概念由Hinton在其2006年发表的论文中提出,实际表现为多层的神经网络,神经网络是研究人员受生物大脑神经元启发研究而成。深度学习包含了多种神经网络结构,如卷积神经网络、循环神经网络、深度置信网络等,而在车辆检测所属的目标检测研究领域内,卷积神经网络被最为广泛地运用。
2.1.1 卷积神经网络的基本结构
图2-1卷积神经网络基本结构
卷积神经网络由多种层级模型堆叠而成,常见的层级模型包括输入层、卷积层、激活层、池化层、全连接层以及输出层,图2-1展示了卷积神经网络的基本结构。卷积神经网络以输入层为始,以输出层为终,输入层与输出层之间的层级又被称为隐藏层。在卷积神经网络中,每一层会对前一层的输出进行处理并输出结果,其中,卷积层处理的对象与输出的结果常被称为特征图,特征图与输入的图像对应,由多维数组确定。
1、输入层
卷积神经网络的输入为数字图像。数字图像由若干个像素组成,可以表示成多维数组形式,图像的分辨率决定了数组的行数与列数,数组中元素的位置与数值代表了对应像素的位置与强度。RGB彩色图像可由三维数组确定,对分辨率的RGB彩色图像,,,,z的0、1、2三个取值与彩色图像的红、绿、蓝三个颜色通道一一对应。因此,RGB彩色图像可以按颜色通道分割成三个二维数组、与,二维数组中第m行第n列处的元素值确定了图像坐标处像素对应颜色通道的强度值,强度值的取值为区间中的整数值。输入层会对输入图像进行一些基本的处理,如对像素强度进行归一化、改变图像的分辨率等。
2、卷积层
卷积层由若干个卷积核组成,卷积核可以看成是滤波器,可以表示成三维数组,起着特征提取的作用。记第l层卷积层的卷积核个数为,每个卷积核的尺寸相同,记为,卷积核的深度必须与输入特征图的深度相同,因此在谈及卷积核尺寸时常常忽略深度信息,简单记为。记第l层卷积层第i个卷积核为,此外,每个卷积核还会有一个额外的加性偏置,与被称为权重或者参数,会在网络的训练过程中被改变。以第l层卷积层为例说明卷积层的处理流程,设输入为大小的特征图,输出特征图,在卷积计算前,卷积层首先会对特征图的高与宽的两边进行对称填充处理,常用的填充值为0或者是特征图元素强度的平均值,记填充的宽度为,记填充后的特征图为,为大小的数组,之后根据公式:
(2-1)
进行卷积计算,得到特征图中每一元素的数值。式中,表示同一卷积核多次卷积计算间的步长。显然,特征图的尺寸为:
(2-2)
式中,表示对x向下取整。需要注意的是,除了卷积层与全连接层的权重以外的变量都被称为超参数,因此,、、和都是属于卷积层的超参数。
3、激活层
激活层的作用是引入非线性元素。卷积神经网络实质上是描述了输入X到输出y的映射关系:
(2-3)
从式(2-1)可以看出,卷积层只进行了线性运算,当只堆叠卷积层时,网络的输出为线性运算的组合,仍是输入的线性表示,这样的网络没有拟合复杂非线性映射的能力,因此,卷积神经网络引入了激活层。激活层堆叠在卷积层或全连接层后,几乎每层卷积层后都跟着激活层,当计算网络层数时,只记带权重或参数的卷积层与全连接层,因此当谈及第l层激活层时,指的时跟在第l层卷积层或全连接层后的激活层。激活层的超参数为激活函数,激活函数对输入特征图中的每一个元素做计算,输出特征图由公式:
(2-4)
计算得到。常用的激活函数有sigmoid函数、tanh函数与ReLU函数,图2-2展示了这三种激活函数的图像。
图2-2 三种常见的激活函数
4、池化层
池化层又称下采样层,其作用是减少特征图的高度与宽度,所以池化层并不会改变特征图的深度。池化层跟在已激活的卷积层后,但不是所有的已激活的卷积层后都有池化层。池化层的超参数为池化尺寸、填充的大小、运算跳动的步长以及池化的方式。常用的池化方式为最大池化和平均池化,记第l层池化层输出的特征图为。平均池化输出的为:
(2-5)
可以看出,平均池化计算的是特征图确定区域内的平均值。最大池化与平均池化类似,只是提取的是特征图确定区域内的最大值。池化层输出特征图的尺寸由式:
(2-6)
确定。
5、全连接层
全连接层由若干个神经元组成,当全连接层的输入为特征图时,首先会将特征图转换成一维向量再进行处理,全连接指的是每一个神经元都会与输入向量的所有元素连接。记第l层全连接层有个神经元,输入为一维向量,大小为,那么第l层的权重为大小的数组,此外还有一加性偏置,为一实数。第l层全连接层的输出由公式:
(2-7)
计算得到,为一大小的向量。
6、输出层
卷积神经网络的输出层输出网络预测的最终结果,输出层本质上可以是卷积层或全连接层。对分类输出如判断目标的类别,常用softmax函数处理输出层的结果,使其满足随机变量概率分布的要求。对回归输出如预测目标边界框的位置与大小,常直接使用线性激活。
卷积神经网络的前馈计算为输入数字图像到输出层输出的一次完整运算。
2.1.2 深度学习中的训练与测试方法
深度学习是机器学习的一种方法,机器学习是指不通过显示编程的方式让机器具有学习的能力,所谓学习,就是让机器从已有数据中拟合输入输出关系并能给出新数据的输出预测,当已有数据中包含输出信息时,这种机器学习被称为监督学习,否则是非监督学习。在目标检测研究领域,常用的深度学习算法为监督学习。因此,当准备用于目标检测的数据集时,不仅需要收集作为学习输入的原始数字图像X,还要知道该图像中目标的类别、对应目标的边界框的位置坐标和边界框的长宽大小,这些预先准备的的输出被称为标签,用y表示。
损失函数描述了深度学习模型预测值与标签值的差别,常用的损失函数有平方差函数:
(2-8)
与对数似然函数:
(2-9)
式中,m为输入样本的数量,为第i个样本标记值,为第i个样本模型的预测值。为了减小网络预测与真实标记值的差别、让模型从数据中拟合输入输出关系,需要优化损失函数,减少损失函数的数值,常用的优化方法为梯度下降法。
对于卷积神经网络,实际上为权重与的函数,可以利用计算梯度的链式法则以及梯度的反向传播计算损失函数对每个元素以及的梯度,根据公式
(2-10)
对权重与进行更新,在实际运用时会使用向量化的计算方法共享运算,减少计算时间。式中,为学习率,代表了每次梯度下降的比例。学习率是一种超参数,它的取值需要仔细调试,如果学习率取值过大,损失可能会发散,使得网络预测的结果变差,如果学习率取值过小,则损失收敛过慢,浪费计算资源。
由于卷积神经网络中权重数量很多,当训练数据量不足时很容易产生过拟合,过拟合指的是网络模型能对训练集中的图像有较好的预测效果,但当向网络中输入新数据时,网络预测的预测效果较差,为了减少过拟合,可以为损失函数增加权重衰减项,以平方差损失为例,更新后的公式为
(2-11)
式中,为权重衰减系数,常取0.0005,是矩阵的Frobenius范数。
为了评估深度学习算法的性能,正常会把数据集分成训练集、验证集与测试集,训练集用于训练网络权重,验证集用于选择超参数,测试集用于判断模型效果,验证集有时也会并入训练集以增加数据量。当数据量较少时,训练集、验证集与测试集的比例通常为,在深度学习时代,数据量爆炸增长,如ImageNet1000分类数据集有百万级的数据,此时,只需分出几千张图片用作测试即可。
记训练集的数据量为,卷积神经网络每次输入的样本量为m,在用梯度下降法训练卷积神经网络时,根据m的大小可以将梯度下降法分成批量梯度下降法、小批量梯度下降法与随机梯度下降法。批量梯度下降法每次迭代会将训练集中的所有数据输入到卷积神经网络中,权重与需要在计算所有样本的损失后才会更新一次,虽然使用向量化的计算方法可以共享部分计算,但权重更新一次的耗时相对较高。随机梯度下降法指的是训练的每次迭代只会向卷积神经网络中输入一个样本,这样权重能非常快的更新,但需要注意的是,样本的差异性会使损失上下波动较大幅度,而且没有使用向量化运算,学习训练集所有样本一轮会花费更多时间,训练效率低。小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷选择,使用小批量梯度下降法,首先要确定批大小,批大小常取16、32、64等值,训练集会根据批大小被分成若干组,每次训练时输入一组,这么做可以使用向量化的运算方法,学习所有样本一轮速度较快,而且权重也能较快的得到更新。由于深度学习领域数据量大,批量梯度下降法与随机梯度下降法劣势明显,故小批量随机梯度下降法被广泛使用,此外,在深度学习领域,小批量梯度下降法也会被称为随机梯度下降法,但需要指出批大小的值。
在小批量梯度下降法中,为了缩小数据集不同组间的差异,常使用指数加权滑动平均算法对每次迭代计算的梯度进行修正,修正后的梯度下降法公式为
(2-12)
式中,与的初始值为0,在梯度下降法的每次迭代中更新,为动量系数,取值在区间上,表示平滑数据时所取的范围,动量系数越大,平滑的范围越广,常取0.9。
2.2 经典卷积网络模型
卷积神经网络中有相当多的超参数,如层级模型的堆叠方式、卷积层的层数、每层卷积核的大小等,这些超参数的选择对网络的性能有很大的影响,而另一方面,卷积神经网络参数数量较多,训练耗时长,通过交叉验证集选择超参数又比较困难。因此,了解一些典型的高性能卷积神经网络很有意义。典型的卷积神经网络结构有AlexNet[15]、VGGNet[16]、GoogLeNet[17]与ResNet[18],本节主要介绍VGGNet与GoogLeNet,VGGNet与GoogLeNet分别是2014年ILSVRC分类项目中的第二名与第一名。
2.2.1 VGG网络
图2-3 VGG16网络结构
VGG网络使用了5层池化层将卷积层分为5级,同一级内的卷积层卷积核数目相同,到下一级卷积层卷积核个数翻倍,直到变为512为止。所有的卷积核大小都为,每一层卷积层都进行了填充以保证特征图的高宽不变。VGGNet使用了大小的卷积核大幅加深了卷积神经网络的深度,常用的VGGNet共有16个带参数的卷积层与全连接层,被称为VGG16,图2-3展示了VGG16的网络结构。
2.2.2 GoogLeNet网络
GoogLeNet由Google公司提出,大写的L用于致敬最为经典的卷积神经网络LeNet-5。GoogLeNet主要特点是多次使用了Inception结构,Inception结构如图2-4所示。Inception结构是基于多尺度处理的理念设计而成的,包含了、、三种不同大小的卷积层以及大小的最大池化层,计算前都进行了填充处理以保证各层输出特征图的高宽一致,在和的卷积层前、池化层后都额外增加了的卷积层以减少输入特征图的深度,这有助于减少计算量。Inception结构使得卷积神经网络的宽度与深度都得到了提升。
图2-4 Inception结构
表2-1 GoogLeNet网络结构
表2-1展示了GoogLeNet网络的结构,网络总共有22层,表中的“depth”栏目指明了带参数的层,“1x1”、“3x3”、“5x5”栏目分别指明了Inception结构中、、卷积核的个数,“#3x3 reduce”、“#5x5 reduce”栏目分别指明了、前用于维度约减的卷积核数目,“pool”栏目指明了Inception结构中池化层后用于维度约减的卷积核数目。
2.2.3 dropout与批量归一化
除了使用经典的网络结构外,还可以使用一些算法提升卷积网络的性能,这些算法包括dropout与批量归一化。
dropout是一种减少过拟合的方法[19],对全连接层起作用,使用dropout需要确定舍弃比例,在训练的每一次迭代中,全连接层中的每一个神经元以舍弃比例随机从全连接层中删去,不对前层参数的梯度做贡献也不计算这个神经元参数的梯度,dropout算法简化了神经网络,减轻了网络过拟合的程度。
批量归一化[20]是一种归一化方法,在激活层前、卷积层或全连接层后进行计算,以全连接层为例,记一批图像中第i张图像在全连接层的输出为一维向量,批大小为m,批量归一化的计算为:
(2-13)
式中,与均为维向量,它们的每个元素分别是m个输入样本在该全连接层输出向量对应位置元素的均值与方差,与是需要学习的参数。可以用批量归一化对网络的每一层进行归一化,能加速网络的训练并提升网络的性能。
2.3 本章小结
本章首先介绍了卷积神经网络的结构模型,主要包括卷积层、池化层、激活层等,之后介绍了梯度下降法以及梯度下降法的一些变化方法,通过梯度下降法以及计算梯度的链式法则,网络中的参数会不断改变以拟合训练集输入图像与标记间的映射关系,最后简单介绍了VGGNet与GoogLeNet这两种典型的卷积神经网络结构以及dropout与批量归一化这两种网络优化方法。
第3章 基于Caffe框架的车辆检测算法
基于深度学习的目标检测算法中大量使用了卷积神经网络,而车辆检测算法可以通过修改目标检测算法实现。本章首先介绍了目标检测中的基本概念,包括评估目标检测器性能的指标,之后介绍了一种深度学习编程框架Caffe,最后介绍了YOLO与Faster R-CNN两种目标检测方法的基本原理并在车辆检测应用下对其作了修改。
3.1 目标检测中的基本概念
目标检测要做的是在给定图像中找出待检测目标的位置并给出目标的边界框,通常边界框由中心像素坐标与高h、宽w确定。我们将两个边界框之间的相交部分与相并部分的面积之比称为交并比IoU。
非极大值抑制NMS往往是目标检测系统的最后一步,其目的是滤除重叠的预测边界框,具体流程为:将所有预测边界框按目标得分从大到小排序,取出第一个边界框,计算其与剩余边界框的IoU值,设一阈值,删去所有的预测边界框,之后取下一个边界框继续上述步骤,直至筛选完所有边界框,留下的边界框即为最终的检测结果。
表3-1 二分类混淆矩阵
在二分类问题中,可以根据分类结果与真实标签的关系将所有样本分为四类:真正例、假正例、真反例与假反例,可由表3-1所示的二分类混淆矩阵确定。而查准率与召回率作为一种判断系统性能的指标,可由各类样本的数目计算得到,如式:
(3-1)
查准率反映了系统预测为正的样本中实际为正的比例,召回率反映了实际为正的样本中预测为正的比例。可以通过提高置信得分的阈值提升查准率,在这种情况下,只有置信得分非常高的样本才会被判为正例,与此同时,许多置信得分相对较高的实际正例会被判为反例,这会降低召回率,因此,查准率与召回率是一对矛盾值。
在目标检测领域内,同样可以使用回归率与查准率评估目标检测器的性能。设置一个阈值,给定一类目标,对于一张图像中每一个预测的边界框,首先选取与其IoU最大的那个真实边界框,如果,那么这个预测的边界框样本被记为假正例,如果且真实目标的类别与检测出的目标类别相同,这个样本则记为真正例,反之,如果但真实类别与检测出的类别不同,这个样本就被记为假正例,正常取0.5。对于同一类检测目标,如果将检测器在测试集上的所有预测边界框样本按置信得分从大到小排序,依次从头开始进行采样,采样的点数递增,采样点数的增加体现了当前目标分类阈值的减少,记测试集所有图像中真实边界框的数量为N,用TP记采样的边界框中真正例的个数,用FP记假正例的个数,通过公式:
(3-2)
计算每次采样结果的召回率与查准率,并依此绘制查准率-召回率曲线,可以通过计算曲线下的面积得出这一类别的平均查准率AP,通常使用所有类别AP的平均值mAP以评估目标检测器的检测准确度。式(3-2)中的N为标记为正的所有样本数量,是真正例与假反例数量的和,因此式(3-2)与式(3-1)并无本质区别。
除了mAP值外,评估目标检测算法性能还有另一个指标,检测速度。可以使用目标检测系统每秒处理的图像张数表示检测速度,检测速度常常与检测准确度不可兼得,需要从中取得平衡。
3.2 Caffe框架
Caffe框架的全称为Convolutional Architecture for Fast Feature Embedding,是一种C++语言实现的深度学习框架,由加州大学伯克利分校的博士生贾清扬开发实现。Caffe框架基于BSD 2许可协议开源,由伯克利人工智能研究中心与社区开发者共同维护。除了C++版本外,Caffe还提供了Python与MATLAB的接口。CUDA是由Nvidia公司提供的计算平台,对数值计算作了高性能的优化,由于Caffe还使用了CUDA,因此,当在Nvidia公司的GPU上运行Caffe时效率会比在CPU上运行Caffe更高。
由于Caffe是开源的,计算机视觉的研究者们大多都基于伯克利人工智能研究中心发行的Master分支使用C++语言实现了定制版的Caffe。虽然Caffe的版本各异,但它们都遵循同一架构。Caffe实现深度学习算法需要构建网络Net与网络求解方法Solver。Net定义了网络的结构、输入输出以及损失函数,由层次模型Layer堆叠而成,Net的输入可以是lmdb数据库形式也可以从文本文件获取数字图像位置直接读取,批大小在输入层处定义,需要注意的是,Caffe框架将损失函数看做是层级模型,其底层为网络输入的标签层与网络输出的预测层,最后的网络模型会以特定格式写入到prototxt文件中,由于Net的中网络的输入是固定的,因此,训练网络与测试网络需要生成两个prototxt文件。Solver定义了网络的求解方法,主要包括损失函数优化方法的选择、优化方法相应的参数、学习率的调整策略、迭代次数、权重的保存等,Solver的内容也会被写入到prototxt文件中。当配置好Net与Solver后,Caffe会帮助完成网络的训练。Caffe以blob的形式传递与存储数据,在卷积神经网络中,blob表现为四维数组,n是批大小,k、h、w分别为特征图的深度、高度与宽度。
Caffe框架的核心文件是由高效的C++语言与CUDA编写的,这使得Caffe的速度较快,此外Caffe还支持开源协议并提供了易使用Python与MATLAB接口,因此,Caffe在深度学习研究领域中被广泛使用。
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算法应用时的检测流程
3.4 Faster R-CNN算法
Faster R-CNN算法由区域提议网络与目标检测网络两个网络构成,这两个卷积神经网络的低层卷积层是共享的。
区域提议网络是一个全卷积网络,以任意大小的图像为输入,输出若干个感兴趣区域以及这些区域的目标得分。当共享的卷积层部分输出特征图后,区域提议网络会再堆叠一层卷积层,卷积核的大小为,对VGG16而言,这一层卷积层应有512个卷积核,这一层卷积层起着滑动窗口的作用,会将中的每一个区域转换成一个较低维度的特征向量。区域提议网络会对每个特征向量预测k个感兴趣区域以及每个区域的目标得分,即有4k个确定感兴趣区域位置与大小的回归输出以及2k个感兴趣区域是否包含目标的二分类输出,实际使用两层并行的卷积层进行预测输出,这两层卷积层分别有4k和2k个卷积核。为了减少目标尺寸变化对Faster R-CNN检测性能的影响,Faster R-CNN提出了一种anchor机制,附加的卷积层输出的每个特征向量对应了输入图像中的一个像素位置,这个位置由中区域的中心点确定,当准备区域提议网络训练数据时,以这些特征向量对应的像素为中心,确定k个区域,每个区域有确定的面积与高宽比,这些区域被称为anchor区域,与图像中任意目标标记的真实区域之间的IoU值最大或者是超过0.7的那些anchor区域被标记为正例,与图像中任意目标标记的真实区域之间的IoU值小于0.3的那些anchor区域被标记为不含有目标的反例区域,其余的区域不用于训练区域提议网络。实际上,Faster R-CNN中、,每个输出位置对应的这9个区域由、、三种面积与、、三种长宽比一一确定。训练区域提议网络时,首先会对感兴趣区域的四个预测值与标记值进行变换,变换公式为:
(3-4)
式中,为感兴趣区域的中心坐标,w和h是感兴趣区域的宽和高,、、分别是预测值、anchor区域的值、真实目标区域的值。之后,优化损失函数,区域提议网络使用的损失函数具体表现为:
(3-5)
式中,c为提议区域包含目标的分类真实值,为相应的预测值,m为批大小,用于平衡分类损失与回归损失关系,默认,为损失的平滑版本,具体为:
(3-6)
由于图像中不包含目标的anchor区域远多于包含目标的anchor区域,因此,在计算损失时不会使用所有的anchor区域做为样本,而是从正例与反例中各随机抽取128个用于训练。
图3-2 Faster R-CNN流程图
当区域提议网络生成感兴趣区域后,Faster R-CNN首先会用非极大值抑制方法并选取排名最高的若干个区域,训练时选取的典型值为2000,测试时选取300个区域。Faster R-CNN沿用了Fast R-CNN的目标检测方法,RoI池化层将处理感兴趣区域并输出维度固定的特征图。假设RoI池化层前的卷积层深度为,RoI池化层输出的特征图固定维度为,感兴趣区域在RoI输入特征图上映射区域的高宽为h、w,则RoI池化层会对感兴趣区域的映射区域做尺寸上的最大池化。目标检测网络会对每个感兴趣区域输出C+1类的softmax分类输出并对每个目标类输出边界框的修正回归值。训练目标检测网络所用的损失函数为:
(3-7)
同样为为损失的平滑版本。
既可以使用端到端的训练方法联合训练区域提议网络与目标检测网络,也可以使用一种四步的方法一次训练区域提议网络与目标检测网络。联合训练方法比四步法训练速度更快,且能取得类似的性能,使用联合训练方法时,共享的卷积层会用两个网络的损失和进行优化,两个网络特有的部分用各自的损失进行优化。
图3-2展示了Faster R-CNN的结构框图,先由区域提议网络生成300个目标候选窗,再在每个目标候选窗上进行目标检测。当使用Faster R-CNN实现车辆检测时,修改目标检测网络分类输出类别数为,额外加1是因为Faster R-CNN还会判断背景类,而YOLO通过设置确定类别的目标得分阈值完成背景的筛选,此外边界框回归输出的神经元数目为。
3.5 本章小结
本章首先介绍了目标检测中的常用概念以及评估目标检测算法的两个常用指标:mAP与检测速度,之后介绍了一种高性能的开源深度学习编程框架——Caffe,最后阐述了Faster R-CNN以及YOLO框架的具体流程并分别进行修改以实现车辆检测,将基于深度学习的目标检测算法用做车辆检测只需对卷积神经网络输出的类别数以及图像的类别标签数值做出修改。
第4章 实验仿真与性能分析
在搭建完车辆检测框架后,还需对所用的卷积神经网络进行训练。本章首先介绍了实验的环境以及所用的车辆数据集,之后使用数据集分别对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所示,式中的超参数取值为与。
(1) (2)
图4-1 (1)为使用VOC数据集训练时损失的变化,
(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所示,式中超参数的取值为。
(1) (2)
图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算法实现的车辆检测器在测试集上图像的效果。
(1) (2)
图4-5 (1)为使用VOC数据集训练时的查准率-回归率曲线,
(2)为使用车辆数据集训练时的查准率-回归率曲线
图4-6 Faster R-CNN实现的车辆检测算法在测试集上的效果
4.4 本章小结
本章阐明了实验的内容与结果,首先介绍了进行实验的软件与硬件环境,之后介绍了车辆数据集的获取来源,最后介绍了实验的具体细节与结果并对实验结果进行了分析。使用Faster R-CNN实现的车辆检测在测试集上的mAP为83.68%,检测速度为9.7FPS,使用YOLO实现的车辆检测在测试集上的mAP为70.3%,检测速度为80.7FPS。实验结果表明使用目标检测框架实现车辆检测确实可行,而且车辆检测的性能主要与所用的目标检测框架相关,使用Faster R-CNN实现的车辆检测能获得更高的检测准确度而用YOLO实现的车辆检测检测速率更快,YOLO对小目标的检测能力较弱,当car类别密集分布或者所占比例太小时,YOLO的检测准确率较低,而Faster R-CNN对目标的检测能力与训练集中的样本数量有很大关系。
第5章 总结与展望
5.1 本文总结
车辆检测作为智能交通系统与车辆驾驶技术中最基础的环节,起着至关重要的作用,为了满足安全性与实用性的要求,车辆检测应该有极高的检测准确率并且能够实现实时检测。车辆检测的性能与目标检测算法的发展息息相关,传统的目标检测方法使用了手工设计的低等级特征,检测准确率远不能满足车辆检测的安全性要求。而随着深度学习尤其是卷积神经网络的发展,基于深度学习的目标检测算法的检测准确率不断提升,研究者也致力于寻找检测准确率与检测速率之间的平衡点,这为安全与实用的车辆检测带来了曙光。本文正是基于这一现状,详细介绍了卷积神经网络的结构并用当前最为流行的两种目标检测框架实现了车辆检测。
本文使用的两种目标检测框架为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,前一种车辆检测方法检测准确度更高,但这牺牲了检测速度,后一种车辆检测方法实现了实时处理,但它的检测准确度相对较低。
5.2 工作展望
本文的实验结果展示了Faster R-CNN与YOLO这两种目标检测框架各自的优缺点,其中Faster R-CNN的检测准确率已达到83%,考虑到本文使用的车辆数据集数据量较少,当为道路上的车辆检测准备专门的数据集时,可以收集更多的数据,这在深度学习领域能有效提高网络的性能,这能使得真实环境下车辆检测的检测准确率更高。本文使用YOLO算法实现的车辆检测算法满足实时处理的需求,但需要指出的是,实验是在高性能GPU上进行的,成本较高,当将车辆检测算法移植到具有性价比的嵌入式平台上时,可以预料,检测速度会大幅下降,如果加上图像获取、通信等其他处理环节,耗时还会进一步增加。因此,如何实现检测准确度更高、速度更快的车辆检测仍是将车辆检测实际应用时所需解决的重要问题。此外,由于目标检测数据标定困难,如何在目标检测领域更多的使用非监督学习也需要更多的关注。
参考文献
[1] Viola P, Jones M. Rapid Object Detection using a Boosted Cascade of Simple Features[C]// IEEE Computer Society Conference on Computer Vision & Pattern Recognition. IEEE Computer Society, 2001:511.
[2] Dalal N, Triggs B. Histograms of Oriented Gradients for Human Detection[C]// IEEE Computer Society Conference on Computer Vision & Pattern Recognition. IEEE Computer Society, 2005:886-893.
[3] Zheng W, Liang L. Fast car detection using image strip features[C]// Computer Vision and Pattern Recognition, 2009. CVPR 2009. IEEE Conference on. IEEE, 2009:2703-2710.
[4] Lee W J, Dong S P, Dong W K, et al. A Vehicle Detection Using Selective Multi-stage Features in Convolutional Neural Networks[J]. 제어로봇시스템학회 국제학술대회 논문집, 2017.
[5] Girshick R, Donahue J, Darrell T, et al. Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2014:580-587.
[6] He K, Zhang X, Ren S, et al. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2015, 37(9):1904-1916.
[7] Girshick R. Fast R-CNN[C]// IEEE International Conference on Computer Vision. IEEE, 2015:1440-1448.
[8] Ren S, He K, Girshick R, et al. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2017, 39(6):1137-1149.
[9] 封晶. 基于区域卷积神经网络的车辆检测方法[J]. 科技广场, 2017(3):10-14…
[10] 曹诗雨, 刘跃虎, 李辛昭. 基于Fast R-CNN的车辆目标检测[J]. 中国图象图形学报, 2017, 22(5):671-677.
[11] 王林, 张鹤鹤. Faster R-CNN模型在车辆检测中的应用[J]. 计算机应用, 2018, 38(3):666-670.
[12] Redmon J, Divvala S, Girshick R, et al. You Only Look Once: Unified, Real-Time Object Detection[C]// Computer Vision and Pattern Recognition. IEEE, 2016:779-788.
[13] Liu W, Anguelov D, Erhan D, et al. SSD: Single Shot MultiBox Detector[C]// European Conference on Computer Vision. Springer, Cham, 2016:21-37.
[14] Lécun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.
[15] Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1097-1105.
[16] Simonyan K, Zisserman A. Very Deep Convolutional Networks for Large-Scale Image Recognition[J]. Computer Science, 2014.
[17] Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[J]. 2014:1-9.
[18] He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[J]. 2015:770-778.
[19] Hinton G E, Srivastava N, Krizhevsky A, et al. Improving neural networks by preventing co-adaptation of feature detectors[J]. Computer Science, 2012, 3(4):págs. 212-223.
[20] Ioffe S, Szegedy C. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift[J]. 2015:448-456.
致谢
时光似箭,岁月如梭,在这毕业论文的濒临完成之际,回首过去,似乎大学四年里发生的那些事就是在不久前,仍能历历在目。在大学生活的句号落笔之前,我想表达出我内心最真挚的情感。
首先,我要感谢苏州大学电子信息学院所有的老师们。各位老师为我的学习生活创造了一种自由和谐的环境,给予了我或学业或生活上的许多帮助。我要特别感谢我的指导老师胡剑凌教授,胡老师总是能在百忙之中抽出时间对我进行指导与督促,胡老师兢兢业业、认真负责,为我的研究生学习做了优秀的表率。
其次,我要感谢互联网上开设慕课与公开课的老师,这些互联网上的课程充实了我的课余生活,让我能在知识的海洋中搭上一艘小船,能乘风破浪,不断前行。这些老师贡献了自己的时间与学识,为全世界所有想学习想进步的人提供了平台,这种行为是无比伟大的,我要向这些老师表达由衷的感激。
然后,我想感谢我的大学同学,我们一起学习一起玩耍,这段纯洁无暇同学之情值得终身品味。
最后,我要感谢我的父母,是他们为筑起了遮风挡雨的家,正是他们对我的包容与支持,才能让我走到今天。