摘要: 該文章先介紹常見的文字識別方法,然後介紹YunOS在情境文字識別方面取得的進展、結果和技術方案。將重點講解技術方案的兩個主要部分:1)基於全卷積網路的從局部到整體的文字行檢測方法;2)基於BLSTM-CTC-Seq2Seq的文字行識別方案。 1 概述
隨著深度學習技術的發展,尤其是卷積神經網路(Convolutional Neural Networks,CNN)和迴圈神經網路(Recurrent Neural Networks,RNN)的發展,文字識別(Optical Character Recognition,OCR)和情境文字識別(Scene Text Recognition,STR)在近年來有了飛速的發展。文字識別主要分為兩步:文字檢測和文字識別。其中,文字檢測主要有基於筆劃特徵的方法(Stroke Width Transform,SWT)、基於穩定地區(Maximally Stable Extremal Region,MSER)的方法和基於全卷積網路(Fully Convolutional Networks,FCN)的方法。而文字識別則主要分為基於字元/單詞分類的方法和基於序列的識別方法。
與傳統的OCR服務不同,YunOS更關注使用者照片中的內容,即自然情境中的文字識別技術。因此,我們的技術方案更關注訓練樣本的多樣性和基礎分類模型的效能,較少地考慮文檔的先驗結構。
下面先簡要介紹已有方法,然後介紹我們的方法和接入方式。 2 現有方法 2.1 文字檢測
如上所述,文字檢測方法主要分為三類:基於筆劃特徵、基於穩定地區和基於卷積網路。代表性方法如下。
1)Stroke Width Transform,SWT [1]
SWT假設每個字元的筆劃寬度是大致相同的,因此從一個Canny邊緣點沿梯度方向出發,如果能夠找到梯度方向相反的邊緣點,則認為該筆劃寬度有效。檢測完所有邊緣點後,基於筆劃寬度過濾,即可得到文字信賴度。其過程如下圖1和圖2所示。該方法簡單有效,但在自然情境中會導致很多虛警。這些虛警通常出現在類似文字的地區,如:條環、窗戶、磚塊和網格等。
圖1 - 文字的局部梯度方向
圖2 -SWT演算法的過程
2)Maximally Stable Extremal Region,MSER [2-3]
MSER首先提取映像中最大穩定極值地區的作為候選,然後通過分類器濾除不合法的候選地區,最後將過濾後的候選地區,通過一系列的後處理和串連規則群組合為文本行。該演算法利用的先驗知識較少,對語種、文字的角度就較為魯棒。但與SWT類似,其在複雜背景下容易產生虛警,影響後續步驟。
圖3 - 基於最大穩定極值地區MSER的文字檢測
3)基於文字分類CNN和連通域分析的方法[4-5]
該方案是將映像輸入“文字分類CNN”,得到對應的文字信賴度圖,然後使用連通域分析計算文字行。該方案中的CNN基於文字正負樣本訓練而成,須要切圖、負樣本採樣等步驟,效率較低,其效能易受正負樣本的多樣性影響。
圖4 - 基於文字分類CNN和連通域分析的方法
4)基於FCN的方法 [6-9]
該方案將檢測問題看作一種廣義的“分割問題”,避免了3)中的正負樣本準備步驟,以end-to-end的方式預測文字地區mask(如圖6和圖7所示)。在mask的基礎上進行座標迴歸、字元切分、行分析等操作,從而得到最終的文字行座標。該方案對尺度、方向、複雜背景的魯棒性均較強,目前已成為文字檢測的主流方法。
圖5 - 近似橫排文字的檢測效果
圖6 - 任意角度文字的檢測效果
5)基於FCN和RNN的聯合方法
在FCN的基礎上,[10]將RNN引入到文字檢測任務中,以擷取更大的橫向感受野(Receptive Field)。結果表明,該方法對於水平文字效果非常好,但其較難推廣到任意角度。
圖7 - 基於CNN和RNN的聯合方法 2.2 文字識別
文字識別方法主要分為三類:基於淺層模型的字元識別、基於深度網路的字元/單詞識別、序列識別。代表性方法如下。
1)基於淺層模型的字元識別方法
將文字行按字元切割後,文字識別即可看作字元分類問題。通常的做法是,提取字元的描述特徵,然後使用分類器進行分類。常採用的文字特徵有局部矩、HOG、SIFT等[11-12]。在[13]中Shi等人提出一種基於DPM(Deformable Part Model)的文字表達方法。DPM可適應字型變化,對雜訊、模糊等因素較為魯棒。
圖8 - 數字和英文字母的DPM範例
2)基於深度網路的字元/單詞識別方法
用深度網路代替傳統的人工特徵,即可大幅提升識別率。第一種做法與傳統方法類似,採用CNN對字元進行分類(如圖9),另一種則對單詞進行分類(如圖10)。字元分類網路的訓練相對容易,但由於完全不考慮語義資訊,其準確率相對較低。
CNN強大的表達能力使得“單詞級”的分類成為可能,其類別數普遍較大,如:英文9萬。[14]使用此暴力方法在英文識別任務上取得了當時最好的結果。此類方法主要存在兩處不足:a)其依賴預先定義的詞典,不能識別字典外單詞(Out-of-Vocabulary Problem);b)對於過長的單詞,輸入映像的形變往往較大,會影響識別率。
圖9 - 中、英、數混合字元識別網路
圖10 - 英文單詞識別網路
3)基於序列的文字識別方法
此外,字元和單詞識別方法的效能嚴重依賴於文本切分的精度。針對此問題,基於序列的文字識別方法應運而生。此類方法與語音辨識方法非常相似,其將文字行看作一個整體,不做切分,直接批量或增量識別出其中的字元序列。這種方法能夠更充分地利用文字序列上下文關聯進行消歧,避免字元誤分割造成的無法復原錯誤。在此架構下,訓練集的準備也更加簡單,只需標註整行對應的文字內容,無需標註每個字元的具體位置。
文字行識別主要有兩種結構,其一是CNN+LSTM+CTC結構[15-16](見圖11),其二是CNN+LSTM+Seq2Seq [17](見圖12)。這兩種方法的主體是一致的,首先採用CNN學習映像相鄰像素之間的關係,然後採用雙向長短期記憶神經網路(Bidirectional Long Short-Term Memory,BLSTM)學習較長跨度的上下文關係(感受野為整行)。最後分別採用CTC(Connectionist Temporal Classification)和Seq2Seq作為目標函數最佳化整個網路的參數。
圖11 - 基於CNN+LSTM+CTC的英文單詞識別
圖12 – 基於CNN +LSTM+Seq2Seq的英文單詞識別 3 技術方案
我們的方案沿用了當前的主流方法,分為三步:訓練資料合成、文字行檢測和文字行識別,其流程如圖13所示。下面將展開介紹檢測和識別步驟的細節和特點,訓練資料的合成將在其中穿插介紹。
圖13 - 技術方案流程 3.1 檢測步驟 3.1.1 訓練資料產生
深度網路的效能強依賴於大規模和多樣化的資料,而文字資料的人工標註成本往往較高(約為0.1元/文字框),此外也存在標註速度問題(125個/每小時)。為節約成本和提升效率,我們採取了“以合成資料為主,人工標註資料為輔”的策略。
合成流程與[18]基本一致,步驟如下: 準備大量不含文字的背景映像 準備豐富多樣的各類字型 準備的豐富的文本語料,按行組織 對背景圖片做地區分割和深度估計 隨機選取背景圖、字型、地區等參數,將隨機選取的文本行渲染到背景圖上 在渲染過程中,記錄每個文字框的座標
整個過程自動進行,在數天內我們合成了超過50W的訓練樣本。範例如圖14所示,可看出合成樣本較為接近真實情境,為網路訓練打下了較好的基礎。
圖14 - 合成的文字檢測訓練資料 3.1.2 網路訓練
如前所述,FCN是目前主流的文字檢測方法。而另一種非常流行的物體檢測方法Faster-RCNN在文字檢測中的效果卻不盡如人意,其主要原因是:文字的形狀往往為長條狀,不太適合採用感受野(Receptive Field)比例接近1:1的網路結構。
若網路的感受野太小,則難以檢測較長的文字(圖15綠色框),若擴大感受野,則在短邊方向存在較大浪費,較難區分多行文字(圖15紅色框)。由於無法預知文字方向,構造長方形感受野的方案也不太可行。對於英文單詞,其長寬比一般在可接受範圍內(如:從1:5到5:1),此矛盾不會凸顯。而對於中文或中英混排文字行,如何有效地檢測帶狀物體是提升效能的關鍵。
圖15 - 感受野與解析度之間的矛盾
為解決此問題,我們於2016年10月提出了採用“FCN局部文字塊檢測”和“幾何約束下的行產生”來檢測任意長度文字行的方案(如圖16所示)。該方案主要思想是:將文字行切分為局部方形框,使用FCN檢測其擅長的方形文字塊,同時預測每個文字塊與近鄰間的串連關係。
圖16 - 文字行檢測過程
FCN前部是普通的卷積、Pooling等層,後部分為三支,分別輸出:文字信賴度、局部文字框座標、局部角度。信賴度採用二分類交叉熵作為目標函數,座標採用L2或L1距離作為目標函數,角度採用相關性(或Cosine相似性)作為目標函數。整體目標函數由上述三項加權得到。
在測試階段,首先根據信賴度篩選出少量候選文字塊(數百個);然後根據候選塊之間的相互幾何關係構建圖(Graph),幾何關係可包括:距離、相對大小、角度一致性等;最後對圖進行分割,可採用最簡單的連通子圖方法,也可採用GraphCut等複雜方法。
圖17和圖18詳細展示了經過該方案中的中間結果和最終檢測結果。
圖17 - 檢測的中間和最終結果
圖18 - 檢測的中間和最終結果
該方案的不足在於,其將檢測過程拆分為獨立的兩步:局部檢測和合并,而兩步之間鴻溝會導致誤差累積。雖然網路輸出的方向資訊為合併作業提供了重要的線索,若我們能將兩步有機地串聯起來,相信會帶來較大的效能提升。此外,從上圖中可以看出FCN輸出的文字信賴度有棋盤格效應,這種效應一般由反卷積(或稱為Transposed Convolution)操作導致[19],通過某些平滑技巧即可避免,可能對效能有一定協助。
值得注意的是,近期學術界也開始採用類似的方法[8, 20]來檢測情境文字,並取得了較好的結果。這類從局部到整體的檢測方法在人體姿態估計問題中也有成功的應用[21]。 3.2 識別步驟 3.2.1 訓練資料產生
與文字檢測類似,在識別步驟中我們仍採用“以合成資料為主,人工標註資料為輔”的策略。對於識別任務,各類樣本的均衡性非常重要,但各字元在真實語料或圖象中的分布卻非常不均勻,往往為長尾分布(如圖19所示)。採用自然資料訓練的模型,常用字準確率一般較高,而長尾字準確率偏低。為提升長尾字的準確率,合成幾乎是唯一可行的方案。
圖19 - 中、英等字元呈典型的長尾分布
我們採用與3.1.1類似的步驟合成文字行,其中包含漢字、字母、標點、數字等6803類字元,加入了模糊、傾斜、透視、展開、陰影、描邊、加框、隨機雜訊等變化,最終合成約500W張文字行圖片。在合成過程中,通過對語料進行採樣,可以獲得幾乎呈均勻分布的訓練樣本。範例如圖20所示。
圖20 - 合成的文字行識別訓練資料 3.2.2 網路訓練
如前所述,基於序列的文字行識別方法是當前主流,在自然情境下具有最好的效能。目標函數一般分為CTC和Seq2Seq兩種,CTC的優點是收斂速度快,Seq2Seq收斂速度慢但其精度一般高於CTC。我們參考了近期MERL在語音辨識中採用的方式[22],將CTC和Seq2Seq結合起來,並引入Attention機制。
整體網路結構如圖21所示,其中Encoder部分由CNN和BLSTM組成負責將映像轉換為抽象的特徵表達,Decoder部分負責從特徵中解碼字元。Decoder分為兩支,CTC分支一邊配准一邊計算特徵與Label之間的損失,Seq2Seq分支利用Attention機制關注特徵的某些局部,並按時序解碼字元。實驗證明,聯合訓練方案的精度確實更優,且收斂速度與CTC相當。
圖21 - Joint CTC+Seq2Seq (with Attention) 3.3 ICDAR RRC 2015
為驗證方案的有效性,我們於2016年11月在ICDAR RRC 2015 [23]的三個情境下測試並提交了英文模組的效能,在當時取得了一項排名第一,二項排名第二。結果如圖22所示。
圖22 - 在ICDAR RRC 2015 Generic協議下的結果(時間:2016年11月)