端到端的票據類版面分析演算法(一)

2021-10-10 06:05:41 字數 1147 閱讀 5030

結語當前ocr之後的版面分析工作大家都是規則寫的,自己也深受規則之苦,看到ocr輸出的一大堆文字和座標就頭皮發麻。最近受了chineseocr作者模板引擎的啟發,做了兩個端到端的版面分析演算法,希望能夠幫到各位ocrer。github

最開始的想法是在檢測網路上增加類別判斷,**位置的同時加上box類別的判斷,但是這樣通用性就大大降低了,違背不干預原始的ocr演算法的初衷,版面分析的演算法應該和ocr演算法無縫銜接,所以模型輸入應該是ocr輸出的box座標和相應文字。

基於此,延伸出兩個思路,乙個是忽略box間的位置關係,直接將box座標和文字編碼,送入分類器,即基於xgboost的分類方案。另乙個考慮box間的相互關係,將版面分析當成一種翻譯任務,即基於seq2seq的翻譯方案

其次標註資料不能太多,如果標註投入過大就有些得不償失了,演算法設計初衷就是希望只標註一些具有代表性的版面,因此增廣策略就顯得特別重要。增廣策略有以下幾條:

模型輸出

每個格仔按照業務需求進行類別劃分,將解析問題轉化為分類問題。需要注意的是總的類別數需要加1,比如:本次任務一共有18個關鍵字段,本來是乙個18類別的分類問題,但是還需要加上乙個無效類別(即干擾項),一共19個類別。

模型選擇

既然是分類問題,可選的方案就很多,線性回歸、隨機森林、svm等,這裡只嘗試了xgboost,大家可以在自己的業務場景多多嘗試。鑑於傳統機器學習**過於簡單,sklearn幾行就可以搞定,這裡就不提供開源**了。

剛開始想既然考慮格仔的位置關係,那不是用圖更合適,最近也有人開源了pick,正要去嘗試,作者撤銷了**,而且工業中基於圖的演算法應用不多。後來靈機一動,lstm不也是一種圖麼,只不過是線性圖,要做的就是把box拉伸排序成線性,不就可以解決了麼, 自然而然的想到了seq2seq,絕配!

模型輸出

seq2seq模型修改

兩種方案目前在發票的版面分析中都取得了不錯的結果,其中xgboost的方案在版式比較固定的時候表現比較適用,seq2seq的方案在任意拍照場景中比較適用。需要注意的是,如果文字檢測把一些無關的文字和關鍵字段框到一起的話,還需要稍微做些後處理。

D演算法 指定端到其他端的最短路徑演算法

資料結構與演算法 d演算法 指定端到其他端的最短路徑演算法 d演算法對有向圖也適用 也可適用於端點有權的情況 d演算法不適用於邊的權有正有負的情況 2020 12 17 written by hl include using namespace std define max vertex num 1...

乙個packet的端到端傳送過程

編譯linux核心 單獨編譯乙個子模組,如usb make modules subdirs linux source drivers usb make modules install subdirs linux source drivers usb 安裝 make modules install,不...

端到端神經網路的跳一跳玩法

這個專案使用的是 pytorch 這個深度學習張量庫,首先安裝一下,在 mac 下 pytorch 的安裝非常簡單 pip3 install pip3 install torchvision 複製 其他系統的可以去官網看一下安裝命令,要注意的是 python 的版本和是否有 gpu。安卓下需要安裝 ...