彭 召 丁 曉 劉 哲 陳 衡 劉 凱
1(西安交大通大學軟件學院 陜西 西安 710048)2(陜西師范大學計算機科學學院 陜西 西安 710062)
數(shù)字串識別是字符識別領域一個重要的分支,已經(jīng)廣泛應用于票據(jù)表單系統(tǒng)[1]、儀表識別系統(tǒng)[2]、運動員號碼牌識別系統(tǒng)[3],銀行卡號識別系統(tǒng)[4]。本文研究的是煙草防偽數(shù)字串識別。本文的識別方法對于煙草公司調(diào)研市場煙草偽品率具有重要意義。
目前,對于字符串識別一般有整體識別和分割識別兩種思路[5-6]。整體識別法適合于有具體含義的詞匯或有一定關聯(lián)的詞匯間的識別。例如停車牌“Stop”、火警標識“119”等。本文中的防偽數(shù)字是由沒有關聯(lián)的數(shù)字組成,每個數(shù)字間不能組成具有某種意義的詞匯,因此整體識別不適合本文中防偽數(shù)字的識別。目前主流的分割識別方法有結構特征法和結合識別法[6-7]兩種。結構特征法基于對投影、輪廓等特征的分析,通過分析結構的特征進行分割。結構特征法對于分割點的依賴嚴重,由于本文中部分防偽碼數(shù)字圖片具有背景復雜的特點,這對于依靠投影和輪廓提取分割點具有極大的干擾。故這種方法不適合本文防偽數(shù)字串識別。結合識別法,根據(jù)識別的結果,輔助分析分割結果,對每種結果做置信度排名,選取置信度高分割的作為分割結果。但這種方法對于數(shù)字關聯(lián)性不強沒有聯(lián)系的防偽碼數(shù)字串識別效果不佳。
鑒于本文中防偽數(shù)字串的子串沒有具體含義,因此本文采用分割識別的識別方法。由于分割識別方法中兩種傳統(tǒng)方法對于本文中防偽數(shù)字識別均不合適,故本文針對香煙防偽數(shù)字串實際情況提出一種全新的分割識別方法。
目前很多數(shù)字串識別方法將數(shù)字規(guī)定在一個方格再做分割識別。這種方法雖然一定程度上提高了分割質(zhì)量,但是增加了人的手工參與,比較繁瑣,并且脫離了實際社會需求。本文提供的分割方法,不需要人工干預,輸入圖片在一定范圍探測得到最終結果。當只用深度學習算法識別時,對于背景復雜圖片,識別往往不理想。本文采用了深度學習算法并充分結合了先驗知識,有利于排除很多識別錯誤的情況。本文先使用定位算法定位數(shù)字大概位置,然后在一定范圍內(nèi)進行探測,這種方法比單純整張圖片識別更能排除背景干擾。實驗表明,本文在香煙防偽碼數(shù)據(jù)集上取得了良好的效果,能很好地應用于香煙數(shù)字的識別。
本文先將圖片送入Faster RCNN網(wǎng)絡[8]定位,估計出數(shù)字串所在區(qū)域的最小外接矩形。然后將矩形進行2×16的均等分割,將分割得到的圖片送入分類網(wǎng)絡分類,得到32幅圖片的分類結果。然后根據(jù)32個數(shù)字對應位置組合應該滿足的先驗條件判斷在此處位置進行分割得到數(shù)字是否正確。如果滿足先驗條件,則把這32幅圖片識別結果作為最終結果。如果不滿足則在一定范圍內(nèi)調(diào)整外接矩形的左上角坐標和分割得到的小矩形的長寬,得到新的外接矩形。然后重復分割和識別的過程,直到找到滿足先驗條件要求的外接矩形和識別結果,并把識別結果作為最終結果。具體流程圖如圖1所示。
圖1 系統(tǒng)流程圖
目標檢測算法旨在識別出圖片中物體所屬的類別,并把某個類別所在的區(qū)域用最小外接矩形表示出來。經(jīng)過多年發(fā)展,深度學習為基礎的目標檢測算法經(jīng)歷了RCNN[9]、SPP-net[10]、Fast RCNN[11]、Faster RCNN等算法。Faster RCNN算法從前幾種算法發(fā)展而來,具有單張圖片測試時間短、模型訓練時間短、計算量小、定位精度高等優(yōu)點。因此本文選取Faster RCNN算法作為本文的目標檢測定位算法。具體的網(wǎng)絡結構如圖2所示(基礎網(wǎng)絡以VGG16網(wǎng)絡[12]為例)。
圖2 Faster RCNN網(wǎng)絡結構圖
Faster RCNN算法主要由四個模塊組成:
1) 基礎網(wǎng)絡:本部分網(wǎng)絡目的是提取特征,為后續(xù)的RPN網(wǎng)絡和ROI pooling層做準備。這部分網(wǎng)絡一般為VGG16網(wǎng)絡或者ZF網(wǎng)絡,可以根據(jù)自己實際需求更換基礎網(wǎng)絡。本文使用VGG16網(wǎng)絡作為基礎網(wǎng)絡?;A網(wǎng)絡得到的特征圖將被送入RPN網(wǎng)絡和ROI pooling層共享。
2) RPN網(wǎng)絡:基礎網(wǎng)絡輸出的特征圖被送入RPN層并在特征圖上建立多個窗口,每個窗口生成若干個候選框anchor。Anchor有1∶1、1∶2、2∶1三種不同的比例。特征圖中每個像素點對應一個anchor中心。將窗口對應的低維向量送到不同的網(wǎng)絡分別做分類和回歸。本文中邊框回歸判斷的是候選框是否屬于香煙防偽數(shù)字串區(qū)域,輸出是一個概率值。本文將閾值設置為0.7,將概率大于0.7的候選框留下認為是防偽數(shù)字串所在區(qū)域,小于0.7的舍棄。RPN網(wǎng)絡邊框回歸計算公式如下:
(1)
式中:xa、ya、wa、ha表示anchor框的中心點坐標和框的寬、高;(x,y)表示預測框中心點坐標;w和h為預測框的寬和高;(x*,y*)表示真實區(qū)域框的坐標;t表示回歸框做變換的預測值;t*表示框做變換的真實值。
RPN網(wǎng)絡整體損失函數(shù)為:
(2)
式中:pi是第i個候選框是防偽數(shù)字串的概率。式(2)前半部分表示分類,后半部分表示回歸。
3) ROI pooling層:本層將RPN層的輸出和特征提取的特征圖同時輸入,并在RPN候選框和特征圖上做一個映射,將尺寸統(tǒng)一以方便后續(xù)全連接網(wǎng)絡。
4) 回歸與分類:ROI pooling層的特征圖送入全連接層完成回歸和分類。其中,分類的損失函數(shù)為:
(3)
回歸損失函數(shù)為:
(4)
式中:R表示Smooth L1函數(shù)。
本文防偽數(shù)字串由0~9之間的數(shù)字組成,共兩行,每行16個數(shù)字。數(shù)字間距相同,長寬比為2.70。如圖3所示。在上節(jié)中,我們通過目標檢測算法Faster RCNN算法已經(jīng)估計出了防偽數(shù)字串所在區(qū)域的最小外接矩形,即:根據(jù)最小外接矩形的四個頂點,將矩形所在區(qū)域劃分成2×16的32個矩形區(qū)域,每個矩形區(qū)域長寬相同。
圖3 圖片示例
圖像分類技術經(jīng)過多年發(fā)展,由開始的傳統(tǒng)圖像分類到支持向量機,再到卷積神經(jīng)網(wǎng)絡,已經(jīng)日趨成熟。目前卷積神經(jīng)網(wǎng)絡、殘差網(wǎng)絡等網(wǎng)絡在圖像分類上效果較好,因此,本文對比了現(xiàn)在的諸多網(wǎng)絡,最終選取更適合本文樣本的分類網(wǎng)絡。
考慮到本文圖片數(shù)量較少并為了得到良好的分類器,本文在分類網(wǎng)絡中加入了空間變換網(wǎng)絡[13],對圖片進行一個空間變換,有效地提高了分類的精度。一般情況,卷積神經(jīng)網(wǎng)絡雖然可以有很好的分類效果,但是當圖片具有空間多樣性的時候,分類效果往往不太理想??臻g變換網(wǎng)絡不需要額外的標注,可以插入到任意卷積的后面,且可以根據(jù)分類任務對圖片進行空間變換。當圖片模糊,有傾斜角度或者其他空間不變性問題時候,可以有效提高分類效果。
本文中的32個數(shù)字滿足下面的先驗條件。第一行中第1位表示年份,本文中圖片是同一年的,第2、3位表示月份,第4、5位表示日期,第6到14位是隨機數(shù)字。第15、16兩位是1到50間的編號。第二排第1到4位表示香煙編號。5到16位表示隨機數(shù)字。因此先驗條件規(guī)則為:第一行中第1個數(shù)字是7,第2~3位數(shù)字組成的兩位數(shù)在1~12之間。第4~5位數(shù)字組成的兩位數(shù)在1~30之間。第15~16位組成的數(shù)字在1~50之間;第二行前四位數(shù)字,是某種煙固定的數(shù)字標識,固定為某四位數(shù),例如本文中即1100或者1101。
本文以當前矩形框為基準,將當前矩形框左上角坐標和矩形框分割后得到的小矩形框的寬度在一定范圍內(nèi)調(diào)整,小矩形框的長度可以通過寬度和高寬比計算得到。將得到的矩形框均分為2×16份,送入分類網(wǎng)絡識別這32幅圖片,探測滿足以上規(guī)則的矩形。將探測得到的滿足以上規(guī)則的矩形框作為最終識別結果。當以上規(guī)則均滿足后把探測得到的結果作為最終定位結果。由于在一定范圍探測矩形框的左上角坐標和分割的小矩形的長寬,范圍太小可能不包含滿足要求的矩形,范圍太大計算量也隨之增大。為了選取出合適的范圍,本文對樣本的groundtruth和Faster RCNN算法實際檢測出來的框的長寬和左上角坐標位置進行了統(tǒng)計,最終選出了合適的范圍。當在一定范圍調(diào)整矩形長寬和矩形框左上角坐標時候,可以逐個像素調(diào)整,也可以每隔幾個像素調(diào)整。逐個像素調(diào)整效果更好,但是計算量太大。每跳躍幾個像素調(diào)整計算量小,效果較差。本文對于跳躍幾個像素檢測更合適在時間和準確率上進行權衡,最終選擇了適合本文的跳躍像素個數(shù)。
由于Faster RCNN算法畫出來的框大體和groundtruth框位置和形狀相差不大,只有少部分圖片效果不佳,相差較大。因此每次探測時候以算法定位到的框開始,將坐標先變大幾個像素,如果不滿足要求,再調(diào)小相同的像素。對于長寬也是類似的處理。這種調(diào)整方法可以一定程度降低探測的時間。
本文第一階段Faster RCNN網(wǎng)絡的基礎網(wǎng)絡使用VGG16,第三階段的分類網(wǎng)絡也使用VGG16網(wǎng)絡,這兩處VGG16網(wǎng)絡的初始權重均來自ImageNet。本文所涉及的所有實驗均使用gpu,且型號為GTX 1080。本文實驗代碼均基于keras框架。實驗環(huán)境Python 2.7.13,keras 2.0.9,tensorflow1.4.10,Ubantu 14.04。本文圖片由煙草公司從市場批量采集香煙樣本拍攝而成。圖片大小均為1 280×960。圖片水平分辨率和豎直分辨率均為96 dpi。原始圖片均未加噪聲。
在第一階段Faster RCNN定位中,為了獲得良好的模型,本文使用320幅圖片,并對圖片進行了四種增強方式:椒鹽噪聲、高斯噪聲、變暗、變亮。得到320×4=1 280幅圖片,再對這1 280幅圖片做放大縮小操作,分別讓圖片長寬同時變?yōu)橐郧?.8、0.9、1.1、1.2倍。因此共有1 280×5=6 400幅圖片參與訓練驗證。最終得到模型。本文中將6 400幅圖片按照train:test=7∶3的比例進行訓練與驗證。
對于第三階段單幅數(shù)字圖片分類,為了獲得良好的分類模型,本文從數(shù)據(jù)集中挑選出約162幅原始圖片通過手動截屏方式標注,從圖片中截取每幅圖上的數(shù)字。每幅圖片上截取32個單個數(shù)字圖片,共截取出162×32=5 184幅單個數(shù)字圖片,除去截圖過程中發(fā)現(xiàn)的明顯不符合要求的數(shù)字圖片,剩余5 063幅。由于每個數(shù)字在圖片中出現(xiàn)的頻率不同,因此截取到的數(shù)字數(shù)量存在很大的差異。例如截取數(shù)量最多的是數(shù)字0,有1 158幅。最少的是數(shù)字9,只有225幅。由于數(shù)據(jù)之間存在分布不均勻的情況,如果某類數(shù)字訓練樣本過多,可能導致最后學習到此類數(shù)字特征過多,而其他類別數(shù)字特征過少。因此訓練數(shù)據(jù)最好數(shù)量差別不要太大。因此本文對最少數(shù)字9進行了挑選,將205幅作為最后的數(shù)據(jù)。按照跟205幅差別不太多的原則,從每類別數(shù)字中挑選一定數(shù)量的數(shù)字作為樣本。然后按照大概8∶2的比例隨機分配訓練集和驗證集。最終訓練數(shù)據(jù)1 696幅,驗證數(shù)據(jù)424幅??偣矓?shù)據(jù)集 2 120幅。本文使用VGG16作為分類網(wǎng)絡,訓練時候?qū)W習率設定為0.000 1。另選22幅原始圖片作為測試集,人工截取每個數(shù)字所在區(qū)域,由此得到22×32=704幅圖片作為測試集。
本文另選取22幅原始圖片進行第一階段定位的測試,定位得到的效果圖和groundtruth的對比圖如圖4所示。定位精度越高,則定位得到的矩形框的左上角坐標和矩形長寬與groundtruth差別越小,因此可以在更小的范圍內(nèi)調(diào)整這些參數(shù),減少了計算量。定位精度大小用目標檢測領域通用評價指標IOU表示,IOU表示定位框與groundtruth框的交集和并集的比值。本文測量22幅圖片IOU,得到其平均IOU為0.872。
圖4 定位效果
在第三階段分類中,經(jīng)過實驗挑選網(wǎng)絡,最終使用VGG16作為分類網(wǎng)絡,具體挑選網(wǎng)絡實驗在下節(jié)中敘述。本文采用VGG16作為分類網(wǎng)絡,學習率為0.000 1,沒有數(shù)據(jù)增強時候訓練得到模型。此模型驗證集上的圖片最佳識別率為0.918 2時,測試集為0.842 3。
2.3.1分類網(wǎng)絡
現(xiàn)存分類網(wǎng)絡很多,同一分類網(wǎng)絡可能在某一數(shù)據(jù)集效果理想而在另外數(shù)據(jù)集上效果較差。因此為了找出適合本文的分類網(wǎng)絡,本文在Resnet50[14]、VGG16、VGG19[15]、InceptionV3[16]等分類網(wǎng)絡上進行了實驗。最終選擇出VGG16作為本文第三階段的分類網(wǎng)絡。這四種網(wǎng)絡所使用的初始權重均來自ImageNet項目,且均把圖片數(shù)據(jù)尺寸統(tǒng)一到224×224然后送到多個網(wǎng)絡進行分類。分類結果如表1所示。
表1 分類網(wǎng)絡效果對比
實驗結果表明,不同的分類網(wǎng)絡對本文單個數(shù)字圖片的分類效果不同。其中:InceptionV3網(wǎng)絡在驗證集和測試集上的表現(xiàn)最差,VGG16網(wǎng)絡在驗證集和測試集上表現(xiàn)最好。這說明VGG16網(wǎng)絡是對本文數(shù)據(jù)集最合適的分類識別網(wǎng)絡。因此本文選擇VGG16網(wǎng)絡作為最終分類識別網(wǎng)絡。
2.3.2數(shù)據(jù)增強
對于第二階段圖像分類,由于本文數(shù)據(jù)較少,因此考慮數(shù)據(jù)增強來提高精度。在VGG16網(wǎng)絡上進行實驗,結果表明數(shù)據(jù)增強能提高一定的精度。首先本文由于圖片尺寸最終都統(tǒng)一到224×224,因此放大縮小數(shù)據(jù)增強對本文沒有作用,實驗結果也驗證了這一猜想。本文對圖片同時做了隨機上下翻轉(zhuǎn),發(fā)現(xiàn)驗證集數(shù)據(jù)精度反而下降了0.16,因為6和9上下翻轉(zhuǎn)后將無法識別,因此本文沒有采用上下翻轉(zhuǎn)的數(shù)據(jù)增強方式。由于本文中數(shù)字多為水平,傾斜角度較少,因此暫不考慮使用旋轉(zhuǎn)的數(shù)據(jù)增強方式。本文僅采用了隨機水平翻轉(zhuǎn)的數(shù)據(jù)增強方式。實驗結果表明水平翻轉(zhuǎn)數(shù)據(jù)增強對實驗結果有一定提高。實驗結果如表2所示。
表2 數(shù)據(jù)增強與空間變換對比
實驗結果表明通過水平翻轉(zhuǎn)的數(shù)據(jù)增強后,VGG16的在驗證集和測試集上的分類效果均有0.01左右的提高。這說明隨機水平翻轉(zhuǎn)的數(shù)據(jù)增強方式能提升圖片分類效果,因此本文采用隨機水平翻轉(zhuǎn)的數(shù)據(jù)增強方式。
2.3.3空間變換網(wǎng)絡(STN)
在第二階段圖像分類中,本文在VGG16最后一個池化層后加入了空間變換網(wǎng)絡。由于最后一個池化層輸出的feature map大小為7×7,通過空間變換網(wǎng)絡后,輸出的feature map大小也設定為7×7,然后送到VGG16接下來的層繼續(xù)學習。實驗結果表明,加入空間變換網(wǎng)絡分類效果有較好提高。實驗結果如表2所示。
實驗結果表明,在VGG16網(wǎng)絡后加入STN后,驗證集和測試集上的結果均有大概0.03的提高,說明本文的圖像數(shù)據(jù)在有模糊、變形等其他空間問題時加入空間變換網(wǎng)絡對實驗結果有一定提升。因此本文加入空間變換網(wǎng)絡來提升分類效果。本文將2.3.2節(jié)中的數(shù)據(jù)增強和2.3.3節(jié)的空間變換網(wǎng)絡綜合起來,使得驗證集和測試集上的效果提升了0.5左右。
2.3.4學習率的影響
在第二階段圖像分類中,為了取得更好的效果,本文對網(wǎng)絡學習率進行了調(diào)節(jié),以上實驗中學習率均為0.000 1,每次擴大或者縮小10倍以確定最好的學習率。本文基于VGG16,做水平隨機翻轉(zhuǎn)并加入空間變換網(wǎng)絡,調(diào)整學習率,在驗證集上的精度如下所示。實驗結果如表3所示。
表3 學習率對分類效果的影響
學習率過大容易使得損失值爆炸,使得梯度值在最小值附近來回震蕩,無法達到最低點;學習率過小收斂過程非常緩慢并且容易過擬合。因此本文挑選合適的學習率對本文圖像分類效果具有重大意義。實驗表明,學習率為0.000 01時,測試集的精度最高達到0.890 6。因此,本文采用0.000 01作為本文學習率。
基于上述實驗結果,本文分類網(wǎng)絡采用VGG16網(wǎng)絡,同時對數(shù)據(jù)做了水平翻轉(zhuǎn)的數(shù)據(jù)增強,并加入了空間變換網(wǎng)絡,將學習率調(diào)整到0.000 01,最終驗證集上最佳精度達到0.978 0,此時測試集精度為0.890 6。此結果只是22幅圖片按照groundtruth分割得到的識別率,并不代表最終實驗識別率。用groundtruth分割的示意圖如圖5所示。
(b) 分割示意圖5 groundtruth分割示意圖
本文先使用22幅待測試圖片,通過目標檢測算法Faster RCNN算法定位,把定位得到的框直接分割然后送入VGG16網(wǎng)絡識別,此時的識別率為0.15。說明不使用先驗知識,直接定位分割的效果較差。本文對22幅圖片進行統(tǒng)計,發(fā)現(xiàn)數(shù)字串所在區(qū)域圖片框的數(shù)字串左上角坐標(x1,y1)與groundtruth圖片框左上角坐標(x1gt,y1gt)之間有一定偏差,通過統(tǒng)計發(fā)現(xiàn)|x1-x1gt|<20、|y1-y1gt|<20。每個小矩形寬度偏差|width-widthgt|<2。在一定范圍內(nèi)對圖片進行探測,本文設置探測的x1、y1均相隔多個像素探測一次,width相隔1個像素探測一次。通過實驗,為了在探測識別時間和識別率結果上達到一個妥協(xié),本文發(fā)現(xiàn)左上角坐標4個像素為一個探測單位,寬度1個像素更適合本文。固定外接矩形框左上角坐標x、y,逐像素改變外接矩形分割得到的小矩形的寬度,結果如表4所示。表中:坐標移動像素數(shù)代表探測時候外接矩形框左上角坐標x、y移動的像素數(shù)單位,比如3代表調(diào)整外接矩形框時,調(diào)整矩形框左上角坐標x、y時每隔3個像素調(diào)整一次。先驗知識探測對結果的影響如表5所示(此時的先驗知識使用的調(diào)整像素幅度為4)。
表4 像素調(diào)整對比表
表5 先驗知識探測對結果的影響
實驗結果表明,調(diào)整步幅增大,探測時間減少,精度總體有下降的趨勢。為了在時間和精度上做一個權衡,本文最終選擇每4個像素調(diào)整一次,此時22幅測試圖片的最佳識別率為0.80,在速度和精度上都可以很好滿足香煙防偽驗證的需求。在不使用先驗知識探測時候初始識別率僅為0.15,通過加入先驗知識在一定范圍內(nèi)探測識別,識別效果有較大提升。
本文將此算法用于香煙企業(yè)偽品鑒定,將識別出來的結果送入香煙企業(yè)防偽碼數(shù)據(jù)庫比對判斷香煙真?zhèn)巍⒆R別出來有問題的香煙通過人工識別最終確定,大大減少了人工工作量,具有良好的實用價值。
本文結合香煙防偽數(shù)字串的實際情況,充分利用了防偽數(shù)字串的先驗知識,提出了一種新的數(shù)字串識別方法。首先定位出數(shù)字串大概位置;然后分割識別,通過先驗知識判斷是否滿足條件,如果不滿足則繼續(xù)調(diào)整矩形長寬和左上角坐標;最終找到滿足要求的外接矩形,并把此時識別結果作為本文鑒定方法的最終結果。實驗表明,本文提出的方法對于香煙防偽數(shù)字串具有良好的識別效果,很好地滿足了防偽數(shù)字串識別的要求,具有良好的實用價值。本文算法為商品條碼數(shù)字識別、儀表數(shù)字串識別等類似識別問題提供了良好的新思路。