OCR 文本檢測與文本識別的方法

點擊上方「藍字」關注咱們算法


做者 | 胡雅倫
編輯 | 張嬋




背景介紹微信


基於深度學習的 OCR 主要分爲文本檢測和文本識別兩步。文本檢測就是定位圖像中文本的位置,文本識別就是識別單行文本中的具體內容(OCR 具體流程能夠回顧咱們系列文章的第一篇:淺談深度學習OCR實踐思路)。這篇文章將簡單介紹經常使用的基於深度學習的文本檢測與文本識別方法。




文本檢測網絡


在深度學習方法流行以前,文本檢測主要是以手動提取特徵爲主,經過滑動窗口提取分類,最後彙總爲文本區域。基於深度學習的文本檢測方法大多來自於深度學習的物體檢測框架體系,但又針對文本獨有的特色進行了優化與改進。

基於深度學習的文本檢測方法主要包括:基於候選框的文本檢測、基於分割的文本檢測、基於二者方法混合的文本檢測、其它方法的文本檢測。   


基於候選框方法的基本思路是先預先生成若干個候選文本框,再通過 NMS(非極大值抑制)獲得最終的檢測結果。基於分割方法的基本思路是經過分割網絡結構進行像素級別的分割,而後進行後處理構建出文本行。


常見方法簡單總結以下:

下面簡單介紹一下基於候選框和基於分割方法中的表明模型。


0 1 
CTPN(基於候選框)




CTPN 的全稱是 Detecting Text in Natural Image with Connectionist Text Proposal Network(基於鏈接預選框網絡的文本檢測)。該模型的基本作法是直接在卷積得到的特徵圖上生成的一系列適當尺寸的文本候選框,利用後處理將候選框合併來進行文本行的檢測。

1.1 CTPN 的思路app


大部分狀況下,文本是水平排列的,而且連續字符的長度可變,高度基本相同。基於這一假設,CTPN 算法將文本在水平方向上分紅小片,按照固定的高度檢測文字,找出圖像中連續出現一片一樣高度特徵的區域,最後利用規則將屬於同一水平行的小片組合成文本行。


1.2 CTPN 的框架框架


CTPN 模型利用 CNN+RNN 提升了文本檢測精度。其中 CNN(Convolutional Neural Networks,卷積神經網絡)提取文本的深度特徵,論文中採用的是經典的 VGG16 網絡。RNN(Recurrent Neural Networks,循環神經網絡)提取先後文的序列特徵,論文中採用的是 BLSTM(Bidirectional Long Short Term Memory Network,雙向長短時間記憶網絡) 。

CTPN 的具體實現流程以下:

(1)使用 VGG16 做爲 base net 提取深度特徵,獲得 conv5_3(VGG 第 5 個 block 的第三個卷積層)的特徵做爲特徵圖,大小是 C×H×W。ide


(2)在上述的特徵圖上使用大小爲 3×3 的滑動窗進行滑動,每一個窗口都能獲得一個長度爲 3×3×C 的特徵向量,輸出 9C×H×W 的特徵圖。其中每一個滑動窗口中心都會預測 k 個 anchor 的偏移值(anchor 可理解爲上文提到文本小片,寬度固定爲 16)。學習


(3)將上一步獲得的特徵輸入到 256 的 BLSTM 中,獲得長度爲 H×W×256 的輸出。flex


(4)將 BLSTM 的結果輸入到 512 的 FC(Fully Connected layer,全鏈接層),獲得 512×H×W 的結果。優化


(5)將 FC 特徵輸入到三個分類或者回歸層中。三個結果的含義:編碼


  • 2k vertical coordinate(迴歸):k 個 anchor 的 y 座標/高度偏移值;

  • 2k 個 score(分類):k 個 anchor 爲文字/非文字的分數;

  • k 個 side-refinement(迴歸):每一個 anchor 的水平偏移值,用於精修文本行的兩個端點。


(6)使用 NMS(非極大值抑制算法)來濾除多餘的 anchor。


(7)使用基於圖的文本行構造算法,將獲得細長矩形合併成文本行。



0 2 
PixelLink(基於分割)




PixelLink(像素鏈接)模型的核心是 Pixel(像素)和 Link(鏈接),即經過預測圖像中的像素是否爲文本,以及該像素與其 8 個鄰域方向是否存在鏈接,最終來準肯定位文本框。


2.1 PixelLink 的思路


基於候選框的方法(如 CTPN)一般須要經過分類判斷是文本/非文本,經過迴歸肯定邊界框的位置和角度,但迴歸的耗時較大,準確率也沒法徹底保證。PixelLink 拋棄了邊框迴歸的思想,採用實例分割的方法,分割出文本行區域,而後直接找對應文本行的外接矩形框。


2.2 PixelLink 的框架



PixelLink 的實現過程包括兩部分:先經過深度學習網絡預測文本(pixel positive)/非文本(pixel negative)以及預測鏈接(link positive)/無鏈接(link negative),再根據 link positive 鏈接 pixel positive 獲得文本實例分割圖,從分割圖中直接提取文本的外接矩形框。

第一部分:網絡結構



(1)PixelLink 的主幹網絡基於 CNN,採用 VGG16 做爲特徵提取器,將最後兩個全鏈接層改爲卷積層。


(2)提取不一樣層的特徵圖,採用自頂向下的方法進行融合,融合操做包括先向上採樣,而後再進行 Add 操做。特徵融合的方式基於 FPN(feature pyramid network,金字塔特徵網絡),即卷積層的尺寸依次減半,但卷積核的數量依次增倍。


(3)輸入到 2 個分類層中進行預測:


  • 文本/非文本預測,輸出 1x2=2 通道(文本/非文本);

  • 鏈接預測,輸出 8x2=16 通道(8 個鄰域方向是否有鏈接)。


第二部分:實例分割並提取文本


(1)對於 Pixel(像素)、Link(鏈接)的預測結果,經過設定兩個不一樣的閾值獲得 pixel positive 集合和 link positive 集合。


(2)根據 link positive 將 pixel positive 進行鏈接,獲得 CCs(conected compoents,連通域)集合,集合中的每一個元素表明的就是文本實例。鏈接的規則採用的是 Disjoint set data structure(並查集)的方法。


(3)經過對上一步獲得的 CCs(連通域)集合使用 OpenCV 的 minAreaRect (最小外接矩形)提取不一樣大小的文本的外接矩形框。


(4)使用 disjoint-set(並查集)方法造成文本框。


(5)利用長度、寬度、面積、長寬比等信息,根據必定的閾值過濾上一步的文本框,去除噪聲。


2.3 總結


(1)CTPN:因爲加入 BLSTM,對水平文字檢測效果很是好;因爲框架限制,在其它方向的檢測效果相對較差。採用邊界框迴歸的方法,訓練速度較慢。


(2)PixelLink:放棄邊框迴歸,所有轉化爲分類任務,經過實例分割生成邊界框。訓練速度更快,效果更好。




文本識別



基於深度學習的文本識別框架主要有 CNN+RNN+CTC 和 CNN+Seq2Seq+Attention。二者的結構差很少,前半部分都是用 CNN 編碼器提取圖像基本特徵。

對於後半部分,CNN+RNN+CTC 框架利用 RNN 和 CTC 學習文字上下文關係,提高了文字的識別率。CNN+Seq2Seq+Attention 框架在 RNN 的基礎上加入 Seq2Seq,可將固定長度的向量轉換爲可變長度的目標,解決了多對多的映射問題;引入 Attention 的方法,利用加權平均法計算注意力,既能重點關注文字的上下文,又能夠和遠距離文字保持聯繫。但 Attention 目前在中文識別上的效果不夠穩定且計算開銷大,因此目前工業界更多仍是在使用 CNN+RNN+CTC 框架。


常見方法簡單總結以下:

下面簡單介紹一下更經常使用的 CNN+RNN+CTC 框架中的 CRNN 模型。

0 1 
CRNN(CNN+RNN+CTC)




CRNN(Convolutional Recurrent Neural Network,卷積循環神經網絡)是華中科技大學白翔教授等提出的文本識別模型,能夠識別較長的文本序列。


1.1 CRNN 的思路


CRNN 模型基於 CNN+RNN+CTC 框架,首先用 CNN 提取圖像特徵,而後用 RNN 提取文字序列特徵,最後引入 CTC 模型(Connectionist temporal classification,聯接時間分類),拋棄對輸入字符進行分割的想法,直接進行端到端訓練,可識別任意長度的文本序列,解決字符分割的對齊問題。


1.2 CRNN 的框架




CRNN 模型主要由三部分組成:卷積層提取深度特徵,循環層提取時序特徵,轉錄層利用去重、整合等操做獲得最終識別結果。具體流程以下:

(1)卷積層:將圖像輸入到 CNN 卷積層,獲得特徵圖。


(2)循環層:在上一步獲得的特徵圖上按照必定的寬度從左到右生成特徵序列,輸入到循環層。循環層由一個 BLSTM 循環神經網絡構成,預測每一個特徵序列對應的字符結果。


(3)轉錄層:利用 CTC 模型,去掉上一步預測的結果中的空字符、重複字符並進行整合,解決字符對齊問題,最後獲得輸出結果。





總結


隨着深度學習的發展,文本檢測與文本識別的方法愈來愈多樣化,技術更新十分迅速。但在實際開發的過程當中,因爲應用場景存在差別,時間、數據每每有所限制,選擇模型時要考慮多方面因素,須要不斷實驗,對比效果。另外,深度學習模型也不是萬能的,可能在某種狀況下的效果好,但在另外一種狀況下的效果就不盡人意,因此爲了提高最終識別效果,OCR 流程中其餘步驟也十分重要。(歡迎參考咱們系列文章裏的《OCR 數據處理》


接下來咱們還會爲你們繼續介紹深度學習 OCR 的相關細節,敬請期待!


參考書籍/文章:

1.綜述部分:

《深度實踐OCR——基於深度學習的文字識別》,劉樹春,賀盼,馬建奇,王佳軍等著

https://zhuanlan.zhihu.com/p/52335619


2.CTPN:

https://arxiv.org/pdf/1609.03605.pdf(論文原文:Detecting Text in Natural Image with Connectionist Text Proposal Network)

https://my.oschina.net/u/876354/blog/3047851

https://zhuanlan.zhihu.com/p/34757009

https://www.jianshu.com/p/109231be4a24


3.PixelLink

https://arxiv.org/pdf/1801.01315.pdf(論文原文:PixelLink: Detecting Scene Text via Instance Segmentation)

https://my.oschina.net/u/876354/blog/3056318

https://zhuanlan.zhihu.com/p/38171172

https://blog.csdn.net/qq_14845119/article/details/80953555


4.CRNN

https://arxiv.org/pdf/1507.05717v1.pdf(論文原文:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition)

https://zhuanlan.zhihu.com/p/43534801

https://blog.csdn.net/imPlock/article/details/93143874


  


猜你喜歡  

Vue3 組合式 API:更靈活的組合組件邏輯
經過雙叉十字模型判斷股票買入點位 | 金融科技之量化策略研究課題報告(上)
基於時間序列 ARIMA 模型預測股票收盤價 | 金融科技之量化策略研究課題報告(下)
一個輸入框你要作一週?



以爲不錯,點個在看

本文分享自微信公衆號 - 金科優源匯(jkyyh2020)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索