劉永雪, 李海明
(上海電力大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 上海 200090)
在車牌號識(shí)別模型中,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型輸入層的每一個(gè)神經(jīng)元代表一個(gè)車牌號圖片中提取出的像素值。但這種模型用于車牌號識(shí)別存在若干問題,一是每相鄰兩層的神經(jīng)元都是全相連,產(chǎn)生大量參數(shù),使模型訓(xùn)練時(shí)間受到限制;二是堆疊更多的層次導(dǎo)致訓(xùn)練時(shí)間指數(shù)倍增長,訓(xùn)練效果受到限制。尤其是汽車車牌號的位置受外界環(huán)境因素影響較大,因此傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)已不能有效解決以上這些問題。這就需要運(yùn)用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)來操作。CNN使用了共享卷積核,可以毫無壓力地處理高維數(shù)據(jù),快速訓(xùn)練,使得采用多層神經(jīng)網(wǎng)絡(luò)變得容易,從而提高識(shí)別準(zhǔn)確率。
在圖像識(shí)別領(lǐng)域的每一個(gè)重大突破無一不是用到了CNN。CNN可以直接將圖像數(shù)據(jù)作為輸入,不僅無需人工對圖像進(jìn)行預(yù)處理和額外的特征提取等復(fù)雜操作,而且以其特有的端到端的特征提取方式,避免了圖像變形產(chǎn)生的特征提取不夠精確等問題[1]。
但是CNN也存在一些缺點(diǎn),比如訓(xùn)練時(shí)間長或者模型準(zhǔn)確率不夠高的問題,采用梯度下降算法很容易使訓(xùn)練結(jié)果收斂于局部最小值而非全局最小值,池化層可能丟失大量有價(jià)值的信息,從而忽略局部與整體之間的關(guān)聯(lián)性。為了使CNN更適用于實(shí)際應(yīng)用,使用分層生成模型來處理高維圖像以達(dá)到較高的準(zhǔn)確率[2]。卷積是神經(jīng)網(wǎng)絡(luò)的核心計(jì)算之一,其計(jì)算復(fù)雜,模型運(yùn)行大部分時(shí)間都耗費(fèi)在卷積過程中,因此優(yōu)化卷積計(jì)算來改進(jìn)模型具有可行性。
本文通過改進(jìn)的CNN搭建框架,利用采集的有效數(shù)據(jù)集經(jīng)過充分的訓(xùn)練得出高效的識(shí)別模型,并經(jīng)過測試識(shí)別給出的車牌號圖片。
與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)相比,CNN除了輸入層和輸出層,其隱層中又包含多個(gè)卷積層和子采樣層。CNN模型結(jié)構(gòu)如圖1所示。
圖1中CNN的輸入層是原始輸入圖像,在車牌號識(shí)別模型中即車牌號圖像,CNN能夠自動(dòng)處理并提取圖像特征,完全不需要手動(dòng)輸入車牌號圖像的提取特征。其卷積層C1中包含若干卷積核分別對輸入車牌號圖像進(jìn)行處理,生成對應(yīng)的卷積特征圖,之后進(jìn)行綜合操作,得到全部的特征。采樣層S2對卷積層C1 中的卷積特征圖進(jìn)行局部特征提取,生成相應(yīng)的子采樣特征圖。卷積層C3 和 采樣層S4 重復(fù) C1 和 S2 的動(dòng)作。CNN模型的隱層一直重復(fù)這樣的結(jié)構(gòu),使用“卷積 + 采樣” 的結(jié)構(gòu)進(jìn)行特征提取,壓縮數(shù)據(jù)和參數(shù)的數(shù)量,增加生成特征圖的數(shù)量,更高層次對局部進(jìn)行操作,得到全局的特征信息。最后得到的特征圖片全部展開構(gòu)成全連接層,全連接層與輸出層(即分類器)采用全連接的方式得到最后的識(shí)別到的車輛信息。
本文采用的實(shí)驗(yàn)方法是把車牌號的圖片經(jīng)過圖像定位分割處理,分為相關(guān)省份簡稱、城市代碼和編號3部分,并分別建立模型進(jìn)行訓(xùn)練,最后測試該模型的識(shí)別準(zhǔn)確率。
人腦識(shí)別圖片的過程,并不是一步將整張圖片同時(shí)識(shí)別,而是對圖片中的每一個(gè)特征進(jìn)行局部感知。CNN模型與人腦識(shí)別圖片類似,每個(gè)卷積核對應(yīng)一個(gè)感受野,每個(gè)神經(jīng)元只感受局部的圖像區(qū)域。即輸入項(xiàng)的局部子矩陣與局部過濾器做運(yùn)算,輸出結(jié)果為卷積輸出矩陣的對應(yīng)維數(shù)。在CNN結(jié)構(gòu)中,不僅卷積核個(gè)數(shù)對識(shí)別精度有影響,卷積核大小的設(shè)置也很關(guān)鍵,而激活函數(shù)的選取更是決定了算法的時(shí)間效率[3]。為了得到更好的數(shù)據(jù)表現(xiàn)形式,卷積層往往有多個(gè)局部過濾器來形成多個(gè)輸出矩陣,運(yùn)算過程如下
(1)
式中:l——建立模型的層數(shù);
f——選取的激活函數(shù);
Mk——l-1層的第k個(gè)特征圖;
理論上,卷積核越小,提取得到的特征越精細(xì)。但是,卷積核太小也是不好的,只有使用很多卷積核的模型性能才會(huì)得到提升。另外,由于實(shí)際采集到的車牌號圖像會(huì)因?yàn)楦g或者生銹產(chǎn)生噪聲污染,如果卷積核的設(shè)置過小,很容易提取到一些無用有干擾的特征信息[4]。
CNN模型的池化層也稱下采樣層,是進(jìn)一步縮小特征維數(shù),同時(shí)減小過擬合和提高容錯(cuò)性的過程。池化層可以通過最大池化或者平均池化的方法來構(gòu)造。上層卷積層的信息作為池化層的輸入信息,池化后的輸出結(jié)果又成為輸入信息傳給下一層卷積層[5]。
假設(shè)輸入的車牌號特征圖為矩陣F,池化層采樣的池化域?yàn)閏×c的矩陣P,偏置為b2,得到的子采樣特征圖為S,池化過程中的移動(dòng)步長為c。平均池化方法采用局部求均值的方法進(jìn)行降維,運(yùn)算過程如下
(2)
最大池化法的運(yùn)算過程如下
(3)
傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)是直接將灰度圖像作為原始數(shù)據(jù)輸入,只需要單通道便可在網(wǎng)絡(luò)中進(jìn)行訓(xùn)練和識(shí)別。HE S F等人[6]提出一種針對彩色圖像的3通道輸入的方案,即先對輸入圖像進(jìn)行多尺度超像素分割,得到3個(gè)通道的輸入序列,每個(gè)通道參數(shù)可以不同,然后將 3個(gè)通道的信息輸入CNN進(jìn)行訓(xùn)練,原始圖片與卷積核中通道個(gè)數(shù)相等,最后輸出圖像的信道數(shù)取決于卷積核的個(gè)數(shù)。
傳統(tǒng)神經(jīng)網(wǎng)絡(luò)沒有明確限制卷積核的大小和數(shù)量,而是采用迭代算法訓(xùn)練整個(gè)模型,隨機(jī)設(shè)定初值,計(jì)算當(dāng)前的輸出,采用隨機(jī)梯度下降法去改變前面各層的參數(shù),直到網(wǎng)絡(luò)收斂。BP算法作為傳統(tǒng)多層神經(jīng)網(wǎng)絡(luò)的典型算法,容易造成模型收斂到局部最優(yōu)值而非全局最優(yōu)。有研究者在通過CNN進(jìn)行圖像識(shí)別時(shí),提出將卷積核改進(jìn)到加權(quán) PCA 矩陣的形式,采用雙層卷積網(wǎng)絡(luò)結(jié)構(gòu),即先對圖像分塊,之后將每小塊進(jìn)行映射,映射結(jié)果都進(jìn)行碼本聚合,產(chǎn)生最終特征向量[7]。汽車在經(jīng)過長時(shí)間的使用后,車牌號所在的鋼板會(huì)受到不同程度的損害,車輛識(shí)別碼也會(huì)有不同程度的腐蝕,圖片質(zhì)量受到影響,所以這種方法同樣也可以應(yīng)用到車牌號的識(shí)別中,陰天晴天、室內(nèi)室外同樣可以取得良好的特征提取。
CNN的關(guān)鍵部分之一是激活函數(shù)的選取。激活函數(shù)是在神經(jīng)元上運(yùn)行的非線性函數(shù),將輸入映射到輸出端,使神經(jīng)網(wǎng)絡(luò)可以任意逼近非線性函數(shù),從而應(yīng)用到眾多的非線性模型中[8]。常見的激活函數(shù)有 sigmoid 函數(shù)和tanh函數(shù)。sigmoid 函數(shù)在梯度反向傳導(dǎo)時(shí)發(fā)生梯度消失的概率比較大,tanh函數(shù)解決了sigmoid 函數(shù)不是零輸出問題,但是梯度消失和冪運(yùn)算的問題仍然存在。稀疏性越大,提取出來的特征就越具有代表性。糾正線性單元(Rectified Linear Units,ReLU)函數(shù)增大了網(wǎng)絡(luò)的稀疏性,具體運(yùn)算方式如下
h(i)=max(w(i)Tx,0)=
(4)
其原理是當(dāng)卷積計(jì)算的值小于零時(shí),輸出函數(shù)值等于零;否則輸出值保持原來的值不變。ReLU函數(shù)是一種直接強(qiáng)制某些數(shù)據(jù)為零的方法,輸出為零時(shí),訓(xùn)練完成后為零的神經(jīng)元越多,稀疏越大,泛化能力越強(qiáng),無梯度耗散問題,收斂速度較快,但同時(shí)也可能造成很多無用的神經(jīng)元[8]。
池化層最常見的兩種方法是平均池化法和最大池化法。這兩種方法都不能很好地提取池化域的特征。為了改進(jìn)池化模型的算法,文獻(xiàn)[9]提出了一種基于最大池化算法的動(dòng)態(tài)自適應(yīng)池化算法,針對不同的特征圖像,可以動(dòng)態(tài)調(diào)整池化的過程,然后根據(jù)不同池化域的內(nèi)容,自適應(yīng)地調(diào)整池化權(quán)值。假如池化域中僅有唯一值,該值就是最大值,即特征表示。本文在最大池化算法的基礎(chǔ)上,利用插值原理,構(gòu)建模型進(jìn)行函數(shù)模擬。假設(shè)μ表示池化因子,則基于最大池化算法的動(dòng)態(tài)自適應(yīng)算法表達(dá)式如下
(5)
動(dòng)態(tài)自適應(yīng)算法的原理是通過池化因子μ對最大池化算法進(jìn)行優(yōu)化,改進(jìn)后的方法能更準(zhǔn)確地提取特征。其余參數(shù)設(shè)置與最大池化模型一致。
池化因子μ的計(jì)算方法如下
(6)
式中:a——池化域中除最大值外所有值的平均值;
vmax——池化域中的最大數(shù)值;
θ——校正誤差項(xiàng);
ρ——特征系數(shù)。
特征系數(shù)ρ的計(jì)算方法如下
(7)
式中:c——池化域的邊長;
nepo——迭代次數(shù)。
池化因子μ的取值受到特征系數(shù)ρ與池化域中各數(shù)值的影響。因此,當(dāng)池化域大小確定,迭代周期不變時(shí),池化因子就能根據(jù)池化域的不同而變化;當(dāng)在同一池化域時(shí),池化因子則會(huì)因?yàn)榈螖?shù)的不同,自動(dòng)調(diào)整到最優(yōu)值。池化因子μ∈(0,1),這樣在處理最大值明顯的池化域時(shí)也不會(huì)丟失太多精度,在處理其他池化域時(shí)弱化最大池化的影響,從而使模型在不同的迭代次數(shù)下處理不同的池化域時(shí)都可以提取到更為精確的特征。
本文搜集經(jīng)過圖像定位分割處理后的車牌號,共3部分,分別為相關(guān)省份簡稱(如粵、蘇、滬、浙、閩、京等)37個(gè)、城市代碼(大寫英文字母26個(gè))、編號(數(shù)字0~9和24個(gè)大寫英文字母的組合),共約1萬張圖片作為訓(xùn)練集和測試集。每個(gè)圖片都是二值化后的灰度圖。樣例如圖3所示。
圖2 分割后的車牌號字符數(shù)據(jù)集樣例
根據(jù)車牌的省份簡稱、城市代碼、編號3個(gè)部分的數(shù)據(jù)集,分別建立CNN模型。首先,進(jìn)行圖片處理,用PIL庫把數(shù)據(jù)集中的灰度圖轉(zhuǎn)換成需要的數(shù)據(jù)形式,之后用Python+TensorFlow深度學(xué)習(xí)框架搭建3個(gè)CNN模型并訓(xùn)練分類器,用測試集測試訓(xùn)練出來的分類器。3個(gè)部分采用同一個(gè)CNN結(jié)構(gòu),但是每個(gè)網(wǎng)絡(luò)結(jié)構(gòu)里面的具體參數(shù)是各自獨(dú)立的。
輸入層大小為20×20,第一層卷積C1的卷積核大小為8×8,卷積核個(gè)數(shù)為16,Stride 步長為1,Same 卷積。第二層卷積C2的卷積核大小為5×5,卷積核個(gè)數(shù)為32,Stride 步長為1,Same卷積。最后一層為分類層,神經(jīng)元個(gè)數(shù)表示類別個(gè)數(shù)。省份簡稱模型只有6類有效;所屬城市區(qū)域模型有26類有效;編號模型有34個(gè)神經(jīng)元有效。
初始化用saver函數(shù),激活函數(shù)為relu,設(shè)置每次訓(xùn)練的輸入個(gè)數(shù)和迭代次數(shù),為了支持任意圖片總數(shù),定義了一個(gè)余數(shù)remainder。譬如,如果每次訓(xùn)練的輸入個(gè)數(shù)為60,圖片總數(shù)為150張,則前面兩次各輸入60張,最后一次輸入30張(余數(shù)為30)。每完成5次迭代,判斷準(zhǔn)確度是否已達(dá)到100%,達(dá)到則退出迭代循環(huán)。建立兩層卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行信息提取測試驗(yàn)證,輸出識(shí)別出來的3部分字符。
首先,選取1 254張省份簡稱圖片進(jìn)行訓(xùn)練,耗時(shí)相對較短,經(jīng)過100多次的迭代之后準(zhǔn)確率達(dá)到100%,訓(xùn)練完成,效果如圖3所示。由圖3中的實(shí)驗(yàn)數(shù)據(jù)可以分析出,迭代次數(shù)與準(zhǔn)確率之間的關(guān)系如圖4所示。由圖4可知,隨著迭代次數(shù)的增加,在經(jīng)過20次的迭代后,準(zhǔn)確率趨于100%并維持穩(wěn)定。
圖3 省份簡稱訓(xùn)練結(jié)果
圖4 省份簡稱訓(xùn)練準(zhǔn)確率與迭代次數(shù)的關(guān)系
其次,選取3 467張城市代碼圖片進(jìn)行訓(xùn)練。省份簡稱耗時(shí)較長,經(jīng)過將近500次迭代之后準(zhǔn)確率達(dá)到100%,效果如圖5所示。由圖5中的實(shí)驗(yàn)數(shù)據(jù)可以分析出,迭代次數(shù)與準(zhǔn)確率之間的關(guān)系如圖6所示。由圖6可知,隨著迭代次數(shù)的增加,在經(jīng)過50次的迭代后,準(zhǔn)確率趨于100%并基本維持穩(wěn)定。
圖5 城市代碼訓(xùn)練結(jié)果
圖6 城市代碼訓(xùn)練準(zhǔn)確率與迭代次數(shù)的關(guān)系
最后,選取4 285張編號圖片進(jìn)行訓(xùn)練,由于包含大寫英文字母和數(shù)字,迭代次數(shù)較多,耗時(shí)很長,但準(zhǔn)確率達(dá)到99%,效果如圖7所示。由圖7中的實(shí)驗(yàn)數(shù)據(jù)可以分析出,迭代次數(shù)與準(zhǔn)確率之間的關(guān)系如圖8所示。由圖8可知,隨著迭代次數(shù)的增加,在經(jīng)過約100次的迭代后,準(zhǔn)確率趨于99%并基本維持穩(wěn)定。
圖7 編號訓(xùn)練結(jié)果
圖8 編號訓(xùn)練準(zhǔn)確率與迭代次數(shù)的關(guān)系
通過訓(xùn)練完成的模型來進(jìn)行測試。本實(shí)驗(yàn)選用車牌號為“閩O 1672Q”的圖片來驗(yàn)證該CNN訓(xùn)練模型的準(zhǔn)確率。車牌號原圖如圖9所示。
圖9 車牌號原圖
經(jīng)過幾秒鐘的時(shí)間,分別得出了車牌省份簡稱、城市代碼、編號的識(shí)別結(jié)果,最終得出與原圖一致的實(shí)驗(yàn)結(jié)果,“閩O 1672Q”。識(shí)別結(jié)果如圖10所示。
圖10 識(shí)別結(jié)果
利用采集的數(shù)據(jù)集,分別用BP神經(jīng)網(wǎng)絡(luò)、傳統(tǒng)LeNet-5 CNN和改進(jìn)后的CNN 3種方法對相同的字符集進(jìn)行對比分析實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如圖11所示。
圖11 3種方法實(shí)驗(yàn)結(jié)果對比
相較于傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò),LeNet-5 CNN在識(shí)別率上有著明顯的優(yōu)勢,而改進(jìn)后的CNN算法與LeNet-5 CNN雖然相近,但前者還是提高了識(shí)別率。
本文通過對比傳統(tǒng)的多層神經(jīng)網(wǎng)絡(luò)分析CNN在車牌號圖像識(shí)別中的應(yīng)用和改進(jìn),并建立了車牌識(shí)別的訓(xùn)練模型,快速準(zhǔn)確識(shí)別出測試車牌號。本文采取的CNN模型不需要進(jìn)行復(fù)雜的調(diào)參,降低了模型的復(fù)雜性,避免特征提取和分類過程中數(shù)據(jù)重建的復(fù)雜度。隨著電動(dòng)汽車的普及,人工智能的發(fā)展,高速有效的圖像特征提取越來越重要。CNN經(jīng)過不斷改進(jìn)和優(yōu)化,逐漸克服其數(shù)據(jù)集要求高、平移不變性等傳統(tǒng)缺陷,并且隨著硬件平臺(tái)的不斷發(fā)展,其訓(xùn)練時(shí)間不斷縮短,效率不斷提高,使其在車牌號圖像特征提取中的應(yīng)用更加成熟穩(wěn)定。