張寧靜,袁書培,吳海龍
(南華大學計算機學院,衡陽 421000)
關于光學字符識別(optical character recogni?tion,OCR),是指將圖像上的文字轉化為計算機可編輯的文字內容。近年來,OCR檢測與識別因其在諸多領域存在著較大的實際引用,使其逐漸成為計算機視覺領域的重要任務。尤其是在金融領域的應用則更加廣泛,對于上市公司發布的公告、財報、研報等不可編輯的PDF金融文檔,需要做結構化處理并抽取還原,提取關鍵信息供需要的用戶參考。OCR檢測識別技術主要有兩個核心子任務——OCR文字檢測和OCR文字識別。
在深度學習技術得到發展并大力推廣之前,傳統的文字檢測方法通常主要依賴于從輸入圖像中提取手工設計的特征向量。連接組件分析標簽[1-2]和滑動窗口[3]等方法被廣泛用于該任務。目前,隨著深度學習技術的發展,OCR檢測識別技術都得到了顯著的改善。不同于傳統的OCR檢測技術框架[4],現有的OCR檢測模型主要有基于分割的檢測模型和基于回歸的檢測模型的兩大類模型。依賴于深度學習的OCR文字檢測一般用到的模 型 算 法 主 要 有CTPN[5]、RRD[6]、DB[7]、EAST[8]、SegLink[9]、PixelLink[10],等。
傳統的OCR識別過程主要分為兩步:單字切割和分類。而目前基于深度學習的文字識別主要是端到端的文字識別,即不需要顯式進行文字切割,而是將直接文字識別轉化為序列學習問題。現今基于深度學習的端到端OCR技術有兩大主流技術:CRNN OCR[11]和Attention OCR[12]。其主要區別在于翻譯層的不同。這兩大主流技術在其特征學習階段都采用了CNN+RNN的網絡結構,CRNN OCR在對齊時采取的方式是CTC算法,而Attention OCR采取的方式則是Attention機制。
本文以百度PaddlePaddle平臺(以下簡稱飛槳)為對比對象,在飛槳提供的兩款場景文字識別服務(Attention、CRNN-CTC)中均未包含有金融債券文本識別的情景分類,同時使用通用場景識別的模型經過我們實驗,其結果也不讓人滿意。
本文的工作主要有重新搭配算法與模型并訓練出適用于金融債券文本信息場景的模型,使其可以針對金融債券文本信息提供精準的結構化識別;考慮債券的非定性特征,如多印章、數字密集、標點符號的精準識別,以及環境因素,比如非掃描條件、有折痕、有污點等情況下系統的容錯性及適配性。
我們通過對于金融文檔、金融圖表的相關調研,經過對數據集的對比分析與篩選,我們將中文版的金融債券圖表數據集的數據源確定為了中國債券信息網。
針對檢測問題,從金融債券的實際業務場景出發,我們收集了四大種類的債券集(三線、無線、有框、長文本),同時從網上以及手工處理收集了1000余張圖片。將其按照類別進行劃分并進行手工標注,以此來擴充數據集。用以解決神經網絡擬合是數據過少,預測精度不高的問題。

圖1 文本檢測數據擴容
而增對文本識別問題,我們首先使用了YCG09的chinese_ocr數據集,數據集包括100萬的數據集,含漢字、英文字母、數字和標點共5990個字符,同時我們又手工擴充了2萬張的數字標注,以期其在數字分隔符號上取得更好的效果,使用paddle提供的字典ppocr_keys_v1,共計6623個字符。

圖2 文本識別數據擴容
通過對業務場景和數據進行分析研究還發現,在債券文本多印章的場景下,被印章覆蓋住的數據難以準確地識別出來,并且多印章出現的概率也不小。這可能會導致檢測模型在實際業務場景下效果不佳,所以我們以手工合成以及網絡搜索的方式增加了一些印章密集的情況,來對數據集進行增強,這可以很好地提高模型對被覆蓋文本的的檢測效果。

圖3 數據增強-多印章示例
除了使用以上的方式,針對識別模型,我們還使用了PaddleOCR提供的數據增強方式,還使用了顏色空間轉換(cvtColor)、模糊(blur)、抖動(jitter)、噪聲(gasuss noise)、隨機切割(random crop)、透視(perspective)、顏色反轉(reverse)等數據增強手段。在訓練過程中每種擾動方式以50%的概率被選擇。
整體債券圖表數據集我們將其分為4部分,其中第一數據集為預訓練練數據集(約占10%,100張),用于同時初步訓練多個算法模型,然后對比選擇出最適合的算法模型;第二數據集為模型優化訓練數據集(約占60%,600張),用于進行集中訓練并優化模型,最后的成果模型;第三數據集為定量測試數據集(約占25%,250張),用于對模型進行定量測試,檢測模型的訓練效果;第四數據集(約占5%,50張),則用于進行定性多場景測試實驗。測試模型在不同條件下的極端情況。各部分數據集我們又根據債券圖標的類型對其進行了二次劃分,其中包括有框表、三線表、無框表(分別占比4∶3∶3)
除了以上的債券圖表數據集,為了訓練識別模型,我們又引入了100000種文字數據集用于模型對于文字的識別訓練以保證5000種文字的訓練效果。
對于訓練集,我們在進行分類后又借助PPOCRLabel進行了半自動人工標注[13]。

圖4 PPOCRLabel界面
考慮到我們的系統檢測識別目標是中文債券圖標,是針對以簡體中文、數字為主,及少量英文的文字進行檢測識別,且部署在移動端。經過分析,我們初步選取了DB,EAST網絡框架作為預訓練的OCR檢測模型框架和CRNN+CTC模型框架作為預訓練的OCR識別模型框架。借助模型預篩選數據集,我們分別就檢測和識別中同類型的模型進行統一的預訓練,結果表1—表2所示。

表1 OCR檢測模型

表2 OCR識別模型
通過對篩選出了性能較優的模型DB_mv3及CRNN_mv3分別作為檢測和識別模型算法,隨后對他們進行了完整及系統的優化。
本文的債券圖表檢測模型主要以DBNet模型為大體框架,本系統以基于輕量級主干網絡Mo?bileNetV3 Large[14]作為backbone,同時添加目標檢測中常用的特征增強方案FPN[15]結構作為neck,類似于U-Net結構,最后添加了三層卷積作為head。

圖5 DBNet模型結構
2.2.1 使用MobileNetV3 Large作為FPN網絡體系中的卷積神經網絡
我們在backbone部分主要搭建MobileNetV3 Large主體結構代碼,其中需要注意的是,因為后邊需要采用FPN結構,所以相比于原始的網絡結構,這里搭建過程中獲得了四個分支的輸出,用于后續FPN結構。
if model_name=="large":
cfg=[
#k,exp,c,se,nl,s,
[3,16,16,False,′relu′,1],
[3,64,24,False,′relu′,2],
[3,72,24,False,′relu′,1],
#獲得這一層的輸出:c2
[5,72,40,True,′relu′,2],
[5,120,40,True,′relu′,1],
[5,120,40,True,′relu′,1],
#獲得這一層的輸出:c3
[3,240,80,False,′hardswish′,2],
[3,200,80,False,′hardswish′,1],
[3,184,80,False,′hardswish′,1],
[3,184,80,False,′hardswish′,1],
[3,480,112,True,′hardswish′,1],
[3,672,112,True,′hardswish′,1],
#獲得這一層的輸出:c4
[5,672,160,True,′hardswish′,2],
[5,960,160,True,′hardswish′,1],
[5,960,160,True,′hardswish′,1],
#獲得這一層的輸出:c5
]
cls_ch_squeeze=960
具體連接結構如圖6所示。

圖6 MobileNetV3 Large在FPN網絡體系中的應用
2.2.2 用普通卷積替代了可變形卷積(deformable convolution)
在DBNet中的backbone里一般會默認將3×3 conv替換成可變形卷積,以此可以使得卷積操作的位置會在監督信息的指導下進行選擇,可以較好地適應目標的各種尺寸,提供更加豐富的感受野,這對于極端比例的文本檢測效果有益,但是同時也帶來大量復雜的計算量的弊端。而針對我們的檢測目標是文本框,文本框的比例通常較為正常,因此,此處我們選擇保留普通卷積,以減少不必要的計算量。
2.2.3 DBNet算法的特點:可微分二值化處理(differentiable Binarization)
標準二值化處理:
一般使用分割網絡(segmentation network)產生的概率圖(probability map P),將P轉化為一個二值圖P,當像素為1的時候,認定其為有效的文本區域,同時二值處理過程:

但是標準的二值處理是不可微的,這樣分割網絡不可以在訓練過程中優化,故在DBNet算法中采用了可微分二值化:

其中:?是近似二值圖,T是自適應閾值圖,k是膨脹因子。
一般習慣性設置k=50,帶有自適應閾值的可微分二值化不僅有助于把文字區域與背景區分開,而且還能把相近的實例分離開來。
2.2.4 Loss損失函數
損失函數是通過概率圖損失L s-二值圖損失L b-閾值圖L t構成的帶有權重的損失。

其中α和β我們分別設為5和10。
L s使用dire_loss函數和L b使用二值交叉熵損失函數:

其中S l代表正負樣本比例為1∶3的樣本集。
L t為平滑后的L1損失,為了避免樣本不平衡的問題,只計算G d內部的值

2.2.5 在MobileNetV3中利用h-swish代替swish
使用swish當作為ReLU的替代時,它可以顯著提高神經網絡的精度,但是在嵌入式環境中,成本太大,而我們的模型是基于移動端設計的,所以選擇了h-swish。但是由于大量采用h-swish會引入延遲,因此我們網絡前半部分的激活函數仍采用ReLU,后半部分則采用h-swish。
我們系統基于CRNN模型,本系統以基于輕量級主干網絡MobileNetV3 Small[14]作為backbone進行圖像特征序列的提取,同時添加RNN結構作為neck預測每幀的標簽分布,CTCHEAD作為head。

圖7 CRNN+CTC模型結構
在Borisyuk等人[16]提出“Rosetta”新型人工智能系統中,該系統文字檢測和識別的模型也是基于CRNN框架,但是采用了輕量級的backbone,在效率與性能上都有不錯的表現。同時,我們對本系統的預設是建立在輕便簡潔、操作友好的移動端,期望識別算法是精度相對高而相對輕量能在移動端運行。
基于之前檢測模型設計,發現MobileNetV3是一種良好的輕量級主干網絡,MobileNetV3 Small在眾多數據集上雖然識別延遲高于Mobile?NetV3 Large,但是識別精確度要高于Mobile?NetV3 Large,由于對精確度比延遲的需求高,因此我們選擇了MobileNetV3 Small作為backbone。
2.3.1 Map-to-Sequence的實現
我們不能直接把CNN得到的特征圖送入RNN進行訓練的,而是需要進行一些調整,根據特征圖提取RNN需要的特征向量序列。首先從CNN模型產生的特征圖中提取特征向量序列,每一個特征向量在特征圖上按列從左到右生成,每一列包含c維特征,這意味著第i個特征向量是所有的特征圖第i列像素的連接,這些特征向量就構成一個序列,作為循環層的輸入,每個特征向量作為RNN在一個時間步(time step)的輸入。
2.3.2 BiLSTM的狀態更新公式
本文采用的雙層雙向LSTM按時序展開如圖8所示(圖中省略了內部狀態c t,⊕為向量拼接操作)。

圖8 雙層BiLSTM時序展開
狀態更新公式如下:

比較簡單直觀地可以看到t時刻第一層Bi L?STM的第一層(順時間循環層)的隱狀態h(1)t取決于前一時刻的隱狀態h(1)t-1和輸入值x t,但是需要特別注意的是第二層(逆時間循環層)的隱狀態h′(1)t則取決于后一時刻的隱狀態和輸入值x t。
本文模型部署在飛槳的AI Studio上,AI Stu?dio是基于百度深度學習平臺飛槳的人工智能學習與實訓社區,提供在線編程環境、免費GPU算力以及數據模型可視化VisualDL服務。我們還使用Baidu推出的PaddleOCR工具進行優化部署,PaddleOCR工具對該文本檢測訓練數據提供了如隨機旋轉角度(-10°,10°)、隨機裁剪(做透視變換和旋轉)、隨機翻轉的數據增強的方式,每種擾動方式以50%的概率被選擇。
本項目根據收集的數據訓練集,其中包括1000張檢測圖片及1000000張中文文檔數據的識別圖片,經過數據集劃分后進行訓練,訓練結果如下圖所示。

圖9

圖11
同時對于訓練所得的模型,50張檢測圖片和2000張識別圖片。將訓練所得的模型用于測試集上進行驗證,在IoU閾值為0.5的標準下,測試結果如表3—表4所示。

表3 DB_mv3測試結果

表4 CRNN_mv3測試結果
(1)多印章類型文檔。指印章比較多的債券圖標文檔。

圖12 多印章類型文檔的檢測識別結果
(2)過擠壓類型文檔。指存在表格線框擠壓表格內文本文字情況的債券圖標文檔。

圖13 過擠壓類型文檔的檢測結果

圖14 過擠壓類型文檔的識別結果
(3)扭曲類型文檔。指不平整的債券圖標文檔。

圖15 扭曲類型文檔的檢測識別結果
(4)折痕類型文檔。指有折痕印記的債券圖標文檔。

圖16 折痕類型文檔的檢測識別結果
(5)污點類型文檔。指存在污點污跡的債券圖標文檔。


圖17 污點類型文檔的檢測識別結果
本文采用海量的數據集并且進行了半人工化的標注,經過調查研究以及通過訓練的低數據集下的通用模型后,選擇了兼顧精度和效率的模型,文本檢測模型DB_MV3以及CRNN_MV3,并對通用模型進行了優化和改良。在移動端離線部署的情況下,檢測識別精度和效率經過實驗證明也較為穩定。
普通CPU環境即移動端離線情況下,單個大圖片的預測時間平均為2 s左右,而移動端聯網條件下,為了使檢測服務并發進行,我們使用了springcloud部署該項目,構建多個檢測服務后臺,將檢測服務作為微服務集群,然后通過負載均衡使其滿足需求。本項目能在基礎環境下能夠實時運行且能同時滿足多個用戶的檢測服務。目前算法檢測識別時間離線和聯網主要取決于債券圖表的文字密集程度和圖片數據壓縮上傳速度,后續希望可以從這兩個角度進行改進以降低檢測識別所耗費的時間。