王 巍,周慶華
(長(zhǎng)沙理工大學(xué) 物理與電子科學(xué)學(xué)院,長(zhǎng)沙 410004)
小學(xué)四則混合運(yùn)算題一般由加、減、乘、除、括號(hào)和數(shù)字組成,數(shù)字又包含印刷體和手寫(xiě)體兩種類型。從廣義上來(lái)講,用機(jī)器視覺(jué)方法對(duì)這種基礎(chǔ)算式的檢測(cè)與識(shí)別,屬于光學(xué)字符識(shí)別(Optical Character Recognition,OCR)。傳統(tǒng)OCR 技術(shù)主要分為文字區(qū)域定位、行列分割、分類器識(shí)別等幾個(gè)步驟,其中文字區(qū)域定位、行列分割在本質(zhì)上就是文本檢測(cè)與定位。研究可知,文字區(qū)域定位是對(duì)文字顏色、亮度、邊緣等信息進(jìn)行聚類,進(jìn)而分離出文字區(qū)域與非文字區(qū)域。一般情況下多是采用投影法[1]進(jìn)行行列分割,行列分割的目的是提取出單字,主要方法是利用文字在行列間存在間隙的特征,由此來(lái)找出行列分割點(diǎn)。在背景單一、數(shù)據(jù)簡(jiǎn)單、容易分割的情況下,比如車牌識(shí)別[2-3]和身份證識(shí)別[4-5]等,傳統(tǒng)OCR 方法一般都能達(dá)到較好的效果。然而,在自然場(chǎng)景中的圖像文本檢測(cè)[6]時(shí),往往存在背景復(fù)雜、有噪聲干擾、字符之間有粘連/重疊等情況。具體來(lái)說(shuō),本文研究的算術(shù)題題卡一般是由家長(zhǎng)自行打印,打印紙中會(huì)有背景圖案干擾,手寫(xiě)答案也會(huì)有粘連/重疊的情況,使得傳統(tǒng)OCR 方法的區(qū)域定位和行列分割準(zhǔn)確度大打折扣。在此背景下,近年來(lái)提出的深度學(xué)習(xí)[7]OCR 技術(shù)就表現(xiàn)出明顯優(yōu)勢(shì)。
與傳統(tǒng)OCR 方法相比而言,深度學(xué)習(xí)OCR 算法無(wú)需進(jìn)行文字的單字分割,可以直接對(duì)整行文字進(jìn)行識(shí)別[8]。因此,在深度學(xué)習(xí)的OCR 技術(shù)中,使用合適的目標(biāo)檢測(cè)算法對(duì)文本進(jìn)行檢測(cè)與定位是至關(guān)重要的一個(gè)環(huán)節(jié)。Ren 等人[9]在2017 年提出了Faster R-CNN,被證實(shí)是一種較高效的目標(biāo)檢測(cè)算法。由于Faster R-CNN 的檢測(cè)對(duì)象只是PASCAL VOC 2007 數(shù)據(jù)集上的20 類目標(biāo),故對(duì)其它特定目標(biāo)的檢測(cè)效果并不理想。因此,后期又相繼提出了基于Faster R-CNN 的改進(jìn)算法[10~13]。馮小雨等人[14]對(duì)Faster R-CNN 算法進(jìn)行改進(jìn),將其專門(mén)用來(lái)檢測(cè)空中目標(biāo)。黃繼鵬等人[15]提出面向小目標(biāo)的多尺度Faster R-CNN 檢測(cè)算法,提高了Faster RCNN 在小目標(biāo)檢測(cè)任務(wù)上的平均精度。王憲保等人[16]提出了一種分裂機(jī)制的改進(jìn)Faster R-CNN 算法,獲得了比原始Faster R-CNN 更好的檢測(cè)效果。黃寧霞等人[17]增加基礎(chǔ)網(wǎng)絡(luò)的深度,采用雙線性插值和soft-NMS[18]等方法改進(jìn)Faster R-CNN,在不同場(chǎng)景的人行道障礙物檢測(cè)中獲得了不錯(cuò)的魯棒性。
然而,本文處理的基礎(chǔ)算式具有長(zhǎng)短不一、手寫(xiě)數(shù)字隨機(jī)、定位要求高等特點(diǎn),上述改進(jìn)算法不適用于算式的檢測(cè)與定位??紤]到基礎(chǔ)算式的上述特點(diǎn),本文提出了一種基于聚類的快速區(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 次量化帶來(lái)的影響,提高了檢測(cè)精度。實(shí)驗(yàn)表明,在基礎(chǔ)算式檢測(cè)定位中,本文提出的CF R-CNN 有更好的性能。
為了完成用于基礎(chǔ)算式檢測(cè)定位的CF R-CNN網(wǎng)絡(luò)的訓(xùn)練,研究制作了一個(gè)包含每個(gè)算式定位框信息的題卡數(shù)據(jù)集??紤]到教師和家長(zhǎng)制作題卡并進(jìn)行識(shí)別的常見(jiàn)場(chǎng)景,每頁(yè)題卡采用每行2 個(gè)算式、每頁(yè)25 行、A4 紙打印的形式。研究中以隨機(jī)的方式生成了500 頁(yè)的口算題,數(shù)據(jù)集的一個(gè)樣本頁(yè)如圖1 所示,每個(gè)算式由2~3 個(gè)整數(shù)或小數(shù)的四則混合運(yùn)算組成,部分含有括號(hào)、鉛筆書(shū)寫(xiě)答案,用手機(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ò)組成。對(duì)此擬做闡釋分述如下。
圖2 CF R-CNN 網(wǎng)絡(luò)結(jié)構(gòu)框架圖Fig. 2 Frame of CF R-CNN
圖片輸入進(jìn)來(lái),先歸一化到800×600 像素,接下來(lái)是選取VGG16 的前面部分層的基本結(jié)構(gòu)作為特征提取網(wǎng)絡(luò),具體見(jiàn)圖2。由圖2 看到,主要由13個(gè)卷積層(Conv Layer)、13 個(gè)激勵(lì)層、4 個(gè)池化層(Pooling Layer)組成,卷積層全部采用3×3 大小的卷積核,步長(zhǎng)為1(stride =1),填充1 圈0(pad =1);所有激勵(lì)層采用修正線性單元函數(shù)(the rectified linear unit,Relu);所有池化層采用最大池化(Max Pooling),2×2 大小的池化核,步長(zhǎng)為2(stride =2),不填充(pad =0)。經(jīng)過(guò)一次池化層尺寸會(huì)變?yōu)樵瓉?lái)的一半,因此最終得到的特征圖(feature map)尺寸變?yōu)樵瓐D的1/16。
為了減少參數(shù)數(shù)量,節(jié)省訓(xùn)練時(shí)間,改進(jìn)的區(qū)域建議網(wǎng)絡(luò)(Region Proposal Network,RPN)與分類回歸網(wǎng)絡(luò)共享特征提取網(wǎng)絡(luò),在特征圖上做3×3 的滑動(dòng)窗口,把每個(gè)滑動(dòng)窗口的中心映射到原圖,生成k種不同的錨框來(lái)得到期望的目標(biāo)建議框,原始Faster R-CNN 采用k =9 種錨框,如圖3(a)所示,這9 個(gè)錨框由3 種長(zhǎng)寬比[1 ∶2,1 ∶1,2 ∶1],3 種尺寸[1282,2562,5122]組成,錨框長(zhǎng)寬比和尺寸均不能適用于本文的算式檢測(cè)與定位。為了找到適合算式檢測(cè)定位的錨框,本文采用K-means 聚類算法,在第3 節(jié)實(shí)驗(yàn)與分析得出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]去除重疊的框。對(duì)剩下的錨框分2 條路線處理。線路一負(fù)責(zé)判斷是否為目標(biāo)對(duì)象,線路二負(fù)責(zé)計(jì)算目標(biāo)對(duì)象的錨框(anchor boxes)與真實(shí)框(ground truth)在原圖中的偏移量,最終得到區(qū)域建議框(region proposal)。
原始 Faster R -CNN 在 RPN 后使用 ROI Pooling,用來(lái)接收 RPN 輸出的區(qū)域建議框(proposal)和原始特征圖(feature map)。該過(guò)程可詳見(jiàn)圖4 中的虛線流程,假如原圖(image)為800×800 大小的正方形,目標(biāo)建議框?yàn)?65×665 大小的正方形。第一步,特征提取下采樣16 倍,得到邊長(zhǎng)為[800/16]=50 的正方形特征圖(其中,[·]表示向下取整),同時(shí),建議框(proposals)映射到特征圖(feature map),邊長(zhǎng)大小變成[665/16] =41。第二步,把尺寸池化到統(tǒng)一大小7×7,進(jìn)入分類回歸網(wǎng)絡(luò)的全連接層,每塊的邊長(zhǎng)為41/7 =5.86,是浮點(diǎn)數(shù),做取整操作,?。?1/7]=5。
圖4 ROI Pooling 和ROI AlignFig. 4 ROI Pooling and ROI Align
以上2 步都存在取整操作,此后映射回原圖時(shí)會(huì)帶來(lái)坐標(biāo)的偏差,使得最終的檢測(cè)框出現(xiàn)偏差,導(dǎo)致定位不準(zhǔn)確,為了解決定位偏差的問(wèn)題,研究采用ROI Align 替代ROI Pooling。ROI Align 不采用取整操作,而是直接利用浮點(diǎn)數(shù)來(lái)進(jìn)行操作。該過(guò)可詳見(jiàn)圖4 中的實(shí)線流程。在第一步中,特征圖(feature map)中的建議框(proposals)邊長(zhǎng)為665/16 =41.56;在第二步中,池化到7×7 大小時(shí),每塊的邊長(zhǎng)為41.56/7 =5.94。ROI Align 有效避免了取整帶來(lái)的量化誤差,使得映射回原圖的定位框更精確。
ROI Align 得到的7×7 建議框特征圖(proposal feature maps)進(jìn)入分類回歸網(wǎng)絡(luò)的全連接層,后分2路同時(shí)進(jìn)行。一路進(jìn)行框坐標(biāo)值的回歸,得到更精確的目標(biāo)檢測(cè)框;另一路利用softmax函數(shù)進(jìn)行計(jì)算,判斷出目標(biāo)的種類。
本次研究采用圖2 中的基本網(wǎng)絡(luò)框架,通過(guò)聚類方法得出nw種寬度值和nr種高寬比,把單個(gè)錨點(diǎn)的錨框數(shù)目記為k(k =nw ×nr),不同的nw,nr值決定了不同的k值。通過(guò)實(shí)驗(yàn)得到網(wǎng)絡(luò)在不同k值下的性能,取綜合性能最佳者作為CF R -CNN 網(wǎng)絡(luò),并將其與原始的Faster R -CNN 進(jìn)行對(duì)比驗(yàn)證。實(shí)驗(yàn)中,把數(shù)據(jù)集分為訓(xùn)練驗(yàn)證集和測(cè)試集,分別占比80%和20%,訓(xùn)練50 輪:前40 輪學(xué)習(xí)率為0.001,后10 輪學(xué)習(xí)率衰減為0.000 1。
實(shí)驗(yàn)均在Ubuntu18.04 LTS 操作系統(tǒng)下進(jìn)行,電腦的中央處理器為Intel(R)Core(TM)i7-10870H,運(yùn)行內(nèi)存16 GB,一塊NVIDIA GeForce RTX 2060顯卡,使用CUDA 10.0 并行計(jì)算架構(gòu),cuDNN7.4 深度神經(jīng)網(wǎng)絡(luò)GPU 加速庫(kù)以及TensorFlow1.13 深度學(xué)習(xí)框架,所用的編程語(yǔ)言為Python。
考慮到特征提取網(wǎng)絡(luò)的16 倍下采樣,對(duì)25 000個(gè)算式的寬度值除以16,作為新的寬度值,對(duì)其進(jìn)行聚類分析,得出寬度值分布在4~7 之間(一共4個(gè)整數(shù)值:4,5,6,7)??紤]到取1~2 種寬度值,數(shù)目過(guò)少,因此,僅選取nw =3 和4 兩個(gè)值。取nw =3時(shí),寬度值為4.5、5.7、6.7,選取5、6、7 這3 個(gè)值;取nw =4 時(shí),寬度值為4.3、5.3、6.0、7.0,選取4、5、6、7這4 個(gè)值。接著對(duì)高寬比進(jìn)行聚類分析,高寬比的值分布在0.2~0.4 之間。分別按3~6 類進(jìn)行聚類,得出數(shù)據(jù)見(jiàn)表1。選取表1 中的幾種nw ×nr的組合做對(duì)比測(cè)試,得出訓(xùn)練時(shí)間及AP值。綜合考慮選擇k =nw ×nr =4×4 的組合作為CF R-CNN 網(wǎng)絡(luò)參數(shù)。
表1 不同k 值組合的參數(shù)及性能對(duì)比Tab.1 Performance comparison of different k-value combinations
實(shí)驗(yàn)得出Faster R-CNN 的訓(xùn)練時(shí)間和AP值,并與CF R-CNN 進(jìn)行對(duì)比,對(duì)比結(jié)果見(jiàn)表2。圖5為二者的損失曲線。由圖5 可以看出,CF R-CNN的訓(xùn)練時(shí)間更短,收斂更迅速,準(zhǔn)確度更高。對(duì)CF R-CNN 與Faster R-CNN 進(jìn)行對(duì)比測(cè)試,測(cè)試結(jié)果如圖6 所示。圖6 中,圖6(a)是部分的實(shí)驗(yàn)結(jié)果,圖6(b)是基于同樣的圖片,運(yùn)用Faster R-CNN 得到的實(shí)驗(yàn)結(jié)果。
圖5 CF R-CNN 與Faster R-CNN 損失曲線Fig. 5 Loss curve of CF R-CNN and Faster R-CNN
表2 不同組合的訓(xùn)練時(shí)間和AP 值Tab.2 Training time and AP values for different combinations
從圖6 對(duì)比可以看出,CF R-CNN 的檢測(cè)效果更好,把所有的基礎(chǔ)算式都定位出來(lái),而Faster RCNN 每張圖都存在沒(méi)有檢測(cè)出來(lái)的算式(算式35和算式48)。主要原因是Faster R-CNN 的錨框與基礎(chǔ)算式匹配度太低,而CF R-CNN 選用了更準(zhǔn)確的錨框尺寸和比例,使得檢測(cè)效果得到提升。
在定位準(zhǔn)確度方面,從圖6(b)可以看出,算式37 中手寫(xiě)數(shù)字9 的上部落在了定位框外;圖6(b)的算式49,最后一個(gè)數(shù)字2 全部都處于定位框之外。這些定位的不準(zhǔn)確都會(huì)帶來(lái)后續(xù)的識(shí)別偏差,從而造成最終批改系統(tǒng)的錯(cuò)誤判別。分析主要原因應(yīng)為ROI Pooling 的2 次量化造成偏差,使得定位框不夠準(zhǔn)確,而用ROI Align 替換ROI Pooling 后,消除了這部分偏差,這樣一來(lái)定位就會(huì)更加準(zhǔn)確。
圖6 測(cè)試結(jié)果對(duì)比圖Fig. 6 Comparison chart of test results
為了提高基礎(chǔ)算術(shù)題檢測(cè)與定位的準(zhǔn)確度,研究提出了基于改進(jìn)Faster R-CNN 的CF R-CNN 方法。由于傳統(tǒng)的Faster R-CNN 中RPN 的3×3、共9種錨框,與基礎(chǔ)算式匹配度不高,不再適用于基礎(chǔ)算式檢測(cè)定位。通過(guò)創(chuàng)建數(shù)據(jù)集,并對(duì)基礎(chǔ)算式的尺寸和比例進(jìn)行聚類分析,得出多種初始組合,進(jìn)行實(shí)驗(yàn)對(duì)比分析,最終選擇效果最佳的4×4 的16 種組合。用ROI Align 替換ROI Pooling,有效避免了ROI Pooling 兩次量化帶來(lái)的偏差。在500 張基礎(chǔ)算式的圖片數(shù)據(jù)集上進(jìn)行訓(xùn)練測(cè)試,相比于傳統(tǒng)的Faster R-CNN,CF R-CNN 的收斂速度更快、損失更小、定位更準(zhǔn)確,為后續(xù)的基礎(chǔ)算式識(shí)別和自動(dòng)批改提供保障。