張榮梅,張 琦,陳 彬
(河北經貿大學信息技術學院,石家莊 050061)
隨著社會經濟的不斷發展,建設智能交通系統是城市交通管理的首要任務。車牌識別算法作為智能交通的重要部分,廣泛應用于停車場出入口[1]、交通違章管理以及小區進出車輛管理等多個方面。
傳統的車牌字符識別方法包括模板匹配[2]、特征統計[3]及機器學習[4]等方法,但是這些方法在進行字符識別時需要對大量車牌特征進行提取,識別效率低。而采用卷積神經網絡實現車牌字符識別,能夠自動提取車牌圖像的特征,提高車牌識別的準確率。卷積神經網絡在圖像識別處理方面有著明顯的優勢,其中LeNet-5卷積神經網絡算法已經廣泛應用于手寫數字識別、車牌識別等方面。
目前,已經有很多學者針對車牌字符識別問題提出了LeNet-5網絡結構的改進策略。劉華春[5]通過增加LeNet-5網絡的特征圖數量以及模型輸入大小來提高字符識別準確率。但是改進后的算法增加了訓練參數數量,計算耗時高。趙志宏等[6]增加了C5層特征圖數目,并將輸出層神經元個數改為76個,同時識別76個車牌漢字字符與數字/字母字符,準確率為98.68%。但是該算法增加了訓練參數數量,識別速度較慢。趙艷芹等[7]增加了卷積層的特征圖數量,去掉了一層全連接層,識別準確率為99.96%。但是,改進后的網絡結構增加了訓練參數數量,運算效率低,同時該算法沒有實現對于車牌漢字字符的識別檢測。董峻妃等[8]去除了傳統LeNet-5網絡結構中的C5層,將輸出層改為34個神經元,實現了車牌數字和字母的字符識別,準確率為99.96%。但是該算法同樣沒有實現車牌漢字字符的識別。
針對前人研究中的識別率低、運算效率低的缺點,提出了改進的Lenet-5卷積神經網絡結構,以期提高車牌字符識別的準確率和運算效率。
LeNet-5網絡結構是由Lecun等[9]在1998年提出的,但是由于當時計算機處理速度較慢,無法訓練大樣本,當時該模型并沒有被廣泛應用。而隨著計算機技術的快速發展,該模型已經應用到了很多領域。
LeNet-5網絡結構包含輸入層、卷積層、池化層、輸出層等7層網絡結構。其中,C1和C3層為卷積層,通過大小為5×5的卷積核提取圖像的局部特征得到特征圖像;S2和S4層為池化層,通過將神經元與卷積層連接,對卷積層特征圖降維采樣;F6層是全連接層,借助雙曲正切函數對權重向量與輸入向量點積運算,與C5層的全連接;輸出層包含10個神經元,分別代表0~9這10個數字,并采用徑向基函數(radial basis function,RBF)網絡連接,圖1為LeNet-5網絡的模型結構。

圖1 LeNet-5模型結構Fig.1 LeNet-5 model structure
圖1中,C1層為卷積層,包含6張28×28大小的特征圖;S2層為池化層,包含6張14×14大小的特征圖;C3層為卷積層,包含6張10×10大小的特征圖;S4層為池化層,包含16張5×5大小的特征圖;C5為卷積層,包含120張1×1大小的特征圖;F6為全連接層,包含84個神經元;輸出層包含10個神經元。
RBF的計算方式為
(1)
式(1)中:xj為全連接層中第j個神經元;yi為輸出層第i個神經元;wij為全連接層第j個神經元與輸出層第i個神經元之間的權值。
卷積層的作用是提取圖像特征數據,通過窗口滑動進行卷積計算,即卷積核在圖像中滑動,與圖像局部數據卷積生成特征圖;同時卷積層通過局部關聯的方式進行連接,每一個神經元只對周圍局部感知,最后綜合局部的特征信息得到全局特征。卷積核遍歷輸入圖像時,計算方式表示為
(2)
池化層的作用是對特征數據進行聚合,降低特征數據維度。由于數據經過卷積層后會產生多個特征平面,如果不進行降維處理會增加訓練參數數量,降低運算效率。池化的方法包括最大池化和均值池化,計算可以表示為
(3)

為了使學習到的數據特征更加全局化,數據會經過多個卷積層和池化層,再輸入到全連接層。全連接層會將池化層后的多組數據特征組合成一組信號數據輸出,進行圖片類別識別。
LeNet-5網絡結構最早是針對手寫數字識別產生的,其10個輸出神經元分別對應著0~9這10類數字。由于中國車牌字符的種類比手寫數字識別的種類多,需要對傳統的LeNet-5的網絡結構進行改進,使之適用于車牌字符種類進行識別。因此,提出了改進的LeNet-5網絡結構,在以下幾方面提出了改進。
(1)將輸入圖片歸一化為32×16像素大小。由《中華人民共和國機動車牌》(GA 36—2018)[10]得知,中國大部分的車牌字符長度和寬度分別指定為90、45 mm,長寬比例為2:1。相比于LeNet-5網絡結構的輸入圖像為32×32大小,將輸入字符圖像改進為32×16大小更加符合車牌字符的長寬比,能夠避免歸一化為32×32大小時而產生的信息丟失的情況。同時,減少輸入圖像的尺寸大小能夠網絡模型的訓練參數,提高模型的運算速率。
(2)使用修正線性單元(the rectified linear unit,ReLU)激活函數。LeNet-5網絡結構中,卷積層中激勵函數為tanh函數。但是該函數存在函數飽和,梯度消失的問題。對卷積層中的激活函數進行了改進,選用ReLU函數作為激勵函數,使激活函數導數的正數部分等于1,有利于解決梯度消失問題。
(3)取消C5層。由表1可知,LeNet-5網絡中C5層的訓練參數數量為48 120個,占整體訓練數量的80%。將LeNet-5網絡模型中的C5層去掉,改為F5全連接層,能夠將模型總體的訓練參數數量減少40 000個,提高了算法的運算效率。改進后的LeNet-5網絡后三層S4、F5以及輸出層就形成了單隱層反向傳播(back propagation,BP)神經網絡,可以用于分類輸出。
(4)引用隨機失活法(Dropout)。當模型的訓練參數過多時,容易出現過擬合的現象。為了解決這一問題,Hinton等[11]在2012年提出Dropout方法,通過在迭代訓練時根據概率值隨機刪除部分隱藏神經元來提高網絡性能。通過Dropout去除部分神經元的連接,減少參數更新的個數,增加了算法中每個神經元的獨立性,防止過擬合的情況出現。因此,在F5全連接層中加入了Dropout,并將失活概率設置為0.5,使其隨機丟棄50%的神經元。
(5)將車牌字符漢字與數字/字母分開識別。針對中國大陸車牌字符的特點,漢字字符包含31類,字母/數字字符包含34類,總共包含65類。由于訓練樣本將漢字字符與數字/字母字符一起訓練容易出現誤分類的情況,將車牌字符的漢字和數字/字母分為兩個模型識別。因此,漢字識別部分中,輸出層的神經元包含31個;數字和字母的識別部分中,輸出層的神經元包含34個。
改進后的LeNet-5網絡結構包含6層網絡,分別為1個輸入層、2個卷積層、2個池化層、1個全連接層以及輸出層,如圖2所示。C1層是由5×5的卷積核與輸入層卷積而來,生成6個28×12的特征圖像;S2層是通過大小為2×2,步長為2的采樣核對C1層中的特征圖像進行采樣得到;C3層中的特征圖尺寸為10×2,與C1層一樣,由16個大小為5×5的卷積核卷積得到;S4層中特征圖尺寸為5×1,是由C3層與2×2的采樣核降采樣得到;F5為全連接層,包含160個神經單元且每一個單元與S4層全相連;最后由輸出層由RBF函數連接。
同時,改進后的LeNet-5網絡結構與傳統LeNet-5網絡結構的對比(包括每一層網絡的尺寸以及訓練參數的個數)如表1所示。

表1 網絡結構對比Table 1 Model structure comparison

圖2 改進后的LeNet-5模型結構Fig.2 Improved LeNet-5 model structure
對于拍攝得到的車牌圖像,需要經過圖像預處理、車牌定位、字符分割等一系列流程進行處理,最后將分割好的車牌字符圖像輸送到神經網絡中進行識別。
步驟1圖像預處理。由于拍攝的原始車牌圖像存在通道數多、像素高、噪聲影響等問題,首先對其預處理操作,增強原始車牌圖像的對比度,消除圖片的噪聲。分別包括灰度化處理、高斯濾波、邊緣檢測、二值化等操作。
步驟2車牌定位。使用基于二值圖像的形態學區域填充進行車牌定位[12],掃描車牌位置的區域確定車牌位置。由于車牌圖像會呈現為矩形形狀,因此選擇相似的區域大致確定車牌位置。同時,二值化后的車牌圖像字符與車牌背景間會呈現黑白分布的情況,因此車牌字符之間會出現黑白跳變的現象,根據跳變次數精確確定車牌區域。
步驟3字符分割。采用了垂直投影法對車牌字符進行分割[13]。通過對二值化的車牌圖像垂直投影后,分析圖像像素的分布情況,再根據車牌字符的特點,選擇閾值切割車牌字符。
步驟4字符識別。將分割后的車牌字符圖像輸入到改進后的LeNet-5網絡結構中進行識別。考慮到同時對漢字、數字和字母進行識別準確率低,本文將漢字與數字/字母分來識別。
由于使用的數據集需要全國各地車輛圖片,如果全部進行拍照采集,難度非常大。因此將訓練數據分為手機拍攝和互聯網收集兩部分。第一部分是通過手機拍攝河北部分地區100張高清車牌圖像,每張圖像的分辨率為4 608×3 456;第二部分是通過百度搜索車牌圖片收集600張中國各省份的車牌圖像。采集到的所有照片包括受自然光照影響的、傾斜的等不同場景。圖3為采集的部分代表性的車牌圖片。

圖3 部分車牌圖片Fig.3 Partial license plate picture
為了增加數據集樣本數量,將采集到的車牌圖像進行了拉伸、扭曲、旋轉處理,然后將處理后的車牌圖像進行圖像預處理、車牌定位和字符分割,整理得到7 877張車牌字符圖像作為改進后網絡的訓練樣本,每個字符圖像的像素均為32×16。其中訓練集包括7 517張圖片,4 285張圖片為數字和字母,3 232張圖片為漢字;測試集包括360張圖片,200張圖片為數字和字母,160張圖片為漢字。圖4為車牌字符分割后的部分訓練樣本。

圖4 部分訓練樣本Fig.4 Partial training sample
實驗在Windows10 64位平臺環境上運行,基本配置為Intel Core i5- 4590四核處理器、8 GB DDR3內存、NVIDIA GTX1050 Ti獨立顯卡。同時使用TensorFlow開源框架驗證改進后的LeNet-5網絡的識別效果。
為了證明改進后的LeNet-5網絡結構在車牌識別中的優越性,以字符識別準確率和時間效率作為模型的評估指標。字符識別的準確率包括漢字識別和數字/字母識別兩種類別,時間效率則計算平均每張圖片的識別時間,表2為實驗結果對比。

表2 實驗結果對比Table 2 Comparison of experimental results
由表2可知,文獻[5]是將漢字字符與數字/字母字符分開識別;文獻[6]同時識別所有車牌字符;文獻[7]和文獻[8]只實現了車牌數字與字母的識別,沒有實現車牌漢字識別。
通過表2可知,本文算法對于車牌漢字字符的識別率為99%,數字字符和字母字符的識別率為99.5%,同時算法的運行效率達到了單張圖片識別時間為2.748 ms。相較于文獻[6],本文算法提高了車牌字符識別的準確率;相較于文獻[7]、文獻[8],本文算法實現了車牌漢字、數字和字母所有字符的識別;相較于文獻[5],本文算法提高了車牌字符識別的準確率,同時提高了算法運算效率。
由于當前基于LeNet-5網絡結構的車牌識別算法存在識別率低、運算時間長的缺點,提出了改進的LeNet-5結構車牌識別算法。對傳統的LeNet-5結構進行了改進與簡化,修改了網絡結構中輸入層大小以及輸出層神經元數目,同時去掉了C5層,使之適用于車牌字符識別。通過實驗表明,改進后的網絡模型對于車牌識別的準確率更高,達到了99.5%。同時,改進后的模型提高了運算效率,達到了每字符2.748 ms。
但是在實際應用中,本文算法還存在一些不足:該算法需要將車牌字符分割后,分別對車牌的漢字以及數字/字母進行識別輸出,不能直接顯示整張車牌的識別結果。在之后的研究中需要進一步優化網絡結構,提高車牌字符的識別效率。