李兵 易嘉聞 黃鋒 晏鵬程 張一鳴
摘要:基于TensorFlow深度學(xué)習(xí)平臺在Python開發(fā)環(huán)境下搭建8層卷積神經(jīng)網(wǎng)絡(luò)模型。將采集自全國的原始的車牌圖片進(jìn)行定位、分割、歸一化化處理后投入卷積神經(jīng)模型進(jìn)行訓(xùn)練,并采用RELU激活函數(shù)來提高模型收斂速度,在經(jīng)過200次迭代訓(xùn)后模型精度收斂于99.95%,實(shí)際測試中隨機(jī)抽取全國各省份的車牌進(jìn)行實(shí)際預(yù)測檢驗(yàn),車牌漢字字符均預(yù)測精度為99.86%、英文字符均預(yù)測精度99.70%、數(shù)字部分均預(yù)測精度99.10%、車牌整體預(yù)測精度99.30%。
關(guān)鍵詞:深度學(xué)習(xí);卷積神經(jīng)網(wǎng)絡(luò);車牌識別;TensorFlow
中圖分類號:TP391文獻(xiàn)標(biāo)志碼:A
文章編號:2095-5383(2018)04-0028-06
車牌字符識別是交通、安防等領(lǐng)域的一項(xiàng)重要技術(shù),具有重要的實(shí)際應(yīng)用價值。近年來,國內(nèi)外廣大科研人員圍繞車牌字符識別開展了廣泛的研究,針對車牌上的字符提出了一些有針對性的算法,取得了一定的識別效果。在非機(jī)器學(xué)習(xí)方法上,文獻(xiàn)[1]提出了基于評分模型的車牌字符識別方法,首先對待識別字符進(jìn)行分區(qū),然后對分區(qū)的各個方格進(jìn)行評分,采用類似模板匹配的方式,最終得分高的字符模板作為識別結(jié)果;文獻(xiàn)[2]針對車牌字符識別中大部分單一特征提取方法在字符識別上的局限性,提出了一種車牌字符多特征提取方法,該方法具有一定的魯棒性;文獻(xiàn)[3]將尺度不變特征應(yīng)用到車牌識別系統(tǒng)中來,有效改善了不同環(huán)境、不同光照下的車牌識別結(jié)果。而在基于機(jī)器學(xué)習(xí)的識別方法上,文獻(xiàn)[4]提出了采用BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)的識別方法;文獻(xiàn)[5]提出了SVM(Support Vector Machine)和正交蓋氏矩相結(jié)合的車牌字符識別方法;文獻(xiàn)[6]采用SVM機(jī)器學(xué)習(xí)方法與HSV顏色空間和邊緣特征相結(jié)合的辦法進(jìn)行車牌位置進(jìn)行精確定位,使用BP神經(jīng)網(wǎng)絡(luò)對車牌字符進(jìn)行識別。這些方法針對特定的車牌字符,都取得了一定的識別效果。然而,基于特征的非機(jī)器學(xué)習(xí)方法[7-9]盡管不需要訓(xùn)練可以直接應(yīng)用,卻存在易受干擾,且單字符識別時間較長的問題,通用的經(jīng)典SVM和BP網(wǎng)絡(luò)方法由于受到訓(xùn)練樣本的影響,因此很多研究人員采用與其他方法相結(jié)合的方式進(jìn)行識別,影響了其應(yīng)用的通用性。
針對這些問題,本文采用TensorFlow深度學(xué)習(xí)框架,并在其平臺上搭建8層卷積神經(jīng)網(wǎng)絡(luò)來實(shí)現(xiàn)車牌數(shù)字字符識別。實(shí)驗(yàn)結(jié)果表明,本文方法在識別不同干擾程度的字符時,識別率均達(dá)到99.30%以上,具有很強(qiáng)的魯棒性。
深度學(xué)習(xí)[10-11]的概念源于對人工神經(jīng)網(wǎng)絡(luò)的研究。在本質(zhì)上是指一類對具有深層結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)進(jìn)行有效訓(xùn)練的方法。普遍認(rèn)為,深度學(xué)習(xí)正式發(fā)端于2006年,以Hinton及其合作者發(fā)表在《Neural Computatin》和《Science》上兩篇重要論文為標(biāo)志。近年來,隨著各大科技巨頭公司對深度學(xué)習(xí)研究的投入,深度學(xué)習(xí)取得了蓬勃的發(fā)展和喜人的成績,目前在深度語音識別[12]、機(jī)器視覺[13]、圖片分類領(lǐng)域[14-16]具有廣泛的應(yīng)用。
目前主流開源的深度學(xué)習(xí)框架有Google公司主導(dǎo)開發(fā)的TensorFlow,加州大學(xué)伯克利Ph.D賈楊清開發(fā)的Caffe,蒙特利爾大學(xué)Lisalab開發(fā)和維護(hù)的Theano以及Facebook的Torch。TensorFlow憑借其神經(jīng)網(wǎng)絡(luò)代碼的簡潔性,分布式深度學(xué)習(xí)算法的執(zhí)行效率以及部署的靈活性,漸漸在各種深度學(xué)習(xí)框架中占領(lǐng)地位。
2TensorFlow實(shí)現(xiàn)車牌識別
2.1TensorFlow平臺
TensorFlow是一個采用數(shù)據(jù)流圖(data graphs)用于數(shù)值計算的開源軟件庫,在其中使用圖(graph)來表示計算任務(wù),圖中的節(jié)點(diǎn)(nodes)被稱之為op(operation的縮寫)。一個op獲得0個或多個張量(Tensor),執(zhí)行計算,產(chǎn)生0個或多個Tensor。每個Tensor是一個類型化的多維數(shù)組。計算任務(wù)在被稱為會話(session)的上下文(context)中被執(zhí)行。與其他深度學(xué)習(xí)框架相比,TensorFlow具有高度的靈活性和可移植性,可以在CPU和GPU上運(yùn)行,以及臺式機(jī)、服務(wù)器以及移動終端設(shè)備上運(yùn)行。
2.2數(shù)據(jù)集
本車牌識別數(shù)據(jù)集收集自互聯(lián)網(wǎng)以及公開庫,由作者進(jìn)行整理分類,本數(shù)據(jù)集包括訓(xùn)練集圖像,訓(xùn)練集標(biāo)簽,測試集圖像,其中訓(xùn)練集共包含1 250張各省份簡寫漢字字符,3 640張各英文字母圖以及4 200張各阿拉伯?dāng)?shù)字集,每個樣本圖像為32×40像素大小,每個像素值范圍在0~255之間。圖3與圖4是部分實(shí)驗(yàn)樣本圖。
2.3代碼實(shí)現(xiàn)
原始車牌數(shù)據(jù)經(jīng)過圖像的識別、切割、灰度化后將車牌分為漢字字符部分,阿拉伯?dāng)?shù)字部分和英文字母部分。分別將其作為卷積神經(jīng)網(wǎng)絡(luò)的輸入,經(jīng)卷積神經(jīng)網(wǎng)絡(luò)處理得到識別結(jié)果。原始車牌字符圖片已裁剪為32×40的灰度化圖,在圖5中,第一層卷積層的卷積核大小設(shè)置為18×18,通過卷積運(yùn)算對原始圖片進(jìn)行特征提取,提取到16張原始圖片的低層次特征,再通過第一層2×2的池化層對提取到的低層次特征進(jìn)行取樣,第二層卷積層的卷積核大小為5×5通過與第一層池化進(jìn)行卷積運(yùn)算實(shí)現(xiàn)特征提取并得到32張高層次特征圖,再經(jīng)過1×1的池化層;最后通過全連接層實(shí)現(xiàn)第二個卷積層到輸出層的映射。
第一個卷積層(conv1),也是模型的第一層,將輸入圖片(x_image)與權(quán)重(W_con1)進(jìn)行卷積運(yùn)算,再加上偏置(b_conv1)值,將輸入的圖片權(quán)重定義為從截斷的標(biāo)準(zhǔn)差為0.1的正態(tài)分布中輸出隨機(jī)值。偏置為初始值為0.1的一維向量,權(quán)重的張量為[8,8,1,16],一維、二維表示卷積核的大小為8×8的二維向量,第三維是輸入的通道數(shù),因輸入的是原始圖片所以通道數(shù)為1,第四維是輸出的通道數(shù),即卷積運(yùn)算后生成了16張?zhí)卣鲌D,故對應(yīng)的偏置為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是進(jìn)行卷積運(yùn)算時對卷積時邊界的不同處理方法,其中SAME方法采用0 邊距來保證輸出和輸入的圖片是同樣的大小,而VALID沒有0邊距,所以經(jīng)過池化處理后,輸出的圖片比輸入的小,kernel_size表示池化卷積核的大小,pool_strides表示步長與卷積層中步長的概念一樣。這里池化在水平方向和垂直方向的步長設(shè)置為2。經(jīng)池化處理輸出得16張16×20的特征圖。
L1_pool=conv_layer(x_image,W_conv1,b_conv1,conv_strides,kernel_size,pool_strides,padding=‘SAME)
第二個卷積層(conv2)與第一個卷積層相似,僅僅在于權(quán)重和偏置形狀(sharp)的變化。與第一層相類似,卷積核大小為5×5的二維向量,輸入通道變成了32,輸出通道為32,對應(yīng)的偏置值也變?yōu)?2,經(jīng)過這一層的卷積運(yùn)算后得到的輸出為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)大小設(shè)為 [1, 1, 1, 1],對特征圖再次進(jìn)行采樣,得到32張16×20大小的特征圖。
L2_pool=conv_layer(L1_pool,W_conv2,b_conv2,conv_strides,kernel_size,pool_strides,padding=‘SAME)
全連接層(fc1)也就是模型的第五層,經(jīng)過前面兩層卷積,兩層池化的處理,將圖片的大小已縮小為16×20大小,接著加入第五層全連接層對整張圖片進(jìn)行處理,將L2_pool層輸出的特征圖調(diào)整為含有512個神經(jīng)元的行向量,然后與權(quán)重矩陣相乘,加上偏置,最后對其使用RELU激活函數(shù)。
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就是在訓(xùn)練過程中以一定的概率讓部分神經(jīng)元輸出為0,但是其當(dāng)前的權(quán)重值保持不變,下次訓(xùn)練過程中又恢復(fù)它的權(quán)重。keep_prob用來定義訓(xùn)練過程中神經(jīng)元的輸出為0的概率。
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
輸出層(fc2),采用回歸線性模型對圖片進(jìn)行分類,在對多分類問題上有很大的應(yīng)用,可以解決不同字符間的分類問題。
W_fc2=sess.graph.get_tensor_by_name(“W_fc2:0”)
定義優(yōu)化器和訓(xùn)練OP,通過構(gòu)建損失值函數(shù)(cross_entropy)調(diào)用AdamOptimizer優(yōu)化其不斷被調(diào)整參數(shù)使損失值達(dá)到最小。
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結(jié)果分析
基于卷積神經(jīng)網(wǎng)絡(luò)的車牌識別模型包括神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練和模型的應(yīng)用,每張采集好的車牌經(jīng)過定位、分割、灰度化處理后分為3個部分,省份部分(漢字字符)、城市代號以及車牌編號。將以上3個部分整理成數(shù)據(jù)集分別放入搭建好的神經(jīng)網(wǎng)絡(luò)模型中進(jìn)行200次迭代訓(xùn)練,各模型精度達(dá)
99.500 0%以上。在車牌編號模型的訓(xùn)練中,該模型的具有良好的收斂性,初始精度為2.000 0%在經(jīng)過15次迭代訓(xùn)練后精度達(dá)到
91.500 0%,其后模型精度呈現(xiàn)緩慢增加,在迭代次數(shù)到25次時精度達(dá)到95.500 0%,當(dāng)?shù)?45次時精度達(dá)到99.500 0%,其后在此精度上小幅波動,并在174次時趨于99.500 0%的穩(wěn)定精度(如圖6所示)。在城市編號模型的訓(xùn)練中,模型初始精度為2.469 1%在迭代為19次時達(dá)到95.061 7%的精度,其后在此精度下呈現(xiàn)緩慢的波動增長,并在迭代106次時達(dá)到99.510 6%的精度,其后精度趨于穩(wěn)定在
99.500 0%附近(如圖7所示)。
車牌識別模型由3部分模型組成:省份識別,城市代號識別以及車牌編號。每個模型在經(jīng)過200次迭代訓(xùn)練后,得到99.500%以上的準(zhǔn)確率后將其模型保存下來并加載測試集(見圖11),測試車牌在經(jīng)過模型的預(yù)測之后得到了車牌各部分準(zhǔn)確的識別結(jié)果,其中對于省份的識別精度達(dá)到100%(見圖8),城市編號識別率達(dá)到99.90%(見圖9),車牌編號識別精度結(jié)果達(dá)到99.80%(見圖10)。根據(jù)以上的識別結(jié)果分析得,該模型平均識別精度達(dá)到99.90%。
車牌識別模型在進(jìn)行多次迭代訓(xùn)練后模型取得了比較好的預(yù)測精度,通過該神經(jīng)網(wǎng)絡(luò)模型對從全國各省份匯集而來的車牌進(jìn)行識別,隨機(jī)選中江蘇、廣州、福建、浙江、上海等省份的車牌,并對選中省份中抽中的車牌進(jìn)行識別預(yù)測,分別統(tǒng)計該模型對漢字字符、英文字母、阿拉伯?dāng)?shù)字的預(yù)測精度,統(tǒng)計預(yù)測結(jié)果和精度如表1所示,所有車牌均識別成功,各字符間最低預(yù)測精度達(dá)98.5%以上,其中對漢字字符的平均識別精度達(dá)99.86%,英文字母的平均識別精度達(dá)99.70%,阿拉伯?dāng)?shù)字平均識別精度達(dá)99.10%,車牌平均識別精度高達(dá)99.30%以上。說明該模型具有良好的應(yīng)用價值和推廣能力。
由表2可知本文的8層卷積神經(jīng)網(wǎng)絡(luò)模型,相比于傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò),BP神經(jīng)網(wǎng)絡(luò)識別算法模型,在識別率方面有了一定的提高,且識別的波動范圍較小,對圖像的旋轉(zhuǎn),形狀變化方面有著良好的魯棒性,車牌分割處理后的結(jié)果如圖11所示。
3結(jié)論
本文通過Google的開源深度學(xué)習(xí)平臺TensorFlow搭建卷積神經(jīng)網(wǎng)絡(luò)車牌識別系統(tǒng),由于卷積神經(jīng)網(wǎng)絡(luò)對樣本的形變和畸變有一定的容忍度,通過避免顯示的特征提取過程,隱式地從訓(xùn)練樣本獲取對構(gòu)建訓(xùn)練樣本空間貢獻(xiàn)較大的特征,與傳統(tǒng)網(wǎng)絡(luò)相比有著更高的識別率和抗干擾性。通過收集的數(shù)據(jù)對模型進(jìn)行訓(xùn)練,最終對測試車牌進(jìn)行識別,各部分的平均識別精度達(dá)到99.30%以上。
參考文獻(xiàn):
[1]莫林,凌文彪,張福元,等.基于評分模型的車牌字符識別方法[J].計算機(jī)應(yīng)用與軟件,2015,32(5):203206.
[2]何兆成,佘錫偉,余文進(jìn),等.字符多特征提取方法及其在車牌識別中的應(yīng)用[J].計算機(jī)工程與應(yīng)用,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īng)網(wǎng)絡(luò)算法的車牌自動識別[J].工業(yè)控制計算機(jī), 2018,31(6):3031,34.
[5]王桂文,孫涵.基于正交蓋氏矩和SVM的車牌字符識別[J].計算機(jī)工程,2012,38(13):192195,198.
[6]曾泉, 譚北海.基于SVM和BP神經(jīng)網(wǎng)絡(luò)的車牌識別系統(tǒng)[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ī)器學(xué)習(xí)的多車牌識別算法應(yīng)用研究[J].計算機(jī)技術(shù)與發(fā)展,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的車牌識別系統(tǒng)[J].中南民族大學(xué)學(xué)報(自然科學(xué)版), 2017, 36(3):125130.
[14]歐先鋒, 向燦群, 湛西羊,等.基于CNN的車牌數(shù)字字符識別算法[J].成都工業(yè)學(xué)院學(xué)報, 2016, 19(4):2630.
[15]陳利.基于深度學(xué)習(xí)的車牌識別系統(tǒng)設(shè)計[J].計算機(jī)技術(shù)與發(fā)展, 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.