閱讀367 返回首頁    go 阿裏雲 go 技術社區[雲棲]


YunOS場景文字識別

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月)


當然,現有服務還存在諸多不足,我們正在持續改進。

  • 豎行文字檢測精度不夠理想
  • 豎行文字識別模塊缺失
  • 暫不支持“空格”,會導致英文單詞粘連

另外,相應離線版本也在開發中,預計2017年7月底會有初步成果,相關內容會單獨介紹

參考文獻

[1] Epshtein, Boris, Eyal Ofek, and Yonatan Wexler. "Detecting text in natural scenes with stroke width transform." Computer Vision and Pattern Recognition (CVPR), 2010 IEEE Conference on. IEEE, 2010.

[2] Neumann, Lukas, and Jiri Matas. "A method for text localization and recognition in real-world images." Computer Vision–ACCV 2010 (2011): 770-783.

[3] Neumann, Lukáš, and Jiří Matas. "Real-time scene text localization and recognition." Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. IEEE, 2012.

[4] Jaderberg, Max, et al. "Reading text in the wild with convolutional neural networks." International Journal of Computer Vision 116.1 (2016): 1-20.

[5] Jaderberg, Max, Andrea Vedaldi, and Andrew Zisserman. "Deep features for text spotting." European conference on computer vision. Springer International Publishing, 2014.

[6] Zhang, Zheng, et al. "Multi-oriented text detection with fully convolutional networks." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

[7] Yao, Cong, et al. "Scene Text Detection via Holistic, Multi-Channel Prediction." arXiv preprint arXiv:1606.09002 (2016).

[8] Zhou, Xinyu, et al. "EAST: An Efficient and Accurate Scene Text Detector." arXiv preprint arXiv:1704.03155 (2017).

[9] Moysset, Bastien, Christopher Kermorvant, and Christian Wolf. "Full-Page Text Recognition: Learning Where to Start and When to Stop." arXiv preprint arXiv:1704.08628 (2017).

[10] Tian, Zhi, et al. "Detecting text in natural image with connectionist text proposal network." European Conference on Computer Vision. Springer International Publishing, 2016.

[11] Wang, Kai, Boris Babenko, and Serge Belongie. "End-to-end scene text recognition." Computer Vision (ICCV), 2011 IEEE International Conference on. IEEE, 2011.

[12] Yao, Cong, et al. "Strokelets: A learned multi-scale representation for scene text recognition." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2014.

[13] Shi, Cunzhao, et al. "Scene text recognition using part-based tree-structured character detection." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2013.

[14] Jaderberg, Max, et al. "Reading text in the wild with convolutional neural networks." International Journal of Computer Vision 116.1 (2016): 1-20.

[15] He, Pan, et al. "Reading scene text in deep convolutional sequences." Thirtieth AAAI Conference on Artificial Intelligence. 2016.

[16] Shi, Baoguang, Xiang Bai, and Cong Yao. "An end-to-end trainable neural network for image-based sequence recognition and its application to scene text recognition." IEEE Transactions on Pattern Analysis and Machine Intelligence (2016).

[17] Lee, Chen-Yu, and Simon Osindero. "Recursive Recurrent Nets with Attention Modeling for OCR in the Wild." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

[18] Gupta, Ankush, Andrea Vedaldi, and Andrew Zisserman. "Synthetic data for text localisation in natural images." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

[19] https://distill.pub/2016/deconv-checkerboard/

[20] Shi, Baoguang, Xiang Bai, and Serge Belongie. "Detecting Oriented Text in Natural Images by Linking Segments." arXiv preprint arXiv:1703.06520 (2017).

[21] Cao, Zhe, et al. "Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields." arXiv preprint arXiv:1611.08050 (2016).

[22] Kim, Suyoun, Takaaki Hori, and Shinji Watanabe. "Joint ctc-attention based end-to-end speech recognition using multi-task learning." arXiv preprint arXiv:1609.06773 (2016).

[23] https://rrc.cvc.uab.es/

最後更新:2017-06-23 23:35:03

  上一篇:go  《深入理解Elasticsearch(原書第2版)》一2.1.2 TF/IDF評分公式
  下一篇:go  Java並發編程開發筆記——1簡言