端到端的OCR版面分析算法
OCR版面分析痛點
當前OCR以後的版面分析工做你們都是規則寫的,本身也深受規則之苦,看到ocr輸出的一大堆文字和座標就頭皮發麻。最近受了chineseocr做者模板引擎的啓發,作了兩個端到端的版面分析算法,但願可以幫到各位ocrer。github git
算法設計初衷
最開始的想法是在檢測網絡上增長類別判斷,預測位置的同時加上box類別的判斷,可是這樣通用性就大大下降了,違背不干預原始的OCR算法的初衷,版面分析的算法應該和OCR算法無縫銜接,因此模型輸入應該是OCR輸出的box座標和相應文本。
基於此,延伸出兩個思路,一個是忽略box間的位置關係,直接將box座標和文本編碼,送入分類器,即基於xgboost的分類方案。另外一個考慮box間的相互關係,將版面分析當成一種翻譯任務,即基於seq2seq的翻譯方案
github
數據增廣策略
其次標註數據不能太多,若是標註投入過大就有些得不償失了,算法設計初衷就是但願只標註一些具備表明性的版面,所以增廣策略就顯得特別重要。增廣策略有如下幾條:算法
- 隨機擾動檢測框座標點1~3個像素
- 隨機切分檢測框,並隨機拆分文本
- 隨機替換 數字、日期等文本內容
- 隨機丟棄3~5檢測框
兩種端到端的方案
一、基於xgboost的版面分析算法
- 編碼方案
- 1)文本使用doc2vec無監督訓練句向量50dim(可選)
將OCR識別後的文本收集起來加上外部數據能夠利用gensim的doc2vec訓練一個該版面的句向量,也曾嘗試用字向量作加權平均,可是感受上會丟失信息,後續會補上相關實驗。向量爲度選取50dim,這樣每一個box的文本均可以編碼爲50dim的向量。在實驗過程當中,發現基於機器學習的方法比較吃人工特徵,加上句向量後提高大約0.5個點。因此該項是可選項。 - 2)文本的數字比例、英文比例、符號比例、其餘比例4dim
這部分算是特徵工程吧,統計每一個單元格數字佔比、英文佔比、符號佔比、其餘字符佔比一共四個維度信息。還能夠根據自身業務提取更多人工特徵信息 - 3)box座標點8dim
文字檢測輸出的四邊形,一共四個頂點,8個數值 - 4)三個類別信息相拼,一共50+4+8=62維信息,做爲模型輸入
- 1)文本使用doc2vec無監督訓練句向量50dim(可選)
- 模型輸出
- onehot編碼
每一個格子按照業務需求進行類別劃分,將解析問題轉化爲分類問題。好比:發票一共有18個關鍵字段,加上其餘類別,一共19個類別,對這19個類別作onthot編碼做爲模型輸出。
- onehot編碼
- 模型選擇
既然是分類問題,可選的方案就不少,線性迴歸、隨機森林、SVM等,這裏只嘗試了xgboost,你們能夠在本身的業務場景多多嘗試。鑑於傳統機器學習代碼過於簡單,sklearn幾行就能夠搞定,這裏就不提供開源代碼了。
二、基於seq2seq的版面分析算法
剛開始想既然考慮格子的位置關係,那不是得用圖算法麼,最近也有人開源了PICK,正要去嘗試,做者撤銷了代碼,並且工業中基於圖的算法應用很少。後來靈機一動,lstm不也是一種圖麼,只不過是線性圖,要作的就是把box拉伸排序成線性,不就能夠解決了麼, 天然而然的想到了seq2seq,絕配!網絡
- 編碼方案
- 1)文本編碼方案同xgboost,只不過維度增長爲100維
- 2)box座標點由於維度太小,作了維度拉伸,8個座標點暴力複製8遍
- 3)最終每一個格子的編碼爲100+8*8=164維度
- 4)須要注意的是,xgboost是每個格子看成一個訓練樣本模型輸入維度爲1維(62),seq2seq是整版的格子看成一個訓練樣本。在發票場景中,整版格子不超過100,因此選取100爲最長輸入序列,一個樣本的維度爲2維(100*164)
- 模型輸出
- onehot編碼同xgboost
- seq2seq模型修改
- 1)不用teacher forcing的訓練方式
最開始嘗試的時候,一直使用基於teacher forcing的訓練方式,這但是seq2seq的標配,試的過程一直不收斂,一直覺得是數據量小的問題。後來抱着試試的想法,把teacher forcing幹掉了,索性把上一個格子的類別替換成當前格子編碼,損失降低嗖嗖的。想一想也是,翻譯的時候前一個字對後一個字影響很大,這個場景中依賴就沒那麼大了,對類別判斷影響比較大的是位置信息和文字信息,歪打正着。 - 2)去除起始符和終止符
在翻譯的場景由於不知道第一個字如何開始,因此加入了起始符號,可是版面分析中是能夠提供原始信息的,所以刪除了這兩個佔位符。(能夠保留終止符,減小沒必要要計算) - 3) 模型結構示意圖
- 1)不用teacher forcing的訓練方式
結語
兩種方案目前在發票的版面分析中都取得了不錯的結果,其中xgboost的方案在版式比較固定的時候表現比較適用,seq2seq的方案在任意拍照場景中比較適用。須要注意的是,若是文字檢測把一些無關的文字和關鍵字段框到一塊兒的話,還須要稍微作些後處理。機器學習