深度學習之OCR相關經驗記錄

2021-10-14 18:46:04 字數 2961 閱讀 5124

q1:基於深度學習的文字檢測方法有哪幾種?各有什麼優缺點?

a:常用的基於深度學習的文字檢測方法一般可以分為基於回歸的、基於分割的兩大類,當然還有一些將兩者進行結合的方法。

(1)基於回歸的方法分為box回歸和畫素值回歸。a. 採用box回歸的方法主要有ctpn、textbox系列和east,這類演算法對規則形狀文字檢測效果較好,但無法準確檢測不規則形狀文字。 b. 畫素值回歸的方法主要有craft和sa-text,這類演算法能夠檢測彎曲文字且對小文字效果優秀但是實時效能不夠。

(2)基於分割的演算法,如psenet、dbnet,psenet、pannet演算法不受文字形狀的限制,對各種形狀的文字都能取得較好的效果,但是往往後處理比較複雜,導致耗時嚴重。針對後處理複雜的問題,dbnet設計了二值化可導閾值融入訓練,從而獲取更準確的邊界,大大降低了後處理的耗時。

q2:行文字識別,ctc和attention哪種更優?

a:(1)attention:適合英文行文字識別(因為英文26個字母,字典有限,模型能夠通過訓練資料能夠挖掘到這些字元之間的關係,相比較於ctc額外加入了先驗知識)、對短語句識別效果不錯,對長句子識別比較差

(2)ctc:適合中文行文字識別(由於常用中文漢字三千字以上,字典較多,attention模型不容易挖掘到字元之間的關係,其模型優勢無法體現。相比較於attention,ctc對長句子識別更好。從訓練和**速度上看,attention的序列解碼結構限制了**速度,而ctc網路結構更高效,**速度更快

q3:彎曲形變的文字識別需要怎麼處理?tps應用場景是什麼,是否好用?

a:(1)在大多數情況下,如果遇到的場景彎曲形變不是太嚴重,檢測4個頂點,然後直接通過仿射變換轉正識別就足夠了。

(2)如果不能滿足需求,可以嘗試使用tps(thin plate spline),即薄板樣條插值。tps是一種插值演算法,經常用於影象變形等,通過少量的控制點就可以驅**像進行變化。一般用在有彎曲形變的文字識別中,當檢測到不規則的/彎曲的(如,使用基於分割的方法檢測演算法)文字區域,往往先使用tps演算法對文字區域矯正成矩形再進行識別,如,star-net、rare等識別演算法中引入了tps模組。 warning:tps看起來美好,在實際應用時經常發現並不夠魯棒,並且會增加耗時,需要謹慎使用。

(3)做過個印章識別專案,大體方案是使用dbnet檢測印章主體區域,再接個輕量級四點定位網路,再跟個tps,再接個crnn,針對普通場景,識別效果還可以。相比較將dbnet檢測主體區域和四點定位放在一起的網路來看,識別效果會好一點,耗時也會多一些。【使用pytorch重寫了opencv的tps,耗時減少了10倍左右,參考:tps改寫】

q4:簡單的對於精度要求不高的ocr任務,資料集需要準備多少張呢?

a:訓練資料的數量和需要解決問題的複雜度有關係。難度越大,精度要求越高,則資料集需求越大,而且一般情況實際中的訓練資料越多效果越好。

(1)對於準確率要求不高的任務,檢測需要至少500張,識別需要保證識別字典中每個字元出現在不同場景的行文字影象數目需要大於200張。

(2)真實資料不足時,可以使用gan或資料增強或資料生成去合成。但也要保證乙個batch內真實與合成資料比例最好不要低於1:3,若真實比例遠低於這個比例,就只能先在合成資料集上先訓練到最優,再在真實資料集上進行finetune。

q5:背景干擾的文字(如印章蓋到落款上,需要識別落款或者印章中的文字),如何識別?

a:(1)在人眼確認可識別的條件下,對於背景有干擾的文字,首先要保證檢測框足夠準確,如果檢測框不準確,需要考慮是否可以通過過濾顏色等方式對影象預處理並且增加更多相關的訓練資料;在識別的部分,注意在訓練資料中加入背景干擾類的擴增影象。

(2)如果mobilenet模型不能滿足需求,可以嘗試resnet系列大模型來獲得更好的效果 。

q6:ocr領域常用的評估指標是什麼?

a:對於兩階段的可以分開來看,分別是檢測和識別階段

(1)檢測階段:常用的檢測方法可以劃分為基於回歸的和基於分割的

(2)識別階段: 常用的識別標準可以分為基於字元水平和基於文字行水平

(3)端到端統計: 端到端召回率:準確檢測並正確識別文字行在全部標註文字行的佔比; 端到端準確率:準確檢測並正確識別文字行在檢測到的文字行數量 的佔比;準確檢測的標準是檢測框與標註框的iou大於某個閾值,正確識別的的檢測框中的文字與標註的文字相同。

q7:單張圖上多語種並存識別(如單張圖印刷體和手寫文字並存),應該如何處理?

a:單張影象中存在多種型別文字的情況很常見,典型的以學生的試卷為代表,一張影象同時存在手寫體和印刷體兩種文字,這類情況下,可以嘗試」1個檢測模型+1個n分類模型+n個識別模型」的解決方案,有兩種思路。

(1)方法1:讓不同型別的文字共用同乙個檢測模型,n分類模型指額外訓練乙個分類器,將檢測到的文字進行分類,如手寫+印刷的情況就是二分類,n種語言就是n分類,在識別的部分,針對每個型別的文字單獨訓練乙個識別模型,如手寫+印刷的場景,就需要訓練乙個手寫體識別模型,乙個印刷體識別模型,如果乙個文字框的分類結果是手寫體,那麼就傳給手寫體識別模型進行識別,其他情況同理。

(2)方法2:拿dbnet舉例,普通檢測任務的dbnet在fpn後**1類mask(pro、thr、bin),通過閾值來卡binary的前景與背景區域。而面對多分類任務(如手寫與印刷兩種類別任務),fpn後**2類mask(一組是手寫,一組是印刷),然後通過分別對2類binary進行處理從而實現檢測與分類。後續再接手寫和印刷兩種識別模型

(3)區別:方法1檢測出區域再分類的方法,使得某個區域的類別之間是互斥的,即某乙個區域只能屬於乙個類別(要不是背景,要不是手寫,要不是印刷)。方法2所檢測出的區域,它可能屬於多個類別,即某乙個區域可能是手寫的,同時也可能是印刷的。兩種方法針對具體場景需要具體使用。

OCR學習記錄

最近對驗證碼識別做了一些研究,主要是ocr方向的,一些總結記錄一下。識別captcha後面跟了很多參考文章都講解的很詳細了,做orc不難,難點在於如何提高識別率。基本流程如下 1.原圖 2.預處理 去噪點 3.標準化 灰度變換,二值化,歸一化 4.image segment 個人感覺這個比較難,有很...

OCR深度學習應用

ocr技術識別文件的概括 我們常說的ocr 文字識別 ocr技術識別文件是指通過電子裝置等將紙質上的文字識別出來,形成可編輯的文字。ocr技術識別文件的流程 常規的ocr文字識別處理的過程包括 3 設定語種 選擇需要什麼ocr語種的引擎程式 4 輸出結果 輸出ocr識別結果為原版原樣的優質檔案 oc...

OCR深度學習應用

ocr技術識別文件的概括 我們常說的ocr 文字識別 ocr技術識別文件是指通過電子裝置等將紙質上的文字識別出來,形成可編輯的文字。ocr技術識別文件的流程 常規的ocr文字識別處理的過程包括 3 設定語種 選擇需要什麼ocr語種的引擎程式 4 輸出結果 輸出ocr識別結果為原版原樣的優質檔案 oc...