張振宇,姜賀云,樊明宇
(1.溫州大學數(shù)理學院,浙江溫州 325035;2.溫州大學計算機與人工智能學院,浙江溫州 325035)
文字自動化識別是計算機視覺領域的熱門研究課題之一[1],其技術主要包括文字檢測和文字識別兩部分.傳統(tǒng)的光學字符識別(Optical Character Recognition,OCR)是基于圖像處理(二值化、紋理分析、連通域分析等)技術進行的文字定位[2-4],這些方法通常適用于背景較為干凈,且具有特定格式的掃描文檔.現(xiàn)代業(yè)務票據(jù)類型較多,擺放隨意,傳統(tǒng)OCR檢測方法難以取得很好的識別效果.此外,傳統(tǒng)OCR是利用手工設計提取到的特征來訓練文字識別模型,這一過程費時費力.中文字符類別繁多,字符結(jié)構復雜,識別效果往往不佳[5].
隨著深度學習的快速發(fā)展,卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)在計算機視覺領域取得了巨大成功.相對于傳統(tǒng)的通過人工設計提取的淺層特征,CNN可以自然地整合低/中/高/不同層次的特征,更有利于判別器做決策.在圖像分類任務上,以AlexNet[6]為起點,衍生出VGG[7],Inception[8],Resnet[9],DenseNet[10],SeNet[11]等優(yōu)秀的網(wǎng)絡結(jié)構.CNN在圖像分類任務上優(yōu)異的表現(xiàn),使得越來越多的使用者把它們遷移到通用目標檢測任務上.R-CNN[12]是首個成功將深度學習應用到目標檢測上的算法.此后Fast R-CNN[13],F(xiàn)aster R-CNN[14],Mask R-CNN[15]等檢測模型不斷優(yōu)化和改進,大幅度提升了檢測的精度和速度.目前,主流的基于區(qū)域建議的目標檢測網(wǎng)絡大都是以Faster R-CNN為基礎進行改進.原始的Faster R-CNN是針對通用目標檢測任務,我們對其進行了改進和優(yōu)化,使其能更好的適應文字檢測.
近年來,結(jié)合CNN與RNN(Recurrent Neural Network,循環(huán)神經(jīng)網(wǎng)絡)的文本識別技術受到廣泛關注,CNN被用于提取有表征能力的圖像特征,RNN天然適合處理序列數(shù)據(jù)的識別問題,因此,這種網(wǎng)絡架構十分契合基于圖像的文本行識別.卷積循環(huán)神經(jīng)網(wǎng)絡[16](Convolutional Recurrent Neural Network,CRNN)是此類網(wǎng)絡架構具有代表性的方法,該模型使用CNN網(wǎng)絡用來提取圖像的高級語義特征,將提取到的特征轉(zhuǎn)化為特征序列,然后使用雙向長短期記憶網(wǎng)絡[17-18](Bi-directional Long Short-Term Memory,BiLSTM)來捕捉序列前后兩個方向的上下文信息,使用CTC[19](Connectionist Temporal Classifier,聯(lián)結(jié)時序分類)對序列特征進行解碼,得到最終文字識別結(jié)果.這種基于CNN + BiLSTM + CTC的網(wǎng)絡模型已經(jīng)成為文本識別的主流框架.
針對銀行業(yè)務票據(jù)內(nèi)容識別這項特定任務,本文基于深度學習和圖像處理算法,設計并實現(xiàn)一套能夠準確識別文字信息的票據(jù)自動識別系統(tǒng),圖1為此系統(tǒng)的流程圖.
圖1 票據(jù)文字識別流程圖
該系統(tǒng)主要包括文字定位和文字識別兩部分.
文字定位部分,包括三個模塊:圖像預處理模塊、單字定位模塊和字段構造模塊.
1)圖像預處理模塊.根據(jù)采集到的圖像的特點將其對正對齊.
2)單字定位模塊.使用Faster R-CNN網(wǎng)絡對文字進行單字定位.本文進行了兩處改進:改進一,優(yōu)化區(qū)域建議網(wǎng)絡[14](Regional Proposal Network,RPN),通過統(tǒng)計訓練數(shù)據(jù)中文字面積大小分布,設置更合理錨框(anchor box)大小.改進二,使用RoIAlign[15]替換RoIPool[13],避免了檢測特征提取的兩次量化操作,可以在特征圖中保留更準確的空間位置,對于小文字目標檢測有著更好的效果.
3)字段構造模塊.根據(jù)票據(jù)數(shù)據(jù)集的文字區(qū)域特點設計了一個字段構造算法,將一個個離散的單字區(qū)域合并為整體的字段,保留文字的序列信息.
文字識別部分.將字段圖像框送入CNN + BiSRU[20](Bidirectional-SRU,雙向簡單循環(huán)單元)+CTC網(wǎng)絡進行識別,相較于流行的CNN + BiLSTM + CTC的網(wǎng)絡結(jié)構,使用BiSRU替換BiLSTM提高了并行計算能力,使得網(wǎng)絡模型在不損失精度的同時能有效地提升推理速度.
文字定位的整體框架如圖2所示,包括圖像預處理模塊、基于Faster R-CNN的單字檢測定位模塊、字段合并模塊三部分.
圖2 基于Faster RCNN算法的文字定位檢測框架
圖3為圖像校正流程圖.我們假設票據(jù)的擺放是相對隨意的.圖3(a)為采集到的圖片樣例,采集到的圖片都具有業(yè)務票據(jù)在圖像中間區(qū)域呈傾斜狀態(tài)且背景為黑色區(qū)域的特點.為了利于之后的文字定位和識別,通過基于數(shù)字圖像算法的預處理對其進行矯正,可以有效提高系統(tǒng)的識別率.根據(jù)背景前景區(qū)分度大的特點,我們通過檢測輪廓邊緣來進行圖像校正.對采集到的圖像進行灰度化,然后基于閾值實現(xiàn)二值化,見圖3(b).采用OpenCV中findContours函數(shù)找出票據(jù)外層輪廓,對檢測到的輪廓大小進行排序并從中挑選出最大的輪廓.再用minAreaRect函數(shù)得到最大輪廓的最小外接矩形,輸出包括最小外接矩形的中心坐標、寬、高和旋轉(zhuǎn)角度,利用此角度和中心坐標,可以得到旋轉(zhuǎn)矩陣算子,即仿射變換用于矯正圖像,見圖3(c).對于矯正后的圖像,采用上述得到最小外接矩形的方式獲取最小外接矩形后進行裁剪.最終,得到經(jīng)過矯正且去除黑色背景的票據(jù)圖像,見圖3(d).
圖3 圖像校正流程圖
本文采用 Faster R-CNN算法實現(xiàn)對票據(jù)圖像中單個文字目標進行檢測.該算法首先使用ResNet-50[9]卷積網(wǎng)絡對經(jīng)過預處理的圖像進行特征提取,然后通過 RPN得到單文字所在區(qū)域建議以及區(qū)域得分.對于區(qū)域得分,采用非極大抑制算法輸出前N個得分的區(qū)域建議,然后將其輸入到ROIAlign層,通過該層得到區(qū)域建議特征.將其輸入到隨后的網(wǎng)絡分支conv5_x[9]以輸出建議區(qū)域的分類得分以及區(qū)域位置.
1.2.1 設置更合理的錨框大小
RPN是Faster R-CNN的核心部件,相較于之前的Fast R-CNN網(wǎng)絡,它共享卷積特征,在特征圖層面上利用全卷積網(wǎng)絡生成建議區(qū)域,大幅減少了計算量,提高了運行速率.為了生成建議區(qū)域,通常在最后一個共享特征圖上使用一個3*3的滑動窗口對特征圖進行遍歷,在每個滑窗中心位置生成k個錨框,每個錨框有其對應尺度和比例.
原始 Faster-RCNN設置了9種不同大小的錨框,對應搭配了3組長寬比(1∶1,1∶2,2∶1)的3組尺度(1282,2562,5122).這種設置方式適合通用物體檢測數(shù)據(jù),比如 Pascal VOC[21]、MS COCO[22]等.針對本文的業(yè)務票據(jù)數(shù)據(jù)集,需要檢測的目標屬于小目標的文字,上述錨框的參數(shù)設置不合理.為了更好的引導網(wǎng)絡的收斂和使模型更好擬合我們數(shù)據(jù)集的分布,本文通過統(tǒng)計票據(jù)訓練數(shù)據(jù)集中字符的真實框面積大小直方圖,見圖4.針對字符重新設置錨框的尺度為(242,362,482),搭配的長寬比依然是(1∶1,1∶2,2∶1),共計9種不同大小的錨框.
1.2.2 ROIAlign
在使用 RoiPool[13]時,網(wǎng)絡進行了兩次將浮點數(shù)取整的操作,即兩次量化,這兩次量化操作會對最后的檢測位置產(chǎn)生偏移.因為我們要檢測的文字目標尺度較小,所以兩次量化產(chǎn)生的偏移會嚴重影響檢測目標的準確性,也會對最后的識別產(chǎn)生不利影響.為了避免這種情況,本文使用RoIAlign[15]代替RoIPool.
RoIAlign具體操作如圖5所示,虛線框為RoI對應的特征圖,實線線框表示RoI,假設經(jīng)池化后固定為2×2大小的特征圖,因此需要把ROI平均分成4個大小相同的區(qū)域.對于劃分的每一個區(qū)域,如果假定采樣數(shù)是 4,即需要把每個區(qū)域平均劃分4份,每一份取其中心點位置,而中心點位置的像素,采用雙線性插值法進行計算,這樣就會得到四個點的像素值.取四個像素的最大值,依次遍歷RoI劃分的所有區(qū)域,最后即得2×2的特征圖.
圖4 訓練數(shù)據(jù)中字符框大小分布
圖5 ROIAlign示意圖
Faster R-CNN文字檢測網(wǎng)絡是針對單字進行的給定票據(jù)圖像,上述方法檢測出若干文字框loci={(xi,yi),wi,hi},i= 1,…,m,其中l(wèi)oci是檢測出來的第i個文字框,(xi,yi)表示左上角坐標,wi,hi表示文本框的寬和高,m是檢測出單字的個數(shù).在票據(jù)識別中,文字都是以序列的形式出現(xiàn)的,具有豐富的上下文信息,因此必須將鄰近文字框進行整合.本文按照票據(jù)數(shù)據(jù)的特點設計了一個字段構造算法對檢測到的單字框進行合并,該算法的主要思想是將同一條水平線上相鄰近的單字檢測框組合起來.
兩個單字檢測框之間,符合以下規(guī)則才能組合.
1)檢測框loci和locj互為最鄰近.最鄰近表示在水平距離上,其中一個檢測框是另外一個檢測框的最近的一個檢測框.
2)檢測框loci和locj之間的水平距離不超過60像素點.
3)檢測框loci和locj在垂直高度上的重合比例>0.5.
將符合以上規(guī)則的單字檢測框組成字段框,最終即將字段從原圖像中定位出來,合并為文字序列圖像數(shù)據(jù)且string的圖像寬度一般遠大于loc 的寬度.
CRNN是一個端到端的網(wǎng)絡框架,它可以實現(xiàn)不定長的文字識別,模型訓練只需要圖片和對應的文字標注即可.我們基于CRNN的框架對檢測到的字段進行識別.該網(wǎng)絡的結(jié)構如圖6所示,主要包含三個部分:CNN,BiSRU和 CTC.該網(wǎng)絡首先使用CNN來提取圖像的高級語義特征,將提取到的特征轉(zhuǎn)化為特征序列,該序列的長度等同于特征圖的寬度.序列中每個向量的維度等于特征圖的高度乘以深度,然后使用BiSRU來捕捉特征序列前后兩個方向的上下文信息,最后BiSRU輸出的序列特征中的每個特征向量被用來識別每個序列幀上的符號,使用 CTC對其進行解碼得到最終文字識別結(jié)果.
圖6 文字識別流程圖
假設字段框stringi對應輸入的文字圖像Pi,大小用三維向量C×Hi×Wi(C表示通道數(shù),通常為3,Hi和Wi分別表示為高和寬),輸入圖像在被送往網(wǎng)絡之前首先需要縮放到相同的高度H.我們通過設置文字識別部分CNN網(wǎng)絡的卷積層和池化層的參數(shù)使得其最后一層輸出高度為 1的特征序列向量這些特征向量序列之后作為 BiSRU的輸入.因卷積和池化都不改變特征序列與原圖文字的順序,而且相近特征向量的感受野也是相互重疊的,因此該特征本身就包含了一定的上下文信息.
相較于傳統(tǒng)的 LSTM[17]和 GRU[23]等基于門控機制的循環(huán)網(wǎng)絡結(jié)構,SRU[20]有著更為簡潔的結(jié)構.
一個單層的SRU在時間步t時包含下列計算:
其中,ft和rt分別為遺忘門和重置門,xt為當前時刻的輸入向量,st?1為上一個時刻的狀態(tài),σ為sigmoid激活函數(shù),⊙為向量元素乘積(哈達瑪積),W,Wf,Wr和vf,vr,bf,br分別為參數(shù)矩陣和參數(shù)向量,它們都是在訓練過程中要學習的參數(shù).SRU有兩個特性,“輕量循環(huán)”對應公式(1)和(2),“高速路網(wǎng)絡”對應公式(3)和(4).
SRU是單向的,只能利用之前的輸入而無法利用之后的輸入,不能充分利用完整的上下文信息,對此我們設置了兩個方向相反的 SRU并將它們的輸出合并,得到 BiSRU(Bidirectional-SRU).這個網(wǎng)絡可以同時分析自左向右以及自右向左兩個方向上的長距離相關性,從而讓其輸出的特征向量包含了豐富的上下文信息.
CTC[19]可以解決輸入序列與輸出序列在長度不相同的情況下的相關性計算問題,從而基于相關性定義目標函數(shù)并將其最大化(最大化后驗概率).假設當前string 對應文字圖像P,其BiSRU的輸出的未加工預測標簽序列為y=(y1,…,yT),長度為T,而P對應的真實標簽序列為l,l的序列長度小于或等于T.
CTC定義給定y序列l(wèi)的后驗概率為
其中,π(π:β(π)=l)表示所有經(jīng)過β變換后可得到真實標簽l的序列.β變換定義為在序列π中移除重復的標簽和空白字符(空白字符用“-”表示)的操作,例
最大化后驗概率(5)的含義是y和能夠滿足β(π) =l的一個或多個π盡可能一致.(5)式中的p(π|y)定義為:
其中,p(πt| yt)是t時刻πt對應的字符標簽概率值.
因為CTC的后驗概率相對于輸入是可導的,所以網(wǎng)絡以CTC構造的后驗概率(5)式作為目標函數(shù)是可以通過反向傳播的方式進行端到端的訓練.但是由于存在指數(shù)級數(shù)量的求和項,直接計算式(5)計算量巨大.因此,CTC利用“前向-后向”算法來計算p(l|y)[19].
本文的實驗分別對文字檢測和文字識別進行訓練和測試,所有實驗在ubuntu 18.04系統(tǒng)上操作,硬件配置8線程Corei7-7700k CPU@4.2GHZ,內(nèi)存為32 G,顯卡為GTX1080ti.
本文所使用的數(shù)據(jù)總共包含近10種不同類型共100張業(yè)務票據(jù)圖像.圖片的像素尺寸大小不一,尺寸集中在1 500×1 000~2 000×3 000之間.根據(jù)圖像中字符來源不同,可將業(yè)務票據(jù)中的字符分為兩類:印刷字符和打印字符.印刷字符包括標題、項目區(qū)域類型說明字符等.打印字符是在開具票據(jù)時由銷售方通過專用打印機打印上去,字符統(tǒng)一為黑體.本文針對打印字符進行檢測與識別.
我們對標注好的100張圖像按8∶2隨機分成訓練集和測試集.把輸入圖像縮放為統(tǒng)一尺寸,使得圖像長邊小于等于1 800,短邊小于等于1 500(至少有一個等于且保持原圖像的長寬比).我們的目標檢測模型Faster-RCNN在訓練集上進行了微調(diào).若識別出的字符框和標記的矩形框的交集部分與它們兩者并集的比值大于0.5,則記為真實的檢測.
我們使用平均精度(Average Precision,AP)作為我們測試階段的評價指標.每批訓練圖片數(shù)2,區(qū)域提議階段批大小為256,RoIAlign輸出的特征圖大小為14×14,采用的優(yōu)化器是 SGD(Stochastic Gradient Descent)算法,學習率為 0.001,動量為0.9,權重衰減為0.001,迭代次數(shù)為20 000,網(wǎng)絡的平均訓練速度為0.622 6 s/iter.模型訓練過程中產(chǎn)生的損失曲線如圖7所示.
相較于Faster R-CNN的原始的錨框尺度設置,依據(jù)統(tǒng)計訓練集中圖像內(nèi)文字的面積大小分布,重新設計了9個不同尺度的錨框.針對這兩種錨框設置方式做了一組對比實驗,從表1的實驗結(jié)果可以看出,我們新設置的錨框的尺度能夠十分有效提升檢測效果.
圖7 文字檢測訓練損失曲線
表1 文字檢測實驗結(jié)果
在使用本文設置錨框尺度的基礎上,本文對搭配不同的RoI層的模型做了一組對比實驗.從表1可看出,ROIAlign相比ROIPool在AP上提高了8個百分點,說明了本文采用ROIAlign特征提取策略的有效性.
實驗訓練部分所需的數(shù)據(jù)集是采用合成的方法生成的中文數(shù)據(jù)集①https://github.com/senlinuc/caffe_ocr.,數(shù)據(jù)是利用中文語料庫(新聞 + 文言文),通過字體、大小、灰度、模糊、透視、拉伸等變化隨機生成的,字典中包含漢字、標點、英文、數(shù)字共5 990個字符(語料字頻統(tǒng)計,全角半角合并),每個樣本固定10個字符,字符隨機截取自語料庫中的句子,圖片分辨率統(tǒng)一為280×32,共生成約360萬張圖片,按9∶1分成訓練集、驗證集.
采用ADAM(Adaptive Moment Estimation)優(yōu)化器算法[24],初始的學習率為0.001,批量的大小為256,迭代次數(shù)100 000,在第70 000次迭代時將學習率調(diào)整為0.000 01.
為了更好的驗證SRU的性能,我們對分別采用SRU和LSTM的CRNN模型進行了多組對比實驗.圖8為不同模型在驗證集上的準確率曲線圖,表2為不同模型在訓練完成后在驗證集的實驗結(jié)果對比.從表2可以看出,1層SRU比起1層LSTM模型在準確率上所差無幾,但是識別時間減少近30%.2層模型的準確率雖有些許提升,但是也伴隨著識別時間的增加.實驗結(jié)果表明,使用SRU的模型比起LSTM在不犧牲準確率的同時有效地減少了識別時間.
表2 SRU/LSTM驗證集上實驗結(jié)果
文字識別的測試集使用的是對文字檢測數(shù)據(jù)集中測試集圖像的字段部分進行切割的236張文本圖片.表3為不同模型在測試集上的字段識別準確率、單字識別準確率以及平均識別時間.表3結(jié)果表明,使用SRU替換LSTM能在不犧牲準確率的同時能有效地減少識別時間.
表3 SRU/LSTM驗證集上實驗結(jié)果
本文針對銀行業(yè)務票據(jù)內(nèi)容識別這項特定任務,首先利用圖像處理工具對其進行校正,然后利用本文提出的基于Faster R-CNN的單字檢測算法對其進行單字定位,對定位出的單字以一定的規(guī)則合并為字符串字段,最后將合并后得到的字段送入由本文提出的CNN + BiSRU + CTC網(wǎng)絡進行文字識別.實驗結(jié)果表明,所提出的模型在特定業(yè)務票據(jù)場景下的文字檢測和文字識別上都有著上佳的表現(xiàn).