徐兢成,王丽华
(南京信息工程大学 自动化学院,江苏 南京 210044)
在现有的交通标志识别研究中,已经有很多方法用来识别和检测交通标志,因为交通标志具有与周边环境相比更为独特的形状和颜色特征,主要的识别方法有基于标志形状特征的识别方法、基于其颜色特征的识别方法以及结合二者主要特征加入神经网络进行智能检测的识别方法。在这些方法中,最早是由Piccioli等[1]提出的基于交通标志特定形状进行边缘检测的模板匹配识别方法,Shen等[2]利用交通标志中的R层信息对图像进行分割,大略提取出标志的候选区域进行识别的方法,后来经过相关学者的不断努力,逐渐出现了SNCC(Simplified Normalized Cross Correlation)算法等。如今对交通标志的识别大多采用多尺度多空间相结合的方式进行识别,有基于贝叶斯和马尔科夫随机场的识别方法[3]、基于OSPA(Optimal Sub-patten Assignment)距离和特征点采样的识别方法[4]以及基于卷积神经网络的识别方法。这些识别方法致力于识别交通标志的形状以及颜色特征,进行反复训练提取特征点,在大多数的识别环境下都有着不错的识别速率与正确性,但是在应对复杂环境下的标志识别时往往还不具备很好的识别效率,缺乏一定的普适性。此外,在现实环境下的标志识别中,还面临着以下几点问题:首先在具体的应用中捕捉交通标志的角度不同,对图像特征的提取是一项很大的挑战;其次,严酷的天气环境也会大大影响获取交通标志图像的质量,进一步提高了识别难度;最后,当交通标志识别运用到车辆行驶过程中时,对图像捕捉的速度,实时识别的精确度提出了更高的要求。
基于上述存在的问题,也为了能够在性能和应用条件之间起到良好的平衡[5],本文提出了一种改进的卷积神经网络架构用于道路交通标志识别,首先在数据集的处理上采用了多种方法进行数据增强,网络架构上用批归一化处理代替了原有网络的局部归一化处理,提高了网络的收敛速度,并且在最终输入全连接层之前加入了全局平均池化(Global Average Pooling,GAP)层。经过实际测试,该方法相对于传统的识别手段计算量更小,鲁棒性更好,使用泛化性更强,具备良好的应用前景。
卷积神经网络(Convolutional Neural Network,CNN)的概念取自于20世纪60年代Hubel等人在研究猫视觉皮层细胞时所提出的感受野概念(Receptive Field),然后在80年代Fukushima基于感受野概念的基础提出了神经认知器(Neocognitron)概念,这便是最初CNN实现的原型。在此之后大量的卷积神经模型相继涌现,例如LeNet AlexNet VGG NiN GooLeNet等。
传统的CNN包括输入层、卷积层、激励层、池化层和全连接层5个部分。输入层是对输入的图像进行预处理,常见的预处理方法有去均值和归一化。卷积层是对该层网络进行卷积处理,由多个特征面(Feature Map)组成,每个特征面又由多个神经元所组成,神经元通过卷积核与上一层特征面的局部相连接,卷积层通过卷积操作自主提取上层特征,因此CNN相对于传统的全神经网络而言,既是一个特征提取器又是一个分类器[6]。激励层的作用是对卷积层的输出做一次非线性映射,若没有激励层的作用,每一层输出都将与上一层输入呈现线性关系,不再具备隐层的效果[7]。激励层的激励函数有很多,例如Sigmoid、Tanh、以及ReLU函数,近些年研究中应用最多的是ReLU函数,它所具备的单边抑制性、稀疏激活性都能大大加快网络的迭代速率,降低网络复杂度与参数量,有利于网络进行训练。池化层的作用是对上层输出进行池化(Pooling)操作,旨在通过降低特征面的分辨率获取具有空间不变性的特征[8],作用是降低特征维度,减少参数数量,从而防止过拟合。常用的池化方法包括最大池化(Max Pooling)和平均池化(Average Pooling)法,本文将采用最大池化的方法。在池化层后是全连接层,全连接层用来整合卷积层或者池化层中具有区别性的局部信息,然后传输给输出层利用损失函数进行分析,从而完成分类任务。
相比于其他的神经网络结构,CNN具有局部连接、权值共享和池化的特点[9],其中局部连接使神经元只与前一输出层的局部区域相连接,权值共享的存在使所有的局部连接都使用相同的参数,最后通过池化的作用减少图片的规模,减少神经元数目,从而使网络结构的参数大大减少,计算复杂度降低,过拟合程度减少,从而使网络模型能够处理完成更加复杂的分类任务,大大提高了模型的泛化能力。
AlexNet网络模型由Hinton以及他的学生Alex Krizhevsky所设计,并在2012年的ImageNet竞赛中获得冠军,其物体分类错误率仅有16.4%,相比于传统的机器学习分类算法而言极其出色。该模型由11层组成,分别为5个卷积层、3个池化层以及3个全连接层,其中图像特征信息的提取工作主要由卷积层和池化层完成,而全连接层的作用则是整合局部特征信息,将特征信息扁平化处理,传递给Softmax层继续完成分类任务[10]。
相比于传统的CNN,AlexNet网络采用了许多有效的改动,例如采用了ReLU函数进行激活,起到稀疏网络减少参数的作用。ReLU函数的表达式如下:
ReLU(x)=max(0,x)。
(1)
其次,重叠池化(Overlapping Pooling)、局部归一化处理(Local Response Normalization)、在全连接层采用Dropout处理等等,这些操作大大减少了网络复杂度以及参数数量,提高了网络的训练速度,减少了过拟合[11]。这也是本文选用该网络的主要原因之一。
数据增强又称为数据扩增,具体表现为在不增加数据集的情况下使现有数据产生更多的使用价值。本文使用的数据集来源于互联网,为了使其具备更强的鲁棒性和泛化性能,减少过拟合,拟对所采用的数据集采用以下几类简易方法扩充数据集。
2.1.1 图像旋转
在线性代数中,如想对某一向量改变方向但不改变原有大小,可以对其乘以旋转矩阵(Rotation Matrix),其公式具体如下:
(2)
对现有的数据集分别乘以旋转矩阵,其角度分别为90°,180°,270°。理论上这样可以将现有的数据集扩大三倍,大大提高了有限数据集的利用价值,进一步提高了该网络的学习能力。图1是对图像做一次旋转变换。
图1 图像旋转变换Fig.1 Image rotation transformation
2.1.2 图像翻转
通过对图像进行简单的竖直或者水平翻转也可以有效地扩充现有的数据集,图2为图像水平翻转示意。
图2 图像水平翻转Fig.2 Image horizontal flip
2.1.3 Mixup—多样本数据增强方法
该方法是一种基于邻域风险最小化原则的数据增强方法,它使用线性插值得到新样本数据[12]。表示为:
(xn,yn)=λ(xi,yi)+(1-λ)(xj,yj),
(3)
式中,λ的取值为0~1。通过该混类数据增强方式,本实验模型的鲁棒性和泛化性得到了很大的提高。
2.1.4 颜色扰动
本文还随机对部分的图片进行了亮度和对比度的修改,以期能对不同光照条件下的图片处理能力有所提高。
本实验采用的数据集是 GTSRB-2020,来源于德国交通标志数据库,共包含43个类别的标志,总计40 000张样本。本实验使用其中所有类型,每种类型300~2 000张样本不等,样本数据类型为JPG。图片采集于各类自然环境下交通路口图景,不仅仅有该类标识清晰的样本,还有大量的低分辨率、光照强度或大或小环境下的模糊样本,此外各样本还或大或小、左右颠倒,具备了实际路况时可能发生的各种条件[13]。除此之外,为避免数据样本过少可能造成的网络模型过拟合等现象发生,通过上述各类数据增强方式,对现有样本数量进行扩大。样本用于训练集和测试集的分配比例为7∶3,另外本数据集有单独的验证集无需再进行分配。图3是本文所用到的部分数据集。
图3 数据集Fig.3 Dataset
在网络模型的训练过程中,由于每一层输入图像的特征参数一直在向前传播,进行更新,导致隐层数据的分布也会一直发生变化[14],大大降低了网络的训练速度。针对该现象,本文采用批归一化算法(Batch Normalization)对其进行优化处理,其优点是缩短训练时间、加快网络收敛、提高网络的泛化能力。该算法的原理是在每层输入时加入批归一化层,使其每一层均值为0,标准差为1,保证了数据的稳定性。主要公式如下:
(4)
(5)
(6)
(7)
式中,m为mini-batch size;ε为一个非常微小的正数;γ,β为2个可学习重构参数。首先对批样本数据进行均值μ求解,其次计算数据方差,使用求得的均值与方差对批次数据进行归一化处理,最后加入学习参数,使得输出的归一值服从标准的高斯分布。BN算法的加入使得网络的训练速度相较于以前提升了10倍左右,相较于LRN算法,是一种更为有效的归一化处理[15]。
CNN在通常的分类过程中,是对卷积层最后一层的输出特征图进行量化,量化后的结果会进入全连接层,但是全连接层结构复杂,参数较多,极易产生过拟合[16],使模型的泛化能力大大降低,于是本文采用在全连接层输入之前加入GAP层[17],对输入特征图进行全局池化,每个特征图都可以得到一个输出,大大地减少了网络参数,避免了过拟合的发生。此外,它还使得网络空间结构更具稳定性。
基于上述方法,本文网络结构用BN处理取代AlexNet网络中原有的LRN处理,在原有的全连接层之前加入GAP层并取代它。网络包含9层,输入图像的分辨率为227 pixel×227 pixel×3 pixel。第一卷积层使用步幅为4,尺寸为11×11的卷积核;第二卷积层使用步幅为1,尺寸为5×5的卷积核;之后第三、四、五卷积层均采用步幅为1,尺寸为3×3的卷积核。需要特别标注的是,对所有的卷积层使用ReLU线性激活函数,并且将原有的LRN处理全部修改为BN批归一化处理。在第一、二、五卷积层之后使用尺寸为3×3,步幅为2的池化层进行最大重叠池化处理。全局平均池化层的内核设置为3×3,最终输出的神经元数量为43,之后将所提取的特征向量输入到Softmax中用于交通标志识别分类,最终输出预测值。表1是本文网络参数设定,图4是本文网络模型结构总体框架。
表1 本文网络网络参数设定
图4 网络框架Fig.4 Network framework
表1中Type为各层类型,Conv表示卷积层,Max Pooling表示最大池化层,LRN表示局部归一化操作。第二列参数K表示各层卷积核尺寸,s表示卷积或者池化层的步幅,第三列F表示输出特征图的维度,M表示输出特征图的数量。
本实验硬件环境如下:使用一块GeForce RTX 2060显卡,CPU型号为i7-9700 k,内存16 GB,平台为Tensorflow2.4,操作系统为Windows10。在训练和测试过程中,本网络模型采用交叉熵作为损失函数,用Adam算法迭代训练和测试网络参数,初始学习率设置为0.001。Batchsize设置为64,训练迭代50次。
基于2.2中的数据集,对其进行数据增强后,分别在经典网络模型AlexNet上和作者所优化卷积网络模型上运行,epoch均为50次,最终得到数据结果,表2为2种模型的性能比较,2个模型的在验证集上的表现性能也绘制出了准确度曲线,如图5和图6所示。
表2 2种模型的表现性能
图5 Alex网络准确率曲线Fig.5 Alex network accuracy curve
图6 本文网络准确率曲线Fig.6 Proposed network accuracy curve
改进模型相较于原始网络不仅是准确度得到了提高,收敛速度也得到了大大提高,二者单次迭代的处理速度比较如表3所示。
表3 2种网络单次迭代速度比较
可以看出,本文优化过后的网络相比于之前的网络准确性与鲁棒性都有了很大的提高,传统网络即使迭代多次会仍会出现准确率忽大忽小的问题,而这些在本文网络中都得到了很好的解决。除此之外观察图5和图6,还可以发现网络不仅仅是准确率得到了提高,收敛速度也明显加快。这不仅仅得益于合理的Dropout系数设置,也得益于本文批归一化处理和全局平均池化层的处理,这2种处理大大加快了网络的处理速度,减少了网络参数数量。
在实验过程中还发现,进行有效的数据预处理也能起到优化的作用,本文在采用GTSRB数据集时,通过Python将数据集格式转为JPG类型之后,在输入网络之前全都裁剪成了224×224像素大小的尺寸,与不进行数据预处理相比,网络效果有一定的改善。此外本文所提及的数据增强的方法,在实际网络模型训练过程中为解决样本可能过少而引起的过拟合问题,也有一定的帮助。
本文提出了一种基于AlexNet网络优化的CNN模型的交通标志识别方法,与原有的网络相比,创造性地引入了全局平均池化层,大大减少了网络的处理深度。本文使用GTSRB数据集进行实验,实验结果表明,本文提出的改进AlexNet网络大大地提高了对交通标志的识别精度,并且网络的参数量以及过拟合程度减少了很多,进一步促进了网络模型的训练。下一步工作要把网络模型结构作进一步改进,加宽加深,使网络的识别速度与精度得到进一步提高。从而在现实交通环境下实现对多种复杂的交通标志进行识别处理,真正意义上实现交通网络的智能化。