王 昆,王曉峰,劉 軒,郝 瀟
(1.山西大學 物理電子工程學院,山西 太原 030006;2.國網(wǎng)山西省電力公司檢修分公司,山西 太原 030000)
自動車牌識別[1]是檢測識別技術(shù)的重要應(yīng)用,該技術(shù)一般首先進行車輛和車牌檢測,然后通過光學字符識別[2](optical character recognition,OCR)識別出車牌號。雖然該技術(shù)已經(jīng)取得了長足發(fā)展,但大部分車牌識別方法主要針對車輛和車牌的正前方視角,很少考慮更寬泛的圖像采集場景。研究非理想情況下的車牌識別具有更高意義和價值。
隨著前沿科學的發(fā)展(如深度學習),越來越多的車牌識別技術(shù)采用新技術(shù)以獲得高精度的快速識別。如Hsu等[3]基于YOLO網(wǎng)絡(luò)[4],通過輕微改動,擴大網(wǎng)絡(luò)輸出粒度以提升檢測數(shù)量,并為兩種類別(車牌和背景)設(shè)定了概率。Zhang等[5]根據(jù)車牌形態(tài)的結(jié)構(gòu)化特點,改進Yolov2提取不同網(wǎng)絡(luò)深度的多級細粒度特征,但對于復雜清晰或較為模糊的情況下處理效果不佳,聚類方法有待提高。Xie等[6]對兩個基于YOLO的網(wǎng)絡(luò)進行了訓練,以檢測旋轉(zhuǎn)后的車牌。但該方法僅考慮平面上的旋轉(zhuǎn),未考慮由于相機視角傾斜而造成的更復雜的形變。
另外,卷積神經(jīng)網(wǎng)絡(luò)[7](convolution neural network,CNN)應(yīng)用較為廣泛,如Dong等[8]提出了一個基于CNN的車牌字符識別。通過感興趣區(qū)域池化層對候選車牌區(qū)域所對應(yīng)的特征圖進行裁剪。Selmi等[9]基于形態(tài)算子、高斯濾波、邊緣檢測等預處理方法,尋找車牌區(qū)域和字符。
為了適應(yīng)更多不同類型和不同拍攝情況下的車牌檢測,本文提出了一種檢測解扭曲-卷積神經(jīng)網(wǎng)絡(luò)(detection untwist-convolution neural network,DU-CNN),其主要工作總結(jié)如下:①采用了來自YOLOv3空間變換網(wǎng)絡(luò)理念,通過SPP模塊將不同分辨率的特征圖轉(zhuǎn)換為設(shè)計好的和全連接層相同維度的特征向量,避免了圖像的尺寸對于所提DU-CNN網(wǎng)絡(luò)的限制;②通過對仿射變化的系數(shù)進行回歸,將發(fā)生形變的車牌重新“解扭曲”為接近正前方視角的矩形,使車牌識別的適應(yīng)性更好;③為了增強訓練數(shù)據(jù)集,由真實數(shù)據(jù)和人工合成數(shù)據(jù)組成混合數(shù)據(jù)集。實驗結(jié)果驗證了所提方法具有較好的魯棒性和識別精度。
本文提出的方法包括3個主要步驟:車輛檢測、車牌檢測和OCR。給定一張輸入圖像,第一個模塊檢測場景中的車輛。在每個檢測區(qū)域內(nèi),利用提出的檢測解扭曲-卷積神經(jīng)網(wǎng)絡(luò)(DU-CNN),搜索車牌并對每個檢測進行一次仿射變換回歸,由此將車牌區(qū)域修正為接近正面視圖的矩形。將這些修正后的檢測輸入到OCR網(wǎng)絡(luò)中,以進行最終的字符識別。
車輛檢測是很多經(jīng)典檢測和識別的基礎(chǔ),例如PASCAL-VOC[10]、ImageNet[11]等,因此,本文并未從頭進行檢測器的訓練,而是根據(jù)一些標準,選擇一個已知模型來進行車輛檢測。首先,要求具備較高的查全率,因為對任何一輛包含可見車牌車輛的漏檢,都會直接造成一次車牌完全漏檢。其次,還需要具備較高的查準率,以使運行時間較低?;谶@些考量,本文使用YOLOv3網(wǎng)絡(luò),其執(zhí)行速度快(幀率約70 FPS),且在查準率和查全率之間有著較好的平衡。
YOLOv3是YOLO家族的第3個版本,在執(zhí)行效率和檢測準確率方面都有所提升,對于一般YOLO系列的目標檢測方法,或者其它較為復雜的網(wǎng)絡(luò)等,檢測的準確性取決于最終的分類,而分類層由全連接層組成,由提取特征的數(shù)量確定。原始YOLOv3網(wǎng)絡(luò)的一個重要缺點是圖片尺寸必須是固定的,輸入到網(wǎng)絡(luò)的圖像尺寸必須是416×416像素,這在實際情況中很少遇到。
針對上述情況,很多時候?qū)⑤斎氲膱D片(或視頻)進行一些預處理操作,例如圖像剪裁、拉伸和縮放等,這會造成圖像的有效信息的丟失,最終會導致圖像的檢測精度下降。因此,本文在原始YOLOv3網(wǎng)絡(luò)中添加空間金字塔池化(spatial pyramid pooling,SPP)模塊,SPP模塊結(jié)構(gòu)如圖1所示,其由何愷明等[12]提出。引入SPP的原因就是為了避免圖像剪切、旋轉(zhuǎn)、縮放等操作造成的圖像信息失真,同時解決圖像特征的重復提取的問題,能在一定程度上降低計算成本,提高計算效率。使用SPP后,不同尺寸的圖片得到的池化特征是一樣長度,通過SPP模塊將任意分辨率的特征圖轉(zhuǎn)換為設(shè)計好的和全連接層相同維度的特征向量。這是因為SPP使用了多個池化窗口,對特征圖進行池化,將得到的結(jié)果合并之后作為輸出結(jié)果,保證了固定長度的輸出。因此,圖像的尺寸對于添加了SPP模塊的YOLOv3并沒有限制。
圖1 SPP的模塊結(jié)構(gòu)
在輸入DU-CNN前,重新調(diào)整陽性檢測的尺寸。一般來說,較大的輸入圖像有助于較小目標的檢測,但會造成計算成本上升。在接近正前方(后方)的視圖中,車牌尺寸和車輛包圍框之間的比率較高。但該比率在傾斜(側(cè)面)視圖中會變得小得多,因為車輛的包圍框會變得更大和更長。因此,為保持車牌區(qū)域的可識別性,需要將傾斜視圖調(diào)整到比正面視圖更大的尺寸。雖然可以利用3D姿勢估計方法決定尺寸調(diào)整范圍,但為了高效快速,本文提出了一種基于車輛包圍框縱橫比的方法。當車輛尺寸與其包圍框之間的比率接近1時,可以使用較小的尺寸,隨著該比率變大則需要增加輸入圖像尺寸。具體來說,尺寸調(diào)整因子fsc給出如下
(1)
式中:Wv和Hv分別為車輛包圍框的寬度和高度。Dmin≤fscmin(Wv,Hv)≤Dmax, 因此Dmin和Dmax限定了重新調(diào)整后最小尺寸的包圍框的范圍?;趯嶒灢⒈M量在準確度和運行時間之間保持較好的平衡,選擇Dmin=288,Dmax=608。
車牌本身是矩形的平面目標,附著在車輛上作為身份標識。為充分利用其形狀,本文提出了一種變型的卷積神經(jīng)網(wǎng)絡(luò)DU-CNN。該網(wǎng)絡(luò)學習對發(fā)生各種不同形變的車牌進行檢測,并通過對仿射變化的系數(shù)進行回歸,將發(fā)生形變的車牌重新“解扭曲”為接近正前方視角的矩形。雖然在仿射變換之外也可使用平面透視投影,但透視變換中涉及到的觸發(fā)可能會生成很小的分母值,由此產(chǎn)生數(shù)值不穩(wěn)定性。
本文在開發(fā)DU-CNN時采用了來自YOLOv3空間變換網(wǎng)絡(luò)[13]理念。DU-CNN的檢測過程如圖2所示。首先,將重新調(diào)整大小后的車輛檢測模塊的輸出饋送到該網(wǎng)絡(luò)。由此生成一個8信道特征圖,其對目標/非目標概率和仿射變化參數(shù)進行編碼。為提取扭曲車牌,首先考慮圍繞cell(m,n)中心的一個固定尺寸的虛構(gòu)正方形。如果該單元格的目標概率超過某個給定的檢測閾值,則部分回歸參數(shù)用于構(gòu)建仿射矩陣,將虛擬正方形轉(zhuǎn)換為車牌區(qū)域。由此可以輕易地將車牌解扭曲為水平對齊和垂直對齊的目標。
圖2 DU-CNN的檢測過程
1.2.1 網(wǎng)絡(luò)架構(gòu)
提出的架構(gòu)共包含17個卷積層,其中10層位于殘差區(qū)塊內(nèi),其架構(gòu)如圖3所示。所有卷積濾波器的尺寸均固定為3×3。在除檢測區(qū)塊之外的整個網(wǎng)絡(luò)中均使用線性修正單元(rectified linear unit,ReLU)激活函數(shù)。網(wǎng)絡(luò)中包含4個尺寸為2×2的最大池化層,步長為2,以將輸入尺寸降低到原來的1/16。最后,檢測區(qū)塊包含兩個并行的卷積層:①一個卷積層用于推斷概率,由softmax函數(shù)激活;②另一個卷積層用于仿射參數(shù)的回歸,沒有激活函數(shù)(或等效地使用恒等式F(x)=x作為激活函數(shù))。
圖3 提出的DU-CNN網(wǎng)絡(luò)架構(gòu)
1.2.2 損失函數(shù)
設(shè)pi=[xi,yi]T,i=1,…,4, 表示帶注釋的車牌的4個角點,以順時針從左上角開始。同樣,設(shè)q1=[-0.5,-0.5]T,q2=[0.5,-0.5]T,q3=[0.5,0.5]T,q4=[-0.5,0.5]T表示以原點為中心的標準單位正方形的對應(yīng)頂點。
對于一張高度為H,寬度為W的輸入圖像,網(wǎng)絡(luò)步長為Ns=24(4個最大池化層),則網(wǎng)絡(luò)輸出特征圖的大小為M×N×8,其中M=H/Ns,N=W/Ns。 對于特征圖中的每個點cell(m,n),均需要估計8個數(shù)值:前兩個數(shù)值(v1和v2)為目標/非目標的概率,后6個數(shù)值(v3至v8)被用于構(gòu)建局部仿射變換Tmn
(2)
式中:采用v3和v6的最大值函數(shù)以確保對角為正(避免不必要的鏡像或過度旋轉(zhuǎn))。
為匹配網(wǎng)絡(luò)輸出分辨率,通過網(wǎng)絡(luò)步長的倒數(shù)重新標定點pi, 并根據(jù)特征圖中的每個點(m,n)重新確定中心點。通過應(yīng)用正則化函數(shù)來實現(xiàn)這一點
(3)
式中:α為度量常數(shù),代表虛構(gòu)正方形的邊。設(shè)α=7.75, 即增強訓練數(shù)據(jù)集內(nèi)最大和最小車牌尺寸之間的中點除以網(wǎng)絡(luò)步長。
假定一個目標(車牌)位于cell(m,n)位置,損失函數(shù)首先考慮標準正方形的扭曲版本,和車牌的正則化注釋點之間的誤差,定義如下
(4)
其次,損失函數(shù)要估計目標是否位于(m,n)的概率。與SSD(single shot Multiplebox detector)檢測的置信損失[14]相似,損失函數(shù)基本上為兩個對數(shù)損失函數(shù)之和
fpr(m,n)=logloss(∏obj,v1)+logloss(1-∏obj,v2)
(5)
式中: ∏obj為目標指示函數(shù),如果在點(m,n)存在一個目標,則返回1;如果在該點不存在目標,則返回0。 logloss(y,p)=-ylog(p)。 如果目標的矩形包圍框與以(m,n)為中心的另一個相同尺寸的包圍框之間的交并比(IoU)大于閾值γobj(根據(jù)經(jīng)驗將該閾值設(shè)為0.3),則考慮該目標在點(m,n)內(nèi)。
合并式(4)和式(5)中定義的項,最終的損失函數(shù)如下
(6)
1.2.3 訓練
為訓練提出的DU-CNN,本文創(chuàng)建了一個包含196張圖像的數(shù)據(jù)集,其中105張圖像來自于Cars數(shù)據(jù)集,40張圖像來自SSIG數(shù)據(jù)集(訓練子集),51張圖像來自AOLP數(shù)據(jù)集(學習子集)。由于減少了訓練數(shù)據(jù)集內(nèi)注釋圖像的數(shù)量,因此數(shù)據(jù)增強的使用是至關(guān)重要的。本文使用了如下增強轉(zhuǎn)換:
(1)糾正:基于車牌注釋對整個圖像進行糾正,假定車牌位于一個平面上;
(2)縱橫比:在區(qū)間[2,4]內(nèi)隨機設(shè)定車牌的縱橫比,以適應(yīng)來自不同地區(qū)的車牌尺寸;
(3)居中:車牌的中心成為圖像中心;
(4)縮放:對車牌進行縮放,使其寬度匹配40像素至208像素之間的一個數(shù)值(基于車牌的可讀性,根據(jù)經(jīng)驗設(shè)定)。使用這一范圍定義式(3)中α的數(shù)值;
(5)旋轉(zhuǎn):以隨機選擇的角度執(zhí)行3D旋轉(zhuǎn),以涵蓋較大的相機范圍設(shè)置;
(6)鏡像:50%的幾率;
(7)平移:從圖像中心對車牌進行隨機平移,僅限于移動中心周圍208×208像素的一個正方形;
(8)裁剪:在平移之前考慮車牌中心,并圍繞該中心裁剪出一個208×208的區(qū)域;
(9)顏色空間:對HSV顏色空間進行較小修改;
(10)注釋:使用與增大輸入圖像時應(yīng)用的相同空間變換來調(diào)整車牌4個角的位置。
通過以上選擇的轉(zhuǎn)換處理,可以從單個手動標注的樣本中得到具有非常明顯視覺特征的各種增強測試圖像。本文使用ADAM優(yōu)化器,以mini-batch(批尺寸32)對網(wǎng)絡(luò)進行100 000次迭代訓練。學習率設(shè)為0.001,參數(shù)β1=0.9,β2=0.999。 通過從訓練集中隨機選擇并增廣樣本,生成mini-batches,由此在每次迭代后,可得到尺寸為32×208×208×3的新輸入張量。
提出的系統(tǒng)使用修改后的YOLOv3網(wǎng)絡(luò)在經(jīng)過校正的車牌上執(zhí)行字符分割和識別,即,光學字符識別(optical character recognition,OCR),利用電子的方式從圖片中提取出文字信息,然后用于其它領(lǐng)域,如文字編輯、搜索和識別等。該網(wǎng)絡(luò)架構(gòu)與文獻[15]相同。但本文研究利用合成和增強數(shù)據(jù),極大擴展了訓練數(shù)據(jù)集。
人工創(chuàng)建的數(shù)據(jù)包括將一個字符串(7個字符)粘貼到有紋理的背景上,然后執(zhí)行不同操作,例如旋轉(zhuǎn)、平移、噪聲和模糊等隨機變換。圖4描述了合成數(shù)據(jù)生成的流程,合成數(shù)據(jù)的使用能夠顯著提升網(wǎng)絡(luò)通用性,從而實現(xiàn)使用完全相同的網(wǎng)絡(luò)處理來自世界不同地區(qū)的車牌。
圖4 合成數(shù)據(jù)的流程
實驗使用的硬件配置為一個Intel i7處理器,8 Gb RAM和一個NVIDIA Titan X GPU。上述配置能夠以8 FPS 的均值(針對到所有數(shù)據(jù)集)運行完整的ALPR系統(tǒng)。運行時間取決于輸入圖像中檢測到的車輛數(shù)量。因此,提高車輛檢測閾值將得到更高的FPS,但會降低查全率。開發(fā)環(huán)境為Python 3.5語言的PyCharm集成開發(fā)工具,原始YOLOv3由Keras框架提供。
本文的目標之一是開發(fā)在各種非約束場景下均性能良好的識別技術(shù),因此,本文選擇了4個可用的在線數(shù)據(jù)集,即OpenALPR[16]、SSIG[17]和AOLP[17](路面巡邏),這些數(shù)據(jù)集覆蓋了大量不同的環(huán)境,見表1。本文考慮了3個不同的變量:車牌角度(正面和傾斜)、車輛與相機的距離(近、中、遠),以及圖片拍攝的地區(qū)。
表1 數(shù)據(jù)集介紹
在車牌失真方面,AOLP-RP子集是難度較大的數(shù)據(jù)集,其試圖模擬相機安裝在巡邏車輛上(或手持)時的情況。在車輛與相機距離這一方面,SSIG數(shù)據(jù)集的難度最大。該數(shù)據(jù)集由高分辨率圖像組成,即使車輛距離較遠,車牌依然具備可讀性。這些數(shù)據(jù)集均不包括同時展示多個車牌的情況。
這些數(shù)據(jù)集已經(jīng)覆蓋了大量場景,但數(shù)據(jù)集依然缺少挑戰(zhàn)性圖像。因此,本文還手動注釋了包含120張圖像集合,該集合包含近、中、遠距離,車牌角度有很多是傾斜的,且車牌具有一定模糊,有國內(nèi)和國外的車牌。一些示例圖像如圖5所示。
圖5 本文數(shù)據(jù)集示例圖像
提出的方法的實施流程中包括3個網(wǎng)絡(luò),根據(jù)經(jīng)驗設(shè)定以下可接受閾值:車輛(YOLOv3)和車牌(DU-CNN)檢測的可接受閾值為0.50,字符檢測和識別的可接受閾值為0.45。實驗中,如果車牌的所有字符均被正確識別,且未檢測到額外字符,則視為一次正確識別。對所有數(shù)據(jù)集均應(yīng)用了完全相同的網(wǎng)絡(luò):對于給定類別的車牌(例如歐洲或中國),未使用任何特定訓練程序?qū)W(wǎng)絡(luò)進行調(diào)整。僅針對數(shù)據(jù)集在系統(tǒng)流程中做出了微小改動。
圖6給出了使用本文方法獲得部分具有代表性的識別案例。由圖6可以看出,對于傾斜,甚至一定的遮擋等情況,本文方法依然可以準確識別出車牌的重要標識。
圖6 部分識別案例結(jié)果
為了進一步分析討論,本文使用了兩組訓練數(shù)據(jù)對提出的系統(tǒng)進行評價,以展示在訓練程序中納入全合成數(shù)據(jù)的收益:①第一組訓練數(shù)據(jù)包括真實增強數(shù)據(jù),以及人工生成的增強數(shù)據(jù);②第二組僅包括真實增強數(shù)據(jù)。兩者分別表示為“真實+合成”和“無合成”,見表2。從表2中可以觀察到,添加全合成數(shù)據(jù)提升了準確度(AOLP數(shù)據(jù)集的增益約為5%)。此外,為凸顯對檢測包圍盒進行校正的收益,還給出了使用普通未校正包圍盒的實驗結(jié)果,見表2“未校正”。與預期相符,當使用未校正包圍盒時,大部分正面視圖的數(shù)據(jù)集的結(jié)果變化較小(處理OpenALPR數(shù)據(jù)集時的性能甚至出現(xiàn)微小提升),但在包含難度較大的傾斜車牌數(shù)據(jù)集(AOLP和本文數(shù)據(jù)集)中,使用未校正包圍盒會顯著降低準確度。表2還給出了商用和學術(shù)系統(tǒng)的實驗結(jié)果比較,“/”表示沒有采用對應(yīng)數(shù)據(jù)集。結(jié)果表明提出的系統(tǒng)在受控場景數(shù)據(jù)集(車牌大部分在正前方,包括OpenALPR和SSIG)中的識別率與商用系統(tǒng)大致相當或更優(yōu)。
表2 不同數(shù)據(jù)集的準確率結(jié)果/%
值得一提,文獻[5,6,8]僅著眼于單個地區(qū)或數(shù)據(jù)集。性能比較驗證了所提方法具有很好的通用性。值得一提,在大部分較難的數(shù)據(jù)集(AOLP和本文數(shù)據(jù)集)中,使用所提方法的車牌識別率,大大高于直接對注釋后的矩形車牌包圍盒應(yīng)用OCR模塊的識別率。該增益源自于DU-CNN所支持的解扭曲操作,該操作能夠極大提升車牌扭曲程度較強時的OCR性能。簡單來說,通過為每個檢測單元生成一個仿射變換矩陣,實現(xiàn)對扭曲車牌的檢測和解扭曲。這一步驟降低了OCR網(wǎng)絡(luò)的工作量,減少了后者需要處理的失真情況,增強了總體識別性能。
為了進行較差拍攝情況下的識別比較,本文遴選30幅較大傾斜或模糊情況下的所獲圖像,本文方法采用校準后的方式,與商用“森諾”車牌識別進行比較。由圖7可以看出基本上,在字符檢測和識別的可接受閾值在0.45左右,兩種方法均能差不多達到各自最佳準確率,但對于較差情況下的識別,本文方法更勝一籌,商用系統(tǒng)“森諾”的檢測識別算法較少考慮極端情況,因為商用系統(tǒng)的CCD相機拍攝角度固定,要求的車道也是固定的,基本不考慮極端情況。若遇到不按規(guī)矩行車的司機或新手司機,可能會造成無法識別的情況,LED顯示牌顯示“臨時車”,司機則不得不重新倒車再檢測。這間接驗證了所提方法的解扭曲操作的確可以提高OCR性能,增強系統(tǒng)的適應(yīng)性。
圖7 與商用系統(tǒng)在較差情況下識別性能比較
本文提出了一個用于非約束場景基于深度學習的車牌檢測識別系統(tǒng)。通過為每個檢測單元生成一個仿射變換矩陣,實現(xiàn)對扭曲車牌的檢測和解扭曲,這一步驟降低了OCR網(wǎng)絡(luò)的工作量,減少了后者需要處理的失真情況。通過在網(wǎng)絡(luò)中添加SPP模塊,避免了不同分辨率特征圖對識別結(jié)果的影響。結(jié)果表明,所提方法在困難數(shù)據(jù)集(其中車牌以較大傾斜角度拍攝)中的性能優(yōu)于當前其它方法,且在受控數(shù)據(jù)集中也能夠取得較好結(jié)果。
未來,本文可能將解決方案擴展至摩托車的車牌檢測,其主要挑戰(zhàn)是摩托車或電瓶車車牌與汽車車牌有著不同的縱橫比和布局。