基于TensorFlow深度学习的车牌识别算法研究
2018-05-14李兵易嘉闻黄锋晏鹏程张一鸣
李兵 易嘉闻 黄锋 晏鹏程 张一鸣
摘要:基于TensorFlow深度学习平台在Python开发环境下搭建8层卷积神经网络模型。将采集自全国的原始的车牌图片进行定位、分割、归一化化处理后投入卷积神经模型进行训练,并采用RELU激活函数来提高模型收敛速度,在经过200次迭代训后模型精度收敛于99.95%,实际测试中随机抽取全国各省份的车牌进行实际预测检验,车牌汉字字符均预测精度为99.86%、英文字符均预测精度99.70%、数字部分均预测精度99.10%、车牌整体预测精度99.30%。
关键词:深度学习;卷积神经网络;车牌识别;TensorFlow
中图分类号:TP391文献标志码:A
文章编号:2095-5383(2018)04-0028-06
车牌字符识别是交通、安防等领域的一项重要技术,具有重要的实际应用价值。近年来,国内外广大科研人员围绕车牌字符识别开展了广泛的研究,针对车牌上的字符提出了一些有针对性的算法,取得了一定的识别效果。在非机器学习方法上,文献[1]提出了基于评分模型的车牌字符识别方法,首先对待识别字符进行分区,然后对分区的各个方格进行评分,采用类似模板匹配的方式,最终得分高的字符模板作为识别结果;文献[2]针对车牌字符识别中大部分单一特征提取方法在字符识别上的局限性,提出了一种车牌字符多特征提取方法,该方法具有一定的鲁棒性;文献[3]将尺度不变特征应用到车牌识别系统中来,有效改善了不同环境、不同光照下的车牌识别结果。而在基于机器学习的识别方法上,文献[4]提出了采用BP(Back Propagation)神经网络的识别方法;文献[5]提出了SVM(Support Vector Machine)和正交盖氏矩相结合的车牌字符识别方法;文献[6]采用SVM机器学习方法与HSV颜色空间和边缘特征相结合的办法进行车牌位置進行精确定位,使用BP神经网络对车牌字符进行识别。这些方法针对特定的车牌字符,都取得了一定的识别效果。然而,基于特征的非机器学习方法[7-9]尽管不需要训练可以直接应用,却存在易受干扰,且单字符识别时间较长的问题,通用的经典SVM和BP网络方法由于受到训练样本的影响,因此很多研究人员采用与其他方法相结合的方式进行识别,影响了其应用的通用性。
针对这些问题,本文采用TensorFlow深度学习框架,并在其平台上搭建8层卷积神经网络来实现车牌数字字符识别。实验结果表明,本文方法在识别不同干扰程度的字符时,识别率均达到99.30%以上,具有很强的鲁棒性。
深度学习[10-11]的概念源于对人工神经网络的研究。在本质上是指一类对具有深层结构的神经网络进行有效训练的方法。普遍认为,深度学习正式发端于2006年,以Hinton及其合作者发表在《Neural Computatin》和《Science》上两篇重要论文为标志。近年来,随着各大科技巨头公司对深度学习研究的投入,深度学习取得了蓬勃的发展和喜人的成绩,目前在深度语音识别[12]、机器视觉[13]、图片分类领域[14-16]具有广泛的应用。
目前主流开源的深度学习框架有Google公司主导开发的TensorFlow,加州大学伯克利Ph.D贾杨清开发的Caffe,蒙特利尔大学Lisalab开发和维护的Theano以及Facebook的Torch。TensorFlow凭借其神经网络代码的简洁性,分布式深度学习算法的执行效率以及部署的灵活性,渐渐在各种深度学习框架中占领地位。
2TensorFlow实现车牌识别
2.1TensorFlow平台
TensorFlow是一个采用数据流图(data graphs)用于数值计算的开源软件库,在其中使用图(graph)来表示计算任务,图中的节点(nodes)被称之为op(operation的缩写)。一个op获得0个或多个张量(Tensor),执行计算,产生0个或多个Tensor。每个Tensor是一个类型化的多维数组。计算任务在被称为会话(session)的上下文(context)中被执行。与其他深度学习框架相比,TensorFlow具有高度的灵活性和可移植性,可以在CPU和GPU上运行,以及台式机、服务器以及移动终端设备上运行。
2.2数据集
本车牌识别数据集收集自互联网以及公开库,由作者进行整理分类,本数据集包括训练集图像,训练集标签,测试集图像,其中训练集共包含1 250张各省份简写汉字字符,3 640张各英文字母图以及4 200张各阿拉伯数字集,每个样本图像为32×40像素大小,每个像素值范围在0~255之间。图3与图4是部分实验样本图。
2.3代码实现
原始车牌数据经过图像的识别、切割、灰度化后将车牌分为汉字字符部分,阿拉伯数字部分和英文字母部分。分别将其作为卷积神经网络的输入,经卷积神经网络处理得到识别结果。原始车牌字符图片已裁剪为32×40的灰度化图,在图5中,第一层卷积层的卷积核大小设置为18×18,通过卷积运算对原始图片进行特征提取,提取到16张原始图片的低层次特征,再通过第一层2×2的池化层对提取到的低层次特征进行取样,第二层卷积层的卷积核大小为5×5通过与第一层池化进行卷积运算实现特征提取并得到32张高层次特征图,再经过1×1的池化层;最后通过全连接层实现第二个卷积层到输出层的映射。
第一个卷积层(conv1),也是模型的第一层,将输入图片(x_image)与权重(W_con1)进行卷积运算,再加上偏置(b_conv1)值,将输入的图片权重定义为从截断的标准差为0.1的正态分布中输出随机值。偏置为初始值为0.1的一维向量,权重的张量为[8,8,1,16],一维、二维表示卷积核的大小为8×8的二维向量,第三维是输入的通道数,因输入的是原始图片所以通道数为1,第四维是输出的通道数,即卷积运算后生成了16张特征图,故对应的偏置为16。
W_conv1 = tf.Variable(tf.truncated_normal([8, 8, 1, 16], stddev=0.1), name=“W_conv1”)
b_conv1= tf.Variable(tf.constant(0.1, shape=[16]), name=“b_conv1”)
第一个池化层(L1_pool),池化是一种特殊卷积形式,SAME和VALID是进行卷积运算时对卷积时边界的不同处理方法,其中SAME方法采用0 边距来保证输出和输入的图片是同样的大小,而VALID没有0边距,所以经过池化处理后,输出的图片比输入的小,kernel_size表示池化卷积核的大小,pool_strides表示步长与卷积层中步长的概念一样。这里池化在水平方向和垂直方向的步长设置为2。经池化处理输出得16张16×20的特征圖。
L1_pool=conv_layer(x_image,W_conv1,b_conv1,conv_strides,kernel_size,pool_strides,padding=‘SAME)
第二个卷积层(conv2)与第一个卷积层相似,仅仅在于权重和偏置形状(sharp)的变化。与第一层相类似,卷积核大小为5×5的二维向量,输入通道变成了32,输出通道为32,对应的偏置值也变为32,经过这一层的卷积运算后得到的输出为32张16×20大小的特征图。
W_conv2= tf.Variable(tf.truncated_normal([5, 5, 16, 32], stddev=0.1), name=“W_conv2”)
b_conv2= tf.Variable(tf.constant(0.1, shape=[32]), name=“b_conv2”)
第二个池化层(L2_pool),卷积核(kernel_size)大小设为 [1, 1, 1, 1],对特征图再次进行采样,得到32张16×20大小的特征图。
L2_pool=conv_layer(L1_pool,W_conv2,b_conv2,conv_strides,kernel_size,pool_strides,padding=‘SAME)
全连接层(fc1)也就是模型的第五层,经过前面两层卷积,两层池化的处理,将图片的大小已缩小为16×20大小,接着加入第五层全连接层对整张图片进行处理,将L2_pool层输出的特征图调整为含有512个神经元的行向量,然后与权重矩阵相乘,加上偏置,最后对其使用RELU激活函数。
W_fc1= tf.Variable(tf.truncated_normal([16*20* 32, 512], stddev=0.1), name=“W_fc1”)
h_fc1= full_connect(h_pool2_flat, W_fc1, b_fc1)
为了防止过度拟合,在输出层之前加入Dropout。Dropout就是在训练过程中以一定的概率让部分神经元输出为0,但是其当前的权重值保持不变,下次训练过程中又恢复它的权重。keep_prob用来定义训练过程中神经元的输出为0的概率。
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
输出层(fc2),采用回归线性模型对图片进行分类,在对多分类问题上有很大的应用,可以解决不同字符间的分类问题。
W_fc2=sess.graph.get_tensor_by_name(“W_fc2:0”)
定义优化器和训练OP,通过构建损失值函数(cross_entropy)调用AdamOptimizer优化其不断被调整参数使损失值达到最小。
cross_entropy=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))
train_step=tf.train.AdamOptimizer((1e4)).minimize(cross_entropy)
2.4结果分析
基于卷积神经网络的车牌识别模型包括神经网络模型的训练和模型的应用,每张采集好的车牌经过定位、分割、灰度化处理后分为3个部分,省份部分(汉字字符)、城市代号以及车牌编号。将以上3个部分整理成数据集分别放入搭建好的神经网络模型中进行200次迭代训练,各模型精度达
99.500 0%以上。在车牌编号模型的训练中,该模型的具有良好的收敛性,初始精度为2.000 0%在经过15次迭代训练后精度达到
91.500 0%,其后模型精度呈现缓慢增加,在迭代次数到25次时精度达到95.500 0%,当迭代到145次时精度达到99.500 0%,其后在此精度上小幅波动,并在174次时趋于99.500 0%的稳定精度(如图6所示)。在城市编号模型的训练中,模型初始精度为2.469 1%在迭代为19次时达到95.061 7%的精度,其后在此精度下呈现缓慢的波动增长,并在迭代106次时达到99.510 6%的精度,其后精度趋于稳定在
99.500 0%附近(如图7所示)。
车牌识别模型由3部分模型组成:省份识别,城市代号识别以及车牌编号。每个模型在经过200次迭代训练后,得到99.500%以上的准确率后将其模型保存下来并加载测试集(见图11),测试车牌在经过模型的预测之后得到了车牌各部分准确的识别结果,其中对于省份的识别精度达到100%(见图8),城市编号识别率达到99.90%(见图9),车牌编号识别精度结果达到99.80%(见图10)。根据以上的识别结果分析得,该模型平均识别精度达到99.90%。
车牌识别模型在进行多次迭代训练后模型取得了比较好的预测精度,通过该神经网络模型对从全国各省份汇集而来的车牌进行识别,随机选中江苏、广州、福建、浙江、上海等省份的车牌,并对选中省份中抽中的车牌进行识别预测,分别统计该模型对汉字字符、英文字母、阿拉伯数字的预测精度,统计预测结果和精度如表1所示,所有车牌均识别成功,各字符间最低预测精度达98.5%以上,其中对汉字字符的平均识别精度达99.86%,英文字母的平均识别精度达99.70%,阿拉伯数字平均识别精度达99.10%,车牌平均识别精度高达99.30%以上。说明该模型具有良好的应用价值和推广能力。
由表2可知本文的8层卷积神经网络模型,相比于传统的卷积神经网络,BP神经网络识别算法模型,在识别率方面有了一定的提高,且识别的波动范围较小,对图像的旋转,形状变化方面有着良好的鲁棒性,车牌分割处理后的结果如图11所示。
3结论
本文通过Google的开源深度学习平台TensorFlow搭建卷积神经网络车牌识别系统,由于卷积神经网络对样本的形变和畸变有一定的容忍度,通过避免显示的特征提取过程,隐式地从训练样本获取对构建训练样本空间贡献较大的特征,与传统网络相比有着更高的识别率和抗干扰性。通过收集的数据对模型进行训练,最终对测试车牌进行识别,各部分的平均识别精度达到99.30%以上。
参考文献:
[1]莫林,凌文彪,张福元,等.基于评分模型的车牌字符识别方法[J].计算机应用与软件,2015,32(5):203206.
[2]何兆成,佘锡伟,余文进,等.字符多特征提取方法及其在车牌识别中的应用[J].计算机工程与应用,2011,47(23):228231.
[3]ZAHEDI M, SALEHI S M.License plate recognition system based on SIFT features[J].Procedia Computer Science, 2011(3):9981002.
[4]李雅雯, 童璟芸, 胡旭东,等.基于BP神经网络算法的车牌自动识别[J].工业控制计算机, 2018,31(6):3031,34.
[5]王桂文,孙涵.基于正交盖氏矩和SVM的车牌字符识别[J].计算机工程,2012,38(13):192195,198.
[6]曾泉, 谭北海.基于SVM和BP神经网络的车牌识别系统[J].电子科技, 2016, 29(1):98101.
[7]LIU X, LIU W, MEI T, et al.A deep learningbased approach to progressive vehicle reidentification for urban surveillance[C]// European Conference on Computer Vision.Springer International Publishing, 2016:869884.
[8]LIU Y, HUANG H, CAO J, et al.Convolutional neural networksbased intelligent recognition of Chinese license plates[J].Soft Computing, 2017:117.
[9]MESNIL G, BORDES A, WESTON J, et al.Learning semantic representations of objects and their parts[J].Machine Learning, 2014, 94(2):281301.
[10]TABRIZI S S, CAVUS N.A hybrid KNNSVM model for iranianlicense
plate recognition ☆[J].Procedia Computer Science, 2016, 102:588594.
[11]鄭顾平, 闫勃勃, 李刚.基于机器学习的多车牌识别算法应用研究[J].计算机技术与发展,2018,28(6):129132.
[12]PEREIRA T, PAIVA J S, CORREIA C, et al.An automatic method for arterial pulse waveform recognition using KNN and SVM classifiers [J].Medical & Biological Engineering & Computing, 2016, 54(7):111.
[13]徐胜舟, 周煜.基于CNN的车牌识别系统[J].中南民族大学学报(自然科学版), 2017, 36(3):125130.
[14]欧先锋, 向灿群, 湛西羊,等.基于CNN的车牌数字字符识别算法[J].成都工业学院学报, 2016, 19(4):2630.
[15]陈利.基于深度学习的车牌识别系统设计[J].计算机技术与发展, 2018(6):85-89.
[16]PANDIYAN V, CAESARENDRA W, TJAHJOWIDODO T, et al.Inprocess tool condition monitoring in compliant abrasive belt grinding process using support vector machine and genetic algorithm[J].Journal of Manufacturing Processes, 2018, 31:199213.