王 巍,周慶華
(長沙理工大學(xué) 物理與電子科學(xué)學(xué)院,長沙 410004)
小學(xué)四則混合運算題一般由加、減、乘、除、括號和數(shù)字組成,數(shù)字又包含印刷體和手寫體兩種類型。從廣義上來講,用機(jī)器視覺方法對這種基礎(chǔ)算式的檢測與識別,屬于光學(xué)字符識別(Optical Character Recognition,OCR)。傳統(tǒng)OCR 技術(shù)主要分為文字區(qū)域定位、行列分割、分類器識別等幾個步驟,其中文字區(qū)域定位、行列分割在本質(zhì)上就是文本檢測與定位。研究可知,文字區(qū)域定位是對文字顏色、亮度、邊緣等信息進(jìn)行聚類,進(jìn)而分離出文字區(qū)域與非文字區(qū)域。一般情況下多是采用投影法[1]進(jìn)行行列分割,行列分割的目的是提取出單字,主要方法是利用文字在行列間存在間隙的特征,由此來找出行列分割點。在背景單一、數(shù)據(jù)簡單、容易分割的情況下,比如車牌識別[2-3]和身份證識別[4-5]等,傳統(tǒng)OCR 方法一般都能達(dá)到較好的效果。然而,在自然場景中的圖像文本檢測[6]時,往往存在背景復(fù)雜、有噪聲干擾、字符之間有粘連/重疊等情況。具體來說,本文研究的算術(shù)題題卡一般是由家長自行打印,打印紙中會有背景圖案干擾,手寫答案也會有粘連/重疊的情況,使得傳統(tǒng)OCR 方法的區(qū)域定位和行列分割準(zhǔn)確度大打折扣。在此背景下,近年來提出的深度學(xué)習(xí)[7]OCR 技術(shù)就表現(xiàn)出明顯優(yōu)勢。
與傳統(tǒng)OCR 方法相比而言,深度學(xué)習(xí)OCR 算法無需進(jìn)行文字的單字分割,可以直接對整行文字進(jìn)行識別[8]。因此,在深度學(xué)習(xí)的OCR 技術(shù)中,使用合適的目標(biāo)檢測算法對文本進(jìn)行檢測與定位是至關(guān)重要的一個環(huán)節(jié)。Ren 等人[9]在2017 年提出了Faster R-CNN,被證實是一種較高效的目標(biāo)檢測算法。由于Faster R-CNN 的檢測對象只是PASCAL VOC 2007 數(shù)據(jù)集上的20 類目標(biāo),故對其它特定目標(biāo)的檢測效果并不理想。因此,后期又相繼提出了基于Faster R-CNN 的改進(jìn)算法[10~13]。馮小雨等人[14]對Faster R-CNN 算法進(jìn)行改進(jìn),將其專門用來檢測空中目標(biāo)。黃繼鵬等人[15]提出面向小目標(biāo)的多尺度Faster R-CNN 檢測算法,提高了Faster RCNN 在小目標(biāo)檢測任務(wù)上的平均精度。王憲保等人[16]提出了一種分裂機(jī)制的改進(jìn)Faster R-CNN 算法,獲得了比原始Faster R-CNN 更好的檢測效果。黃寧霞等人[17]增加基礎(chǔ)網(wǎng)絡(luò)的深度,采用雙線性插值和soft-NMS[18]等方法改進(jìn)Faster R-CNN,在不同場景的人行道障礙物檢測中獲得了不錯的魯棒性。
然而,本文處理的基礎(chǔ)算式具有長短不一、手寫數(shù)字隨機(jī)、定位要求高等特點,上述改進(jìn)算法不適用于算式的檢測與定位。考慮到基礎(chǔ)算式的上述特點,本文提出了一種基于聚類的快速區(qū)域卷積網(wǎng)絡(luò)(faster region based convolutional neural network based on clustering,CF R-CNN)算法,CF R-CNN 算法主要有2 方面的改進(jìn):
(1)用K-means 聚類算法[19]得出更適合的anchor 參數(shù),使模型收斂更快。
(2)參考Mask R-CNN[20]的處理方法,把ROI Pooling 改為ROI Align,避免了ROI Pooling 中2 次量化帶來的影響,提高了檢測精度。實驗表明,在基礎(chǔ)算式檢測定位中,本文提出的CF R-CNN 有更好的性能。
為了完成用于基礎(chǔ)算式檢測定位的CF R-CNN網(wǎng)絡(luò)的訓(xùn)練,研究制作了一個包含每個算式定位框信息的題卡數(shù)據(jù)集??紤]到教師和家長制作題卡并進(jìn)行識別的常見場景,每頁題卡采用每行2 個算式、每頁25 行、A4 紙打印的形式。研究中以隨機(jī)的方式生成了500 頁的口算題,數(shù)據(jù)集的一個樣本頁如圖1 所示,每個算式由2~3 個整數(shù)或小數(shù)的四則混合運算組成,部分含有括號、鉛筆書寫答案,用手機(jī)攝像頭拍照。

圖1 數(shù)據(jù)集樣本示例Fig. 1 Sample of the dataset
CF R-CNN 的網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示。選擇Faster R-CNN 作為基礎(chǔ)的網(wǎng)絡(luò)框架,主要由特征提取網(wǎng)絡(luò)、區(qū)域建議網(wǎng)絡(luò)、ROI Align 和分類回歸網(wǎng)絡(luò)組成。對此擬做闡釋分述如下。

圖2 CF R-CNN 網(wǎng)絡(luò)結(jié)構(gòu)框架圖Fig. 2 Frame of CF R-CNN
圖片輸入進(jìn)來,先歸一化到800×600 像素,接下來是選取VGG16 的前面部分層的基本結(jié)構(gòu)作為特征提取網(wǎng)絡(luò),具體見圖2。由圖2 看到,主要由13個卷積層(Conv Layer)、13 個激勵層、4 個池化層(Pooling Layer)組成,卷積層全部采用3×3 大小的卷積核,步長為1(stride =1),填充1 圈0(pad =1);所有激勵層采用修正線性單元函數(shù)(the rectified linear unit,Relu);所有池化層采用最大池化(Max Pooling),2×2 大小的池化核,步長為2(stride =2),不填充(pad =0)。經(jīng)過一次池化層尺寸會變?yōu)樵瓉淼囊话?,因此最終得到的特征圖(feature map)尺寸變?yōu)樵瓐D的1/16。
為了減少參數(shù)數(shù)量,節(jié)省訓(xùn)練時間,改進(jìn)的區(qū)域建議網(wǎng)絡(luò)(Region Proposal Network,RPN)與分類回歸網(wǎng)絡(luò)共享特征提取網(wǎng)絡(luò),在特征圖上做3×3 的滑動窗口,把每個滑動窗口的中心映射到原圖,生成k種不同的錨框來得到期望的目標(biāo)建議框,原始Faster R-CNN 采用k =9 種錨框,如圖3(a)所示,這9 個錨框由3 種長寬比[1 ∶2,1 ∶1,2 ∶1],3 種尺寸[1282,2562,5122]組成,錨框長寬比和尺寸均不能適用于本文的算式檢測與定位。為了找到適合算式檢測定位的錨框,本文采用K-means 聚類算法,在第3 節(jié)實驗與分析得出k =nw × nr =16、共16 種錨框(nw =4 種寬度值[64,80,96,112]和nr =4 種高寬比例[0.20,0.25,0.30,0.36]),如圖3(b)所示。

圖3 錨框Fig. 3 Anchors
生成的錨框(anchor boxes)中有一些是超出圖片邊界的,把這部分錨框去除,利用非極大值抑制(Non-Maximum Suppression,NMS)[21]去除重疊的框。對剩下的錨框分2 條路線處理。線路一負(fù)責(zé)判斷是否為目標(biāo)對象,線路二負(fù)責(zé)計算目標(biāo)對象的錨框(anchor boxes)與真實框(ground truth)在原圖中的偏移量,最終得到區(qū)域建議框(region proposal)。
原始 Faster R -CNN 在 RPN 后使用 ROI Pooling,用來接收 RPN 輸出的區(qū)域建議框(proposal)和原始特征圖(feature map)。該過程可詳見圖4 中的虛線流程,假如原圖(image)為800×800 大小的正方形,目標(biāo)建議框為665×665 大小的正方形。第一步,特征提取下采樣16 倍,得到邊長為[800/16]=50 的正方形特征圖(其中,[·]表示向下取整),同時,建議框(proposals)映射到特征圖(feature map),邊長大小變成[665/16] =41。第二步,把尺寸池化到統(tǒng)一大小7×7,進(jìn)入分類回歸網(wǎng)絡(luò)的全連接層,每塊的邊長為41/7 =5.86,是浮點數(shù),做取整操作,?。?1/7]=5。

圖4 ROI Pooling 和ROI AlignFig. 4 ROI Pooling and ROI Align
以上2 步都存在取整操作,此后映射回原圖時會帶來坐標(biāo)的偏差,使得最終的檢測框出現(xiàn)偏差,導(dǎo)致定位不準(zhǔn)確,為了解決定位偏差的問題,研究采用ROI Align 替代ROI Pooling。ROI Align 不采用取整操作,而是直接利用浮點數(shù)來進(jìn)行操作。該過可詳見圖4 中的實線流程。在第一步中,特征圖(feature map)中的建議框(proposals)邊長為665/16 =41.56;在第二步中,池化到7×7 大小時,每塊的邊長為41.56/7 =5.94。ROI Align 有效避免了取整帶來的量化誤差,使得映射回原圖的定位框更精確。
ROI Align 得到的7×7 建議框特征圖(proposal feature maps)進(jìn)入分類回歸網(wǎng)絡(luò)的全連接層,后分2路同時進(jìn)行。一路進(jìn)行框坐標(biāo)值的回歸,得到更精確的目標(biāo)檢測框;另一路利用softmax函數(shù)進(jìn)行計算,判斷出目標(biāo)的種類。
本次研究采用圖2 中的基本網(wǎng)絡(luò)框架,通過聚類方法得出nw種寬度值和nr種高寬比,把單個錨點的錨框數(shù)目記為k(k =nw ×nr),不同的nw,nr值決定了不同的k值。通過實驗得到網(wǎng)絡(luò)在不同k值下的性能,取綜合性能最佳者作為CF R -CNN 網(wǎng)絡(luò),并將其與原始的Faster R -CNN 進(jìn)行對比驗證。實驗中,把數(shù)據(jù)集分為訓(xùn)練驗證集和測試集,分別占比80%和20%,訓(xùn)練50 輪:前40 輪學(xué)習(xí)率為0.001,后10 輪學(xué)習(xí)率衰減為0.000 1。
實驗均在Ubuntu18.04 LTS 操作系統(tǒng)下進(jìn)行,電腦的中央處理器為Intel(R)Core(TM)i7-10870H,運行內(nèi)存16 GB,一塊NVIDIA GeForce RTX 2060顯卡,使用CUDA 10.0 并行計算架構(gòu),cuDNN7.4 深度神經(jīng)網(wǎng)絡(luò)GPU 加速庫以及TensorFlow1.13 深度學(xué)習(xí)框架,所用的編程語言為Python。
考慮到特征提取網(wǎng)絡(luò)的16 倍下采樣,對25 000個算式的寬度值除以16,作為新的寬度值,對其進(jìn)行聚類分析,得出寬度值分布在4~7 之間(一共4個整數(shù)值:4,5,6,7)。考慮到取1~2 種寬度值,數(shù)目過少,因此,僅選取nw =3 和4 兩個值。取nw =3時,寬度值為4.5、5.7、6.7,選取5、6、7 這3 個值;取nw =4 時,寬度值為4.3、5.3、6.0、7.0,選取4、5、6、7這4 個值。接著對高寬比進(jìn)行聚類分析,高寬比的值分布在0.2~0.4 之間。分別按3~6 類進(jìn)行聚類,得出數(shù)據(jù)見表1。選取表1 中的幾種nw ×nr的組合做對比測試,得出訓(xùn)練時間及AP值。綜合考慮選擇k =nw ×nr =4×4 的組合作為CF R-CNN 網(wǎng)絡(luò)參數(shù)。

表1 不同k 值組合的參數(shù)及性能對比Tab.1 Performance comparison of different k-value combinations
實驗得出Faster R-CNN 的訓(xùn)練時間和AP值,并與CF R-CNN 進(jìn)行對比,對比結(jié)果見表2。圖5為二者的損失曲線。由圖5 可以看出,CF R-CNN的訓(xùn)練時間更短,收斂更迅速,準(zhǔn)確度更高。對CF R-CNN 與Faster R-CNN 進(jìn)行對比測試,測試結(jié)果如圖6 所示。圖6 中,圖6(a)是部分的實驗結(jié)果,圖6(b)是基于同樣的圖片,運用Faster R-CNN 得到的實驗結(jié)果。

圖5 CF R-CNN 與Faster R-CNN 損失曲線Fig. 5 Loss curve of CF R-CNN and Faster R-CNN

表2 不同組合的訓(xùn)練時間和AP 值Tab.2 Training time and AP values for different combinations
從圖6 對比可以看出,CF R-CNN 的檢測效果更好,把所有的基礎(chǔ)算式都定位出來,而Faster RCNN 每張圖都存在沒有檢測出來的算式(算式35和算式48)。主要原因是Faster R-CNN 的錨框與基礎(chǔ)算式匹配度太低,而CF R-CNN 選用了更準(zhǔn)確的錨框尺寸和比例,使得檢測效果得到提升。
在定位準(zhǔn)確度方面,從圖6(b)可以看出,算式37 中手寫數(shù)字9 的上部落在了定位框外;圖6(b)的算式49,最后一個數(shù)字2 全部都處于定位框之外。這些定位的不準(zhǔn)確都會帶來后續(xù)的識別偏差,從而造成最終批改系統(tǒng)的錯誤判別。分析主要原因應(yīng)為ROI Pooling 的2 次量化造成偏差,使得定位框不夠準(zhǔn)確,而用ROI Align 替換ROI Pooling 后,消除了這部分偏差,這樣一來定位就會更加準(zhǔn)確。

圖6 測試結(jié)果對比圖Fig. 6 Comparison chart of test results
為了提高基礎(chǔ)算術(shù)題檢測與定位的準(zhǔn)確度,研究提出了基于改進(jìn)Faster R-CNN 的CF R-CNN 方法。由于傳統(tǒng)的Faster R-CNN 中RPN 的3×3、共9種錨框,與基礎(chǔ)算式匹配度不高,不再適用于基礎(chǔ)算式檢測定位。通過創(chuàng)建數(shù)據(jù)集,并對基礎(chǔ)算式的尺寸和比例進(jìn)行聚類分析,得出多種初始組合,進(jìn)行實驗對比分析,最終選擇效果最佳的4×4 的16 種組合。用ROI Align 替換ROI Pooling,有效避免了ROI Pooling 兩次量化帶來的偏差。在500 張基礎(chǔ)算式的圖片數(shù)據(jù)集上進(jìn)行訓(xùn)練測試,相比于傳統(tǒng)的Faster R-CNN,CF R-CNN 的收斂速度更快、損失更小、定位更準(zhǔn)確,為后續(xù)的基礎(chǔ)算式識別和自動批改提供保障。