基于卷积神经网络的交通标志识别方法 [PDF全文]
(浙江科技学院 信息与电子工程学院,杭州 310023)
交通标志识别在自动驾驶过程中起着十分重要的作用。为了解决识别精度低的问题,提出一种基于卷积神经网络的识别方法,通过改进深度相互学习网络完成对交通标志的识别,使用ResNet-19网络作为特征提取部分,使用全局平均池化层作为分类器部分,使用交叉熵损失和相对熵损失作为损失函数部分,并增加超参数α与δ来衡量这两个损失在训练中的权重; 同时,引入一种使用不同初始值的批量归一化层训练的技巧,以此来提高模型的收敛速度。试验研究中,改进的方法用在德国交通标志识别测试集上达到了98.90%的识别精度,比改进前精度提高了2.17%,与目前优秀的交通标志识别模型相比,本方法精度仍有一定的提高。试验结果表明在复杂的环境中,本方法可以准确地识别交通标志,这为后续相关研究提供了良好的技术支持。
Traffic sign recognition method based on convolutional neural network
SHEN Yuan, ZHAO Yun
(School of Information and Electronic Engineering, Zhejiang University of Science and Technology, Hangzhou 310023, Zhejiang, China)
Traffic sign recognition plays a very important role in the process of autonomous driving. In order to solve the problem of low recognition accuracy, a recognition method was proposed on the basis of convolutional neural network. The recognition of traffic signs was completed by improving the deep mutual learning network, consisting of the ResNet-19 network functioning as the feature extraction part, the global average pooling layer as the classifier part, cross entropy loss and relative entropy loss as the loss function part with hyperparameters added to measure the weight of these two losses in training. Meanwhile, a batch normalization was introduced by using different initial values layer training techniques to improve the convergence speed of the model. In the experimental study, the improved method was used on the German traffic sign recognition test dataset to achieve a recognition accuracy of 98.90%, 2.17% higher than the accuracy prior to the improvement. Compared with the current excellent traffic sign recognition model, the accuracy of this method is still improved. The test results show that the method can accurately identify traffic signs in a complex environment, which provides sound technical support for subsequent related research.
引言

近年来,随着人工智能的迅速发展,无人驾驶离人们的生活越来越近。交通标志识别技术在自动驾驶的发展过程中起着关键作用,可以为处在无人驾驶中的车辆提供道路状况的相关信息,同时提醒无人驾驶系统调整驾驶行为,以确保车辆遵守交通规则。为了实现自动驾驶,对交通标志的准确识别极为重要。

目前的交通标志识别方法主要分为基于机器学习的方法和基于深度学习的方法。基于机器学习的识别方法指的是一些提取简单的颜色、形状等特征的方法,而基于深度学习的识别方法则是利用深度卷积计算进行特征深度提取的方法。2011年,Stallkamp等[1]提供了德国交通标志数据集并组织了相应的比赛,这吸引了大量研究者对交通标志的研究。Ciresan等[2-3]将简单的卷积神经网络用在交通标志识别上,实现了优于人眼的识别效果,进而又设计了深度神经网络对同一数据集进行识别,得到了更好的识别效果。Juriic '[4]充分使用模型轻量化策略设计了层数更多的卷积神经网络模型,实现了对多个交通标志数据集的识别。Aghdam等[5]改进了轻量化且实时的交通标志检测系统,尽管实现了实时性,但是这个系统中使用的激活函数可能对识别精度产生负面影响。孙伟等[6]将多层特征表达和极限学习机技术结合起来,实现了快速的识别。Bouti等[7]在分类阶段对模型架构进行优化,并实现道路交通标志检测和分类系统,分类精确率达96.23%。Dewi等[8]研究了各种目标检测系统与空间金字塔池化相结合的最新技术,将该技术用在交通标志识别上,得到了很好的检测效果。

上述研究大多数在模型的实时性能上展开研究,得到的模型识别精度不高。针对此问题,本研究提出了一种基于深度相互学习模型(deep mutual learning,DML)[9]的改进的交通标志识别方法,即改进的深度相互学习模型(improved deep mutual learning,IDML)。在IDML中,使用2个ResNet-19网络作为特征提取器进行特征提取,全局平均池化层(global average pooling,GAP)[10]代替全连接层(fully connected layer,FC)作为分类器,以此来减少参数量; 模型训练时的损失函数同时使用了交叉熵损失和相对熵损失,并增加超参数α与δ来衡量这两个损失在训练中的权重,相比较于直接使用二者之和,这两个超参数平衡了模型训练中两个损失在总损失中的占比,进而确保最终得到的模型是最好的。此外,还引入不同初始值的批量归一化层(batch normalization)[11]的训练技巧来提高模型的收敛速度。在特征提取阶段,没有使用池化层,而是使用步长为2的卷积进行下采样,避免了池化层带来的分辨率下降的问题。将改进后的IDML在德国交通标志识别数据集上进行验证,结果表明其有效性。

1 数据集和预处理1.1 数据集

本研究使用德国交通标志识别数据集进行模型训练和性能测试,该数据集图片的存储格式为可携像素图格式(portable pixelmap,PPM),图片的场景包含了汽车在行驶过程中可能遇到的各种情况,图片的尺寸从15×15像素到250×250像素。数据集由43个类别的51 839张图片组成,这些图片被划分为训练集和测试集,其中训练图片39 209张,测试图片12 630张。

1.2 预处理方法介绍

在预处理阶段,主要解决以下两个问题:一是图片格式的转换。相比较于PPM格式,JPG格式占用内存小,又便于查看其内容,因此将PPM格式转化为JPG格式。二是图像的增强。在传入模型之前,为了丰富数据的多样性,将JPG格式的图片再进行一系列的数据增强,以便得到一个更丰富的数据集,增强模型的识别性能[12]。预处理的主要过程如图1所示。

图1 预处理的主要过程<br/>Fig.1 Main process of preprocessing

图1 预处理的主要过程
Fig.1 Main process of preprocessing

2 试验方法

深度相互学习模型的最大特点如下:在训练时,将预处理后的图片同时输入到多个网络模型进行同时训练(本研究采取同时输入到两个网络模型的方式); 在损失函数部分,同时使用交叉熵与相对熵之和来更新网络模型的损失。交叉熵损失用于计算预测类别和标签之间即网络内部的差异,相对熵损失(Kullback-Leibler divergence,KL)用来计算两个网络模型之间的差异。图2为深度相互学习模型的工作流程。由于原模型使用的特征提取网络为参数量较多的ResNet-32,分类器使用了全连接层,在进行了大量的参数计算之后,无法使参数更新的作用最大化,因此本研究对特征提取网络和分类器进行改进。在改进的深度相互学习模型中,对原来的特征提取模块、分类器模块和损失函数部分都做了相应的改进。

图2 深度相互学习模型的工作流程<br/>Fig.2 Workflow of DML

图2 深度相互学习模型的工作流程
Fig.2 Workflow of DML

2.1 改进后网络的特征提取器2.1.1 ResNet-19骨干网络

在改进后的网络中使用ResNet-19网络作为特征提取模块,图3为ResNet-19网络的结构。该模块由1个卷积层和9个残差组成,每3个残差构成一个块,第一块由3个1模块的残差块组成,第二块和第三块的第一个残差均为2模块,后两个残差为1模块。其中1模块进行正常的特征提取,表现为不改变特征图尺寸的操作; 2模块则使用步长为2的卷积来降低图像分辨率,表现为特征图尺寸减半的操作。每个残差包含3个卷积层和2个批量归一化层,主线上的顺序是卷积层、批量归一化层、卷积层、批量归一化层。残差边上只含有卷积层。

图3 ResNet-19网络的结构<br/>Fig.3 Structure of ResNet-19 network

图3 ResNet-19网络的结构
Fig.3 Structure of ResNet-19 network

2.1.2 批量归一化

批量归一化一般会在卷积层之后,激活函数之前进行,它可以减小特征图的变化范围,加速网络训练,提高收敛速度。批量归一化的操作步骤一般为:1)将一批数据输入; 2)求取这批数据的平均值; 3)求取这批数据的方差; 4)进行归一化; 5)尺度变换。假设归一化结果输出为x,则尺度变化可以记作γx+β,γ和β均为可学习参数,分别初始化为1与0。本研究将所有残差块的最后一个批量归一化层的γ参数在初始化时都设为0,这样设置可以使得所有残差块在训练时都只返回它们的输入,模型训练时模拟了较少的网络层数,在初始阶段更易于训练。

2.2 改进后网络的分类器

图4为全连接与全局平均池化过程的对比。一般而言,卷积神经网络在经过卷积的特征提取之后,会连接图4(a)所示的全连接层进行分类,其作用是将特征图进行拉伸,进而得到单个神经元,之后这些神经元与下一层进行逐个连接。神经元连接会产生大量的参数,同时连接过于紧密在一定程度上会导致过拟合,模型的泛化能力随之降低。使用图4(b)的全局平均池化作为分类器会在一定程度上解决上述问题。全局平均池化的主要思路是视每个特征图为一个整体,对这个特征图进行平均池化,池化的尺寸即为特征图的尺寸。全局平均池化将每个特征图上所有像素值的均值作为输出结果,它是一个将特征图融合为特征点的过程。使用特征图融合为特征点过程代替了特征图拉伸过程,可以避免中间参数的计算与更新,同时也避免了特征图拉伸带来的大量特征的冗余,减少了过拟合,提高了模型的泛化能力。最终,全局平均池化输出的结果输入到softmax层中得到类别概率。

图4 全连接与全局平均池化过程对比<br/>Fig.4 Process comparison of FC and GAP

图4 全连接与全局平均池化过程对比
Fig.4 Process comparison of FC and GAP

上文定性地描述了全局平均池化相较于全连接层的优势,下面将定量阐述全局平均池化的作用。在分类器模块中,假设模型要预测出n个类别,特征提取网络最后一层输出的特征图尺寸为o×m×m,在全连接层中,将特征图进行拉伸,可以得到o×m×m个神经元,假设只连接一个全连接层,接下来是连接n个神经元进行分类,这样就会产生o×m×m×n个参数。如果用m×m的卷积核进行全局平均池化,最终得到n×1×1,即n个神经元,该操作将不产生任何参数。

总之,相比较于全局平均池化层,使用全连接层不仅参数量过大,而且容易过拟合。因此全局平均池化的使用,减少了参数量,可以节省模型参数的存储空间,同时可以作为正则,防止过拟合。此外,它还加强了特征图和类别之间的关联性,使分类性能得到提升。

2.3 改进后网络的超参数设置

本研究以深度相互学习网络中使用的两个相同的网络θ1与θ2为基础。网络模型的损失函数由两部分组成,一部分是网络模型预测的输出和标签之间的交叉熵损失LC1,另一部分损失是为了测量两个预测网络预测结果的匹配度引入的KL散度DKL(p2|p1),它是θ1与θ2两个网络之间的KL散度。LC1计算公式如下:

LC1=-∑Ni=1Mm=1I(yi,m)log2(pm1(xi))。(1)

式(1)中:M为类别,N为样本数,I(yi,m)(yi∈{1,2,…,M})为判断标签值和预测值是否相同的函数,

pm1(xi)为样本xi在经过网络模型θ1训练后得到的所属类别的概率,

式(2)中,zm1为θ1的softmax层的输出。DKL(p2|p1)计算公式如下:

式(3)中:pm2(xi)为样本xi在经过网络模型θ2训练后得到的所属类别的概率。

改进方法使用的损失函数是将两个超参数α和δ分别添加在这两部分损失前。模型训练时这两个参数也被训练,以此来获得最佳的分类性能,总损失:

式(4)中:α+δ=1。将这个总损失作为目标函数,对其求最小值来更新模型。另一个网络模型的损失同理可得。值得注意的是DKL(p1|p2)和DKL(p2|p1)是不同的,它们分别代表自身与另一个网络模型间的差异。

3 结果与分析

本研究使用设备的处理单元为G7 7790,处理器为Intel(R)CoreTM i7-9750H,CPU主频率为2.6 GHz,内存为16 GB,显卡为NVIDIA GeForce RTX 2070,显存为8 GB。操作系统为Microsoft Windows10,编译器为pycharm 2019.3.2,相关库有python 3.6.10、pytorch 1.2.0、torchvision 0.4.0,同时在数据集进行格式转化时用到了Pillow7.0.0。

3.1 数据预处理结果

图5 数据增强示例<br/>Fig.5 Examples of data augmentation

图5 数据增强示例
Fig.5 Examples of data augmentation

按照1.2节的方法对一张示例图像进行预处理,图5是数据增强的示例,以数据集中一张图片转换为JPG后的处理流程为例,详细展示了预处理阶段图片的转换、重置、垂直翻转、旋转过程。其中,为了适应模型的输入,将原始JPG图片的尺寸重置为32×32像素,然后按照0.5的概率进行垂直翻转或旋转,旋转角度在-10°~10°之间。处理完的图片就可以传入模型进行训练。

3.2 细节设置

训练时,网络模型的优化配置如下:优化器算法使用牛顿动量法,动量设置为0.9; 批大小为512,即网络模型每次读取512张图片; 迭代次数为200,即每张图片共输入模型200次。此外,本研究使用动态的学习率进行训练,初始值设置为0.1,每迭代50次,学习率减少为原来的1/10。改进后特征提取网络的细节设置见表1

表1 改进后特征提取网络的细节设置<br/>Table 1 Detail setting of improved feature extraction network

表1 改进后特征提取网络的细节设置
Table 1 Detail setting of improved feature extraction network

3.3 消融试验

表2 各方法的精度与相比于原模型的参数节约量<br/>Table 2 Precision of different methods and saving parameters compared to original model

表2 各方法的精度与相比于原模型的参数节约量
Table 2 Precision of different methods and saving parameters compared to original model

表2是各方法的精度与相比于原模型的参数节约量。下面对表2中的内容展开详细介绍:首先,原模型中使用的ResNet-32网络特征提取器与改进后模型使用的ResNet-19网络特征提取器的区别在于,前者在每个块中使用5个残差,而后者只使用3个残差,去掉了后两个残差,因此每个块后由这两个残差带来的参数就可以被去掉; 通过在原模型上使用德国交通标志测试集进行测试,可以得到96.73%的识别精度,融入改进后的特征提取器后损失了0.05%的识别精度,但节约了大量的参数,权衡利弊,我们的改进整体上不影响模型的性能。接着在原模型中加入改进后的分类器——全局平均池化层,从表1可以看出第三块的输出为8×8×43,因此使用8×8的卷积核进行全局平均池化,进一步将特征提取器得到的8×8×43特征图融合为1×1×43的特征点; 改进后分类器的使用,可以舍去由全连接层带来的巨大参数量,通过在原模型上使用德国交通标志测试集进行测试,得到的识别精度为98.88%,提高了2.15%。最后加入批量归一化策略,模型的精度提升了0.02%,达到了98.90%的识别精度,是本试验获得的最佳结果。

3.4 超参数试验

在这一阶段,将对两个超参数α和δ的值进行研究。按照α和δ之和为1的原则,进行了以下试验,α∈{0.25,0.5,0.75},对应的δ∈{0.75,0.5,0.25}。总之,我们赋予所使用的两个损失函数不同的权重,测试损失函数的不同占比在模型训练中的作用。图6为α和δ在分别取不同值时,模型的训练损失和训练精度曲线,其中图6(a)为训练损失,图6(b)为训练精度。由图6可以看出,虽然三个不同α和δ取值的模型都可以达到收敛效果,但是α和δ取值分别为0.75和0.25时,模型最先收敛至最佳; 在取值分别为0.5时,模型不稳定; α和δ分别取值为0.25和0.75时,模型收敛较慢。由此可得,当两个超参数α和δ的值分别为0.75和0.25,即交叉熵损失在总损失中占比为0.75,相对熵损失占比为0.25时,所得到的模型性能最好。

图6 训练损失和训练精度曲线<br/>Fig.6 Training loss and training accuracy curves

图6 训练损失和训练精度曲线
Fig.6 Training loss and training accuracy curves

3.5 不同方法下的识别精度对比

表3 不同模型的识别精度对比<br/>Table 3 Recognition accuracy contrast of different models%

表3 不同模型的识别精度对比
Table 3 Recognition accuracy contrast of different models%

经试验可得,当两个超参数α和δ的值分别为0.75和0.25,即交叉熵损失在总损失中占比0.75,相对熵损失占比0.25时,在德国交通标志数据集测试集上可以取得模型的最高识别精度为98.90%。同时,为了验证此方法的可靠性,在该测试集使用当前优秀的交通标志模型进行比较。不同模型的精度对比见表3,从比较结果可以看出:Arcos-Garcia等[13]使用的方法比我们提出的方法精度低0.16%,Zhou等[14]使用的方法比我们提出的方法精度低0.03%,Aghdam等[5]使用的方法比我们提出的方法精度低0.7%,Meng等[15]使用的方法比我们提出的方法精度低0.2%。我们提出的方法准确性最多提高了0.7%。对比结果表明我们提出的方法在精度方面有优势。

在测试集的12 630张图片中随机读取15张,将得到的预测结果和原标签信息进行可视化,图7即为可视化结果。图片上显示的两个数字分别代表预测类别和图片实际所属的类别。绿色数字表示预测与标签匹配,即预测正确的情况; 红色则相反。从图7中可以看出,15张图中有一张预测错误,该图片中所属类别为23,模型将其预测为20。如果用人眼去识别它,由于光线过暗,也无法确定这张图片的具体类别。其他的图片不论是在清晰度不高还是强光下,网络模型均有较好的识别效果。

图7 可视化结果<br/>Fig.7 Visualization results

图7 可视化结果
Fig.7 Visualization results

4 结 语

针对当前交通标志识别精度低的问题,笔者提出了一种改进深度相互学习模型的交通标志识别方法。在改进后的网络中,使用ResNet-19网络作为特征提取器进行特征提取,全局平均池化层作为分类器,以此来减少参数量; 损失函数同时使用了交叉熵损失和相对熵损失,并增加超参数α与δ来衡量这两个损失在训练中的权重; 引入了不同初始值的批量归一化层的训练技巧,以此来提高模型的收敛速度。另外,特征提取过程中没有池化层,而是使用步长为2的卷积进行下采样,从而大幅减少了图像分辨率的损失。正是图片在特征提取过程中保留了尽可能多的特征信息,才确保了模型的分类准确性。尽管本模型取得了不错的识别效果,但研究过程中也遇到了一些问题,从识别错误的那些图片来看,多数还是光线较暗导致的,后期的研究会结合一些可以调亮光线的机器学习方法进行研究。除此之外,更轻量化的网络也可能成为下阶段的研究目标。

参考文献