字元識別,口算題識別論文小梗概

進擊的煎餅果子發表於2020-11-26

口算題批改,在教育領域是一個比較實際的應用場景,小學生各種練習冊中五花八門的數學口算題,寫好答案之後通過拍照,自動批改,挑出題目中算錯的題,提高作業正確率,大人小孩都需要。在小猿搜題等線上教育app裡功能基本已經比較完備。

口算題識別,說白了也就是特殊場景的字元識別,其中包括印刷體(題幹)和手寫體(作答內容)的混合識別。通過檢測模型把口算題摳出來,然後送入識別模型得到字元,再判斷題目是否作答正確。

市面上常見的兩個技術路線,騰訊使用ANMT,是基於2D attention單行多行統一的口算題識別模型。另一個就是CRNN的各類變種,比如百度PaddleOCR就是基於CRNN,單行字元識別,像口算題的豎式,脫式等多行公式需要檢測模型來拆分和組合。

本文分別簡單介紹下兩篇論文和相關技術路線,快速入門一下:

 

Accurate Structured-Text Spotting for Arithmetical Exercise Correction

騰訊在AAAI2020上發表

 

簡述

Arithmetical Exercise Checker (AEC)算數習題批改 檢測器使用:CenterNet(兩角點+中心點)檢測+ANMT識別+評估邏輯 算數批改三個難點: a新刷體+手寫體混在一起(有印刷體題目部分,有手寫作答部分)

b手寫文字鋸齒狀邊界且各行糾纏

c語義內容可能是算數錯誤(比如手寫題目1+9=11,邏輯語義資訊很難利用上) 口算習題歸納的三個特性: 1,邊界不明確2,算數模式具有區域性相關性3,算數符號全域性無關性

 

模型部分

ANMT識別模型,是基於sequence2sequence的encoder,decoder模型,是NMT模型的升級版。NMT原本是用在神經網路的翻譯模組

允許水平,垂直兩個方向的attention,所以能處理多行識別

傳統NMT,從WHC的map上的embedding是W個xi的一維向量,每個向量CxH維度,因而無法表示有結構的公式,只能是單行公式識別。

解碼時我們採用單向LSTM,常見的雙向LSTM為了更多提取字元之間邏輯資訊,比如215中間的1就能識別成數字1而不是字母l,但是口算題語義本來就不一定準,所以用單向LSTM

對了,檢測公式時,作者發現,x方向公式容易被截斷,xy兩個方向權重不一樣,所以在loss中對x有加強,α=2權重改善x方向別被截斷

數學公式特徵一,符號全域性無關,算術符號去耦合:

1+1=3,使得上下文對解碼器價值降低,我們使用上下文門讓解碼器將更多的精力放在源上下文上,也就是視覺特徵的嵌入。a hidden state因而佔比很大,而不是上一個狀態權重很大

數學公式特徵二,模式區域性相關,與算術模式耦合:

比如\n後常跟著=符號。使用MD-LSTM編碼,對兩個軸潛入的特徵進行編碼,並生成相同大小的變換嵌入。此外,可訓練的初始隱藏狀態作為垂直位置嵌入插入到每行的開始位置,用於捕獲垂直方向上的順序資訊。

我們的方法如上圖,比一般的attention更路棒,如第5列,我們的方法中強制對*進行視覺嵌入防止識別錯成1。

如第6列,方法有助於改善隱藏狀態,能忽略進位符噪聲7

除了識別分支,我們還利用候選物件來提高識別能力。通過輕微變換,小角度旋轉,隨即擴大,縮小,生成多個樣本,選擇輸出相同的大多數輸出。

我們還搞了一個資料集。AEC-5K 包含40種小學練習題,5000訓練,300測試,平均解析度1152*768,每張圖平均8.7個公式,標註:

外輪廓(單行,多行)

字元文字註釋,120種字元

借鑑(Deng et al.2017)合成了600k手寫體資料

 

消融實驗:

由於符號全域性無關,我們使用來2個模組:a,上下文門,(可高0.75個點)b,算術注意力機制。(比預設的注意力機制高1.4個點)

輸入影像變換為三倍(輕微旋轉,解析度變化調整大小或填充),輸出都一樣自然是好,輸出有不一樣則取相同數量多的結果,這樣精度提高2個點。而且由於是並行操作,最後inference時間並沒有延長

 

 

An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition

arXiv:1507.05717v1,即CRNN

在2015年開創了識別序列模型的先河,奠基地位等同於檢測領域的R-CNN系列

比較好的解決如何將影像轉化為字串序列問題

論文創新在於:

把序列建模和轉錄整合到統一框架中 相較之前所有模型四個不同的特性: 1與大多數現有的元件需要單獨訓練和協調的演算法相比,它是端對端訓練的。 2它自然地處理任意長度的序列,不涉及字元分割或水平尺度歸一化。 3它不僅限於任何預定義的詞彙,可以無詞典的識別 4模型小,且有效 在包括IIIT-5K,Street View Text和ICDAR資料集都做了大量實驗

 

簡述:

使用深度神經網路DCNN,作用在識別領域時,難以解決長度很大變化的任務。之前的老方法有的先檢測單個字元,也有的使用單詞的字典做分類。(詞典是包含幾萬個單詞及單詞變化的大詞典)

遞迴神經網路RNN優點之一是在訓練和測試中不需要序列目標影像中每個元素的位置。但是,將輸入目標影像轉換成影像特徵序列的預處理步驟通常是必需的。以前用的HOG等傳統特徵比較獨立肯定不好。換成RNN效果好了太多

小眾方法比如潛入到公共向量子空間,轉換為檢索問題。

設計的網路CRNN,雖然由不同型別的網路架構(如CNN和RNN)組成,但可以通過一個損失函式進行聯合訓練。

CRNN網路結構

本文是DCNN和RNN組合,優點:

1從序列學習,不需要字元級標註(CRNN網路結構中示例圖片的標註資訊就是字串“STATE”)

2使用CNN提取特徵,無須傳統方法預處理

3與RNN相同的性質,能產生一系列標籤

4序列物件長度不限制,只需影像的高度歸一化(影像可變長,標籤也可變長)

5 準確率更高

6 比DCNN引數更少,佔記憶體更小

模型第一個部分,卷積層

CNN與RNN的結合,簡單直白的來說就是:通過conv,pooling把輸入的圖片提取得到的特徵圖變成高度為1,深度可設定為某個N(經典選擇是N=256,512等),這樣每個畫素就可以有較大的感受野,同時帶有原圖中該列的畫素資訊,一共有T個這樣的向量,可以作為RNN的T個輸入。相較傳統CNN,後者一般長寬兩個方向同等看待,pool,conv尺寸一般對稱,作為字元圖片xy兩個方向明顯不一樣,因而pooling除了對稱的(2,2),也會有一些(2,1)來照顧高度比較小的輸入圖片的特徵

a是LSTM的一個單元 ,b是雙向LSTM

模型第二個部分,RNN層

使用RNN有三個優點

1 RNN具有很強的捕獲序列內上下文資訊的能力。對於基於影像的序列識別使用上下文提示比獨立處理每個符號更穩定且更有幫助。一些模糊的字元在觀察其上下文時更容易區分,例如,通過對比字元高度更容易識別“il”而不是分別識別它們中的每一個。

2 其次,RNN可以將誤差差值反向傳播到其輸入,即卷積層,從而允許我們在統一的網路中共同訓練迴圈層和卷積層。

3 RNN能夠從頭到尾對任意長度的序列進行操作。

長度較長時RNN會有梯度消失的問題,LSTM由於是一種帶遺忘門的RNN,對較長序列建模較好,所以被採用。LSTM是定向的,它只使用過去的上下文,不是用後面的資訊。

可以堆疊多個雙向LSTM,得到如圖b所示的雙向LSTM。深層結構允許比淺層抽象更高層次的抽象,並且在語音識別任務中取得了顯著的效能改進。

模型第三個部分,轉錄層

使用基於條件概率的CTC層來進行最後一步的轉錄,Connectionist Temporal Classification (CTC) layer(另大個主流路線是使用attention模型來轉錄)

聯接時間分類CTC , 輸入T個序列,是CNN的T個輸出

概率值指的是每幀預測得到的向量y=y1,...yT的情況下預測得到字元標籤I的概率,(忽略I中每個字元的具體畫素位置)

我們使用負的log似然函式來訓練網路

輸入y=y1,...yT一共T個序列長度

每個yt長度為labels的字符集的長度(識別數字則是0-9的10,識別字母則a-z的26)還包括blank空字元(以及開頭、結尾字元)

y_π^t是t時刻預測出π_t的概率

p(π|y) = y_π^t的T個連乘的概率

L包括所有字符集標籤以及-代表的空白分隔符

如公式1, 條件概率被定義為:所有序列被對映為I的概率之和

對映B 是把預測出的“--hh-e-l-ll-oo--” 對映為 “hello”(空字元-中間相同的合併,然後去掉-)

就此,l∗ ≈ B(arg maxπ p(π|y)),使用貪婪演算法,每次取最高置信度預測出的label πt,組合成I*

得到置信度最高的預測出的字串l∗,因而這個過程不需要預先的龐大字典,比較靈活

CTC更多細節需要看CTC這篇論文A. Graves, S. Fern´andez, F. J. Gomez, and J. Schmidhu- ber. Connectionist temporal classification: labelling unseg- mented sequence data with recurrent neural networks. In ICML, 2006. 4, 5

本模型訓練時,使用ADADELTA自動計算學習率,收斂速度也快些。

X是訓練集,正常I是輸入圖片, 斜體I是 label-ground truth (字串),損失函式為O

 

訓練時使用SGD,特殊的是,RNN中使用反向傳播時間BPTT來訓練,CTC中使用前向演算法進行反向傳播(這是上文CTC那個論文中的設定)

BN訓練RNN時很有用,加快訓練

K40的GPU上,100*32的圖,50小時收斂,0.16秒每張圖

實驗資料集:800萬訓練影像和單詞

做了一些實驗,CRNN在識別樂譜任務上效果也非常好。

——————————————————

現在(2020年)主流的序列識別模型要麼是基於CTC , 要麼基於attention

其他主要的流程就和CRNN這篇差不多,改改不同的backbone,很多用densenet效果會好些,LSTM部分有雙向LSTM ,也有單向LSTM,也有換成GRU的,差不太多

如果是識別分式、手寫公式、有結構的字元或者序列,一般用基於attention的模型,有各種各樣的attention變種可以選擇

 

 

 

後記

看完這些,希望你已經沒有想看原始碼的衝動了。
如果是這樣的話,不妨點個贊吧。

為何要點贊?

如果本文解決了你的困惑,不妨點個贊鼓勵一下。
不管你信不信,也不管你同不同意,實際上,你的每一次點贊都標誌著你自身的進步。而打賞乃是點讚的高階形式
曾經有無數個點讚的機會,但是我都沒有好好珍惜,假如時光可以倒流,我一定為他們也為自己點贊。

 

 

關注我CSDN和知乎專欄會更新更多相關知識

知乎文章連結

相關文章