一种改进的CNN交通标志识别算法∗

2019-12-27 06:32李亚文
计算机与数字工程 2019年12期
关键词:交通标志梯度准确率

王 博 李亚文

(商洛学院电子信息与电器工程学院 商洛 726000)

1 引言

随着我国道路交通事业的不断发展,智能交通系统(ITS)在我国也发展迅速,其在信号检测、车辆控制等方面有了广泛的应用。在智能交通领域,交通标识识别作为一项重要的研究分支,可以为导航、无人驾驶等技术提供保障,近年来受到较大的关注。2012年以来深度学习成为了学术界和工业届研究的热点问题之一。深度学习在计算机视觉、自然语言处理、大数据处理方面有着很大的优势。本文将基于深度神经网络处理计算机视觉中的交通标志识别问题,具有较大的应用价值。

早在80年代,日本就开始了交通标识识别的研究工作,其主要使用传统图像处理的方式,包括阈值分割、使用滤波器模板等方法,对一些限速标志进行检测和识别,检测任务达到/160s,识别达到1/2s[1]。Anjan Gudigar等[2]使用高阶谱(HOS)加上基于纹理特征建立一个高效的TSR模型,利用线性判别分析框架下的图嵌入子空间学习方法,提高了不同交通符号间的判别能力。比利时交通标志数据集和德国的交通标志数据集上进行测试,结果可达到98.89%。Vahid Balali等[3]提出了管道集成三维目标检测算法。基于计算机视觉的方法,通过街道级别的图像的三维点云模型检测,分类和定位交通标志。Y.Ouerhani[4]提出了一种基于道路交通标志的识别和商业viapix®模块三步法。能够在视频序列中跟踪检测到的道路交通标志,以提高系统的决策性能。这种方法可以在运输基础设施的维护和修复或驾驶辅助方面有广泛的实际应用。Yong⁃tao Yu等[5]使用深度波尔斯曼机构造出特征区域的高阶特征编码,使用3D点云并利用高斯伯努利深层分类器实现图像的识别任务。在图像交通标志识别方面,利用所提出的层次分类器,识别率达到97.54%。Ayoub Ellahyani[6]等将图像的 HOG 特征引入到HSI颜色空间来提取特征,使用随机森林和支持向量机来进行分类。在德国交通标识数据集和瑞典交通标志数据集上进行测试,得到了较好的结果。在german traffic sign benchmark上,J.Stallkamp等[7],将在不同预处理数据上训练的各种DNS组合成多列DNN(MCDNN)进一步提高识别性能,获得识别率更好的99.46%。Fatin Zaklouta等[8],使用不同梯度直方图(HOG)描述符和距离变换对K-D树和随机森林进行交通标志分类的性能评估,得到的准确率为95.68%。P.Sermanet,Y.Le⁃Cun[9]使用多尺度卷积神经网络,获得准确率为98.31%。Baris Gecer[10]使用基于颜色的退火算法,准确率为98.94%。D.Ciresan[11]等使用预处理图像和boost方法的CNN,准确率为99.46%。Baris Gec⁃er[12]使用通过3种变换的CNN,得到目前最好的准确率99.71%。

总结以上方法大体分为两类,一是使用传统的图像方法,提取特征,并结合机器学习进行分类,二是使用卷积神经网络进行端到端分类。第一类方法的准确率相对较第二类低。但有使用卷积神经网络的方法有如下缺点:1)训练超参数过多,在小数据集上,更加容易出现过拟合现象。2)增加网路深度,更容易产生梯度消失。基于以上考虑本文在卷积神经网络的技术上进行改进,在大样本训练集和小样本训练集同样提高精度,同时减少梯度弥散和过拟合问题。

2 卷积神经网络

卷积神经网络(Convolutional Neural Network,CNN)以Imagenet比赛为主线发展来的,如图1所示。ImageNet竞赛工1000类图像,图像数目大约为1.4M张,每张图片的形状为256*256*3的彩色图片。目前卷积神经网络在该数据集上的分类效果,已经超过人类的5.1%错误率,2015年的Resnet已经达到3.57%。目前主流的卷积神经网络框架有LeNet-5[13],AlexNet[14],VGG[15],GoogleNet[16],ResNet[17]等。

图1 CNN的发展

卷积神经网络是为了能够识别图像而设计的一类特殊的多层感知器,其具有很好的学习能力,较强的容错能力和并行处理能力。对图像的一些变换,比如缩放、旋转等具有很好的鲁棒性与不变性。相比传统的多层感知机,卷积神经网络能够有效的降低参数量。其特点主要有两个:1)权值共享,相同神经元共享一组权重;2)局部连接,相比于全连接层,卷积神经网络只有在nxn的卷积模板中有值,其他地方权重为0。因此卷积神经网络可以当作MLP(多层感知机)的一个特例。

CNN本质上是实现输入和输出之间的关系,可以当作端到端的应用。在图像识别和分类过程中,仅仅需要少量或者不要数据预处理就能很容易从大量训练数据集中学习到输入和输出之间的关系,不需要知道任何精确的输入与输出的数学关系表达,只需要构造自己的模型,将数据输入,进行训练即可得到输出。

CNN的训练包括两个阶段:前向传播和反向传播。

2.1 前向传播

从训练数据集中抽取样本X,将样本经过CNN模型的每一层逐步传送到输出层,得到相应的输出,表达式为

反向传播不同的应用,损失函数各有不同,这里以均方损失为例。计算出网络的输出outputP与目标label值YP之间的误差,损失函数表示为

反向传播中,使用链式法则求出损失函数对每一层权重的偏导数:∂Loss/∂Wi,∂Loss/∂bi采用梯度下降等方法按照极小化误差的方式来调整权值。

权重更新公式为

式中,Wn_new,bn_new为第n层更新后的权重和偏移量。Wn_old,bn_old为更新前的权重和偏移量。η为n层偏移量的梯度。

2.2 损失函数和优化器

损失函数(softmax corss-entropy loss)使用交叉熵损失。

假设损失函数对y的梯度为

其 中 ,Y=g(a)=g(ω*X),X∈ ℜP×P,ω ∈ ℜk×k,y=p-k+1。

其中,Xij是 X中的第i,j个图片数据,图片尺寸为k*k。

矩阵表达方式为

由式(8)可知,卷积神经网络求反向传播可以通过卷积来计算,也是一个卷积过程。

Adam 优化器(Adaptive Moment Estimation)[18]能够自动调整各个参数的学利率,达到快速收敛的目的。其学习率使用梯度的一阶矩估计与二阶矩估计是动态调整的。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。吸收了RMSProp的优点,对处理稀疏梯度和非平稳目标上有优势,同时对内存需求小,适用于大多数的凸优化问题。

上式中,mt,nt为梯度的一阶矩估计和二阶矩估计。 m̂t,n̂t是对 mt,nt的校正。 ε是用来保证式(13)中的分母非0可以得到,对梯度的矩估计可以根据当前梯度来动态调整,同时式(13)中的是对梯度更新的约束项,根据式(13)梯度边界的约束项有一定的范围。

3 改进的CNN交通标志识别算法

为了提高准确率同时针对CNN小样本情况下容易出现过拟合、容易发生梯度弥散的问题,在CNN的基础上做出改进,提出改进的CNN模型(1)和改进的CNN模型(2)两种算法,并将改进算法同时应用于大样本数据集合小样本数据集比较算法性能。

3.1 改进的CNN模型

结合GoogleNet中Inception模块构建本文的网络结构,Inception模块如图2所示,将1*1卷积、3*3卷积,3*3卷积(maxpooling),3*3卷积+3*3卷积这四个卷积的结果堆叠在一起,不仅仅增加了网络的深度,同时增加网络对不同尺度输入的适应性。本文使用两个3*3实际上可以当做一个5*5卷积的目的,这样做的好处是减少了网络参数,同时提高了计算速度。

图2 Inception模块构建

图2为构建的基本Inception模块,将每一层的Inception模块由四部分叠加组成:1*1卷积;3*3卷积跟1*1卷积;3*3卷积跟pooling层;3*3卷积跟3*3卷积跟1*1卷积。

1*1的卷积主要作用有两点:由于3×3卷积和5*5模板在filter过多时进行卷积操作比较耗时,增加1*1卷积可以在进行大模板卷积之前降维,从而提高运算速度。

1*1的卷积仍然包括非线性激活函数,因此加速1*1卷积可以在前一层学习特征的基础上提升网络整体的表达能力,而参数量只做了很小的提高。

在CNN的基本框架上增加Inception模型,改进的CNN模型1结构如图3、4所示。基本结构采用CNN网路,加Inception模块。图3改进的CNN模型1结构为:3层Inception模块加上3层全连接层,神经元个数作为参数,进行最优化处理。改进的CNN模型2在改进的CNN模型1的基础上,增加跳跃连接。这里增加两项跳跃连接:1)将输入层数据链接到Incenption2模块之后。2)将输入层数据链接到Incenption3之后。这样做尽量将原始数据的信息和当前层的信息叠加,可以在一定程度上避免梯度消失现象。

图3 改进的CNN模型1

图4 改进的CNN模型2

3.2 小样本过拟合问题

当训练样本数目较少,或者训练次数过多,模型容易出现过拟合现象。提出的解决方法如下。

训练数据预处理:对训练数据进行数据扩增和数据的归一化处理。

在改进模型中增加Dropout层,在改进模型1,2中。Drpoout层加在FC1和FC2之后,其参数用优化算法得到。

训练轮次比较多的情况下,增加回调函数,使算法在训练过程中满足一定约束条件时及时停止,约束条件主要针对val_loss,选择当连续5轮val_loss不减小时,算法调用回调函数提前停止训练。

3.3 超参数选择优化方法

深度学习中的超参数调节是一项繁重和复杂的工作,需要划分大量的时间和精力。将模型的选取和超参数的调节当做一组变量,将目标函数最小值当做目标函数,这样可以将超参数选择问题,转换为优化问题,使用优化算法来进行解决这个问题。

1)指定最小的优化函数,最小优化函数为测试集准确率的负数。

2)搜索空间,文中搜索空间包括:学习率的选择空间,批数量的选择空间,Dropout参数的选择空间和个别conv层的神经元数目选择空间。

3)使用TPE算法对超参数进行优化。

4 实验过程

实验在windows开发系统下进行,使用的硬件配置为intelE5-2630 V4处理器,RAM为16Gb,GPU为NVIDIA Quadro M2000 2G。软件使用集成开发环境Annaconda开发环境,Python3作为编程语言,模型框架使用tensorflow后台的Keras2.0GPU版本。

4.1 整体实验流程

整体的流程如图5所示,在数据集1,2,3的基础上,对各个数据集进行reshape、统计信息、可视化、数据扩增等预处理操作;建立模型,并不断在调节超参数的基础上对模型进行训练和评估,直到得到最好的模型,最后在测试数据集上进行测试。

图5 实验流程

4.2 数据集的准备和预处理

基本数据集使用目前主流的两个公开交通标志识别数据集:德国交通标志数据集(GTSRB)和比利时交通标志数据集(BelgiumTS)。为了验证算法在不同数据量下的结果。在上述两种公开数据集的基础上得到本次实验所用的3类数据集。

数据集1:德国交通标志数据集包括警示标志、禁止和限制标志等在内的43类标志,本文将训练数据集中的29406张图片按照(7.5∶2.5)分成了训练数据集和验证数据集,测试集仍然作为测试集。

数据集2:德国交通标志数据集随机取10%并按照(7.5∶2.5)分成了训练数据集和验证数据集,测试集截取10%作为仍然作为测试集,用来观测算法在小样本训练集下的表现。

数据集3:比利时交通标志数据集(BelgiumTS)分成六大类:警告标志、优先标志、禁令标志、强制性标志、与停车和在路上等待相关的标志、指示牌。总共62个类别,取4575张图片,按照(7.5∶2.5)分成了训练数据集和验证数据集。同时取1500张图片作为测试集。

在开始进行训练前,要对数据进行预处理,如图6所示。直接获得的数据集数据为.ppm格式,但是这种格式目前并不是很常用,这里使用skimage的库来将格式转换为目前常用的png格式。查看每个图片的shape并对图像reshape(使用skimage库将图像变为43*43的统一大小格式)。

图6 数据预处理

由于数据集2,3中的数据量较小,为了得到更优的结果,同时防止过拟合,使用数据扩增(data Generation)对训练数据集进行随机旋转、平移、水平镜像等操作。验证数据集不可以进行数据扩增。

对数据集3进行可视化,如图7所示,图7中在比利时交通数据集小数据集训练集中每个类别随机显示一张图片的数据。

图7 比利时交通标志数据集

4.3 超参数优化结果

对改进的CNN模型1的最优结果和超参数推荐如表1所示。对学习率lr,全连接层神经元数目,Dropout等超参数使用TPE算法,对损失函数的负值进行最小化处理,得到最优的结果和超参数。学习率lr作为一般深度学习模型中最重要的模型,应该是首先要考虑的超参数。

4.4 结果分析

将多层感知机模型、CNN模型、改进的CNN模型1、改进的CNN模型2分别在数据集1,2,3中进行训练100epoch,得到的验证集准确率和损失函数如表2所示。

表1 改进模型的TPE超参数优化

由表2可以看出,改进的算法1,2在数据集1(27000个训练样本)上的准确率分别为99.78%,99.82%。在数据集2上(2000个训练样本),改进算法1,2准确率分别为94.19%和90.68%。在数据集3上(4000个训练样本)改进算法1,2准确率分别为95.97%和95.68%。

表2 数据集1,2,3下不同算法的比较

图8 数据集1下算法损失函数和验证集准确率

图9 数据集2下算法损失函数和验证集准确率

图10 数据集3下算法损失函数和验证集准确率

改进的算法1,2在不同样本情况下训练准确率上超过传统的多层感知机(MLP)和卷积神经网络(CNN)。

图8~10为比较的四种算法在不同数据集上的损失函数和验证集准确率的训练过成可视化。从图8可以看出,改进的算法在验证集准确率收敛速度较快,在40epoch时,基本已经达到最佳转态,从Loss曲线上看,训练集loss和测试集loss中间没有间距,说明算法很好地消除了过拟合现象。在图9~10两个小样本数据集上的结果看,虽然改进的算法在准确率上略微有所下降,MLP和CNN的准确率下降幅度较大,如在数据集1下CNN准确率为86.48%,在数据集2下仅有54.46%。整体来看,改进的算法1,2在大样本和小样本数据集下均具有较好的准确率,且没有过拟合现象。

表3 数据集3下改进算法与现有算法比较

将改进算法和german traffic sign benchmark上现有最好的7种方法进行比较,如表3所示。可以看出,本文提出的改进算法1、2,在公开数据集德国交通标志数据集上的表现准确率达到99.78%和99.82%,超过之前公开的最好结果99.71%。

测试模型,将改进的模型1,2分别用于数据集1,2,3测试集中进行测试。其中改进的模型1应用于数据集1测试集表现部分结果如图11所示。

图11 测试集表现

图11中,通过上述训练的改进的CNN(1)算法,对测试集进行测试,图11中每张交通标志左上侧显示分类结果均以很大的概率正确分类。结果表明,训练的模型在小像素、昏暗、模糊等情况下均具有很高的分类效果,算法具有很好的鲁棒性。

5 结语

在数据扩增,归一化等预处理的基础上,通过加入Inception模块和跳跃链接建立改进的CNN模型1、2,并将改进算法在数据集1,2,3上分别进行训练和测试。在数据集1上,改进CNN算法1、2得到的测试集准确为99.78%和99.82%,超过了之前提出的最高99.71%的算法。同时为了验证算法在小数据量上的表现。将改进算法1、2通过只有2000多张的数据集2准确率分别为94.19%和90.68%。说明改进算法1、2不仅在大数据集下能够达到很高的准确率,同时即便是在训练数据集数据比较少的情况下,验证集准确率没有明显的下降。说明本文提出的改进算法1、2不仅在大样本训练集中准确率高同时能够应用于小样本情况下的交通标志分类任务。在昏暗,运动模糊、小像素等情况的交通标志图像均能准确识别,具有很好的鲁棒性。算法还可将在以下几个方面进一步改进:1)加入VGG等预训练模型,进一步优化初始化权重。2)可使用boost思想,将多种算法融合,最后加权取得分类结果,这样可进一步提高准确率。3)可结合yolo、SSD等图像最新目标识别算法,使算法更加具有实用性。

猜你喜欢
交通标志梯度准确率
基于应变梯度的微尺度金属塑性行为研究
基于双向特征融合的交通标志识别
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
多层螺旋CT技术诊断急性阑尾炎的效果及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
颈椎病患者使用X线平片和CT影像诊断的临床准确率比照观察
一个具梯度项的p-Laplace 方程弱解的存在性
内容、形式与表达——有梯度的语言教学策略研究
航磁梯度数据实测与计算对比研究
交通标志小课堂