刘斌,陈桂芬,董聪瀚
(长春理工大学 电子信息工程学院,长春 130022)
随着计算机技术的快速发展和人工智能技术的进步,智能交通建设和无人驾驶早已成为众多学者研究的热门方向[1,2],汽车车型识别在智能交通建设中具有重要地位,此外,汽车车型的准确识别是视频中汽车检测的前提和基础[3]。目前,从事汽车识别研究的学者较多,也取得了不错的成果,但是目前用于车辆识别的方法都需预先提取特征,如华东理工大的张雪芹等人[4]提取汽车的类Haar特征,然后利用AdaBoost算法构建分类器,进行识别汽车识别,为提高模型的识别率,张雪芹等人采用背景差分去除背景干扰;重庆交通大学的帅丹等人[5]将K-mediods算法用于非法运营车辆的识别,为提高识别率,帅丹等人基于距离贡献率改进算法,然后将提取出汽车的RFID数据预处理数据,最后利用PCA降维算法处理得到车辆运行特征数据;大连理工大学的张明恒等人[6]通过矩形度、Hu矩和Afine矩提取图像特征,然后改进经典的K-Means算法实现汽车识别;燕山大学的马雷等人[7]选取车辆底部水平方向和左右两侧垂直方向特征,结合机器学习算法识别不同车辆,为降低光照条件的影响,根据加权理论依据光强分配不同特征不同权值等。
在模式识别领域,特征提取的合理与否直接决定着识别率的高低,然而合理特征提取需要大量的实验。卷积神经网络是上世纪被提出的一种监督学习算法,一张三维的RGB图像,特征的提取和分类在模型学习过程中可以同时进行,且具有较高的识别率。在2012年Imagenet的数据集上,基于卷积神经网络的图像识别模型的图像识别错误率为4.94%,在同样的数据中,人眼辨识的错误率大概为5.1%[8]。基于此,文中提出一种卷积神经网络模型的于汽车车型的快速识别方法,为加快模型的训练,在模型中加入批归一化层。
卷积神经网络(Convolutional Neural Network,CNN)最早是在上世纪中后期被提出的一种神经网络,进入21世纪后,随着计算机计算性能的极大提高,CNN也得到了快速发展,已经成为深度学习领域最为重要的监督学习算法之一。美国科学家Hubel等人对猫的大脑皮层的研究发现,猫的脑皮层部分神经元具有方向选择与局部感知性能,且其独特的网络结构使得反馈神经元的网络模型的复杂度得到极大的降低,基于此,提出权值共享和局部相连的卷积神经网络。卷积神经网络最大优点就是一张原始的图像(任意维度)不经处理都可作为其网络的输入,且CNN通过权值共用、局部相连和下采样极大的降低网络的参数,CNN在图像识别中,具有很高的识别率,因此,不同领域的科学家都在研究CNN算法及其应用。
一般而言,最基本的CNN算法包含两层结构,一层用于特征获取,即每个神经节点与前面一层的局部感兴趣域相连接,通过学习选择性的提取感兴趣域局部特征,当某个局部特征被提取选用后,它与其它特征间的位置关系也随之确定下来;另一层结构便是特征映射,CNN结构中每一个计算层都是有许多特征映射组成,每个特征映射都是有大量权值共享的神经节点组成的面,在特征映射结构中,CNN算法一般选用relu函数作为其激活函数,使用relu函数作为其激活函数不仅可以让特征映射保持位移不变性,而且还使得CNN结构具有非线性。常用的卷积神经网络都会有卷积层、下采样层和全连接层,为改善网络的训练性能,文中在卷积神经网络中加入DropOut层或采用批归一化层(Batch Normalization)。
在卷积层,上一层的特征图(Feature map)被一个可学习的卷积核进行卷积,然后通过一个激活函数(Activation function),就可以得到输出特征图。每个输出特征图可以组合卷积多个特征图的值:
下采样层的作用就是把输入的特征图采样输出,降低特征图的数据量,采样的实现方法如下:
式中,β为采样层的权值,是用于采样后的偏置系数,down(·)为下采样方式,一般采用max(·),它作用于输入的特征图,然后采用滑动窗口的方式,将输入的特征图划分为多个n×n图像块(一般不重叠),最后将每个图像块内的像素点进行取最大值、求和或求均值。
在全连接网络中,将所有二维图像的特征图拼接为一维特征作为全连接网络的输入。全连接层l的输出可通过对输入加权求和并通过激活函数的响应得到:
其中,wlxl-1+bl称为全连接层l的净激活,它由前一层输出特征图xl-1进行加权和偏置后得到。wl是全连接网络的权重系数,bl是全连接层l的偏置项。
Dropout是深度学习领域的专家Hintion在近几年提出的一种防止模型过拟合方法,Dropout的实质就是在输出层的前一层以概率P将神经节点的输出强行置零,以1-P的概率保留神经节点的输出,以保证模型的稀疏性,从而实现网络的防过学习。关于Dropout,Hintion在论文中并没有给出具体的数学解释,只是解释说网络样本的权值在进行更新时,让神经节点以相同的概率随机起作用,于是就让网络中的2个神经节点每次不都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。
批归一化(Batch Normalization,BN),用于改善卷积神经网络性能的方法,是由两位谷歌的研究员所提出,与CNN中的卷积层或池化层一样,BN也是卷积神经网络结构中的一层,即在传统的CNN的网络中加入一层BN层,用于批数据的归一化。网络中加入Batch Normalization层可以选择比较大的初始学习率,加快模型的训练速度,此外,BN具有提高网络泛化能力的特性,降低网络的过拟合风险。
随着自动驾驶和智能交通的发展,车辆类型的准确识别变得越来越越重要,此外,车辆的准确识别,也是视频中车辆检测的前提。卷积神经网络是深度学习领域最为重要的图像识别算法,一张原始的三维或二维图象可以直接作为算法的输入,相比于传统的图像识别算法,CNN算法在图像识别中不仅省去繁琐的图像处理和特征选取工作,而且还有较高的图像识别率,文中将卷积神经网络应用于车辆类型的准确识别。
在车辆类型识别中,文中以载人车辆为研究对象,选取三种类型的载人车辆,分别为普通私家车、大客车和七座的车,每种类型的车采集240个样本图像,即共采集720张图像。每种类型的车的图像如图1所示。
图1 实验数据
图1中,A、B和C图为选取的三类车的原图,D、E和F图为其尺寸调成统一大小后的图像。在图像识别中,图像的尺寸越大,其所包含的特征信息就越多,越有利于提高模型的识别率,但尺寸越大,CNN图像识别模型的训练和识别时间就越多,为加快模型的训练,降低图像识别的时间,文中选用的图像的像素大小统一调整为48*48。
卷积神经网络最早较为成功的应用是在上世纪末的手写数字的识别,其模型结构被称为LeNet模型,该模型采用4个卷积层,每个卷积层后均连接一层下采样层。得益于计算机技术的快速发展,卷积神经网络的卷积层越来越深。2012的Alexnet模型,其卷积层有8个,该模型以绝对的优势赢得了2012年的Imagenet大赛的冠军。2014年的Imagenet大赛,亚军VGG模型有19个卷积层,冠军GoogleNet模型则采用了22个卷积层。研究表明,卷积神经网络的卷积层个数越多越有利于模型的识别率,但随着网络的加深,模型变得越来越难训练,且训练时间也呈指数增长。
为准确和快速的识别不同类型的汽车,文中设计的汽车类型识别模型采用6个卷积层,卷积层的卷积核大小均为3*3,步长为1;选用3个池化层,采用最大赤化法,池化核大小为2*2,步长为2;全连接层选用两个。此外,为改善模型的训练性能,降低模型的过学习风险,在每个池化层前均加入一层BN;文中的激活函数均采用relu。设计的卷积神经网络模型结构具体如图2所示。
文中设计的车型识别模型的每个卷积层后均连接一个激活函数,所以图2中就没有详细的写出。图2中的参数Channels为该层网络每张图片的通道数,类似于BP神经网络中每层的神经节点数。
目前,用于实现深度学习算法的主流框架有Tensorflow、Keras、Caffe和PyTorch等,谷歌公司开发的Tensorflow因编程灵活、实现相对较为容易而被广泛使用。TensorFlow为张量从流图的一端流动到另一端计算过程,可被广泛的用于语音识别或图像识别等多项机器学习和深度学习领域,文中设计的卷积神经网络在汽车类型识别模型中实现的框架选用谷歌的Tensorflow。在车型识别中,文中以载人汽车为研究对象,选择三种汽车车型,每种车型共收集图像240张。由于卷积神经网络的输入可以是一张三维的图像,所以把收集汽车图片调整统一大小后直接输入模型。在实验中,从每类汽车图片中随机选取200张用于模型的训练,剩余图像用于训练好的模型测试。模型训练时,学习率为0.001,优化函数则选用Tensorflow框架提供的AdamOptimizer()函数。
图2 模型结构
为使模型更有利于训练,将设计的识别模型选择性的加入BN层,为验证加入模型种加入的BN层的合理性,文中将未加入BN层的模型用于识别汽车车型,把结果与之对比。加入BN层和未加入BN层的识别模型的训练时的误差曲线如图3所示。
图3 模型训练误差曲线
图3中,“模型1”为卷积神经网络模型中加入BN层,“模型2”为未加入BN层的识别模型。图中两曲线的初始位置几乎重合,两模型的初始误差相同;大约经历40次迭代,加入BN层的识别模型的训练误差就已明显低于未加入BN层的训练误差;加入BN层模型的训练误差大约经历500次迭代,其训练误差就稳定的小于0.05,而未加入BN层的模型的训练误差稳定的小于0.05大约需要1100次迭代;经对比可知,加入BN层后,模型的收敛速度明显被加快,此外加入BN层后模型的收敛相对更加稳定。综上可知,文中在设计的识别模型中选择性的加入BN层是可行的,训练好的模型的汽车类型识别结果如表1所示。
表1 识别结果
表1中,模型1为加入BN层,模型2为没有加入BN层的卷积神经网络。从表1中可知,加入BN层的模型和未加入BN层的模型在训练集均达到100%识别,在测试集中的识别率均未实现100%,但是模型中加入BN层在测试集中的识别率相对高一些。模型测试结果表明,文中设计的汽车车型识别模型有较高的识别率,最高可达98.87%。此外,文中在设计的识别模型中选择性的加入BN层,降低了模型过学习风险,提高了模型在测试集的识别率。
随着人工智能的发展,智能交通的建设也在加紧步伐。汽车车型准确识别在智能交通建设中具有重要意义,此外,车型准确识别,也是视频中汽车检测的前提。文中建立了用于汽车车型识别的CNN模型,采用6个卷积层、3个池化层和2个全连接层,并选择性的加入3层批归一化层,对实现了汽车车型的识别率高达98.87%。通过实验对比,文中在设计的识别模型中加入3个BN层,能加快模型的训练速度,降低模型的过学习风险,提高车型识别率。