武子毅,劉亮亮,張再躍
(1.江蘇科技大學 計算機學院,江蘇 鎮(zhèn)江 212003;2.上海對外經(jīng)貿(mào)大學 統(tǒng)計與信息學院,上海 201620)
目前,卷積神經(jīng)網(wǎng)絡已成為解決復雜視覺識別問題的重要技術和方法,在手寫數(shù)字識別[1]、英文字母識別[2]等方面得到了有效應用。漢字圖像識別是字符識別的重要方面,由于漢字形狀的特殊性,大大增加了漢字圖像識別的難度。
文中概述了目前漢字識別研究的基本情況,分析并探討了卷積神經(jīng)網(wǎng)絡在處理多分類識別問題過程中的功能性質(zhì),以及在具體漢字識別應用中存在的問題。針對相似或相近漢字“微小特征”在深度學習自動特征提取過程中可能被過濾掉而造成識別錯判的問題,借鑒卷積神經(jīng)網(wǎng)絡技術,對AlexNet模型[3]的機構(gòu)進行改造,通過引入注意力層(attention layer)[4],加強對漢字“微小特征”的關注與提取能力,以提高漢字識別的準確率。
傳統(tǒng)語言文字種類識別包括“特征提取”和“特征分類”兩個步驟。分類器是特征分類的主要工具,常用的有K近鄰[5]、支持向量機[6-7]和BP神經(jīng)網(wǎng)絡[8]等。特征提取的方法可劃分為基于統(tǒng)計特征[9]、基于符號匹配[10]和基于紋理特征三大類別[11]?;诮y(tǒng)計特征和基于符號匹配這兩大文種識別算法都需要以準確的文本行劃分和字符分割為前提,因此對圖像噪聲魯棒性較差。基于紋理特征的文種識別將同一類文字圖像看作同一類紋理,這樣就能用紋理分類的方法來解決文種識別問題,其中,小波共生直方圖的方法[12-13]在小波分解的基礎上進行共生直方圖的計算,通過提高特征維數(shù),從而使識別率大大提高。
基于卷積神經(jīng)網(wǎng)絡的識別方法主要研究卷積層、池化層和全連接層對識別結(jié)果的影響。文獻[14]用分段最大池化層(multi-pooling)代替最大池化層(max-pooling),該方法將池化層的濾波器分段,在每一段里動態(tài)地取若干個最大值。這種方法對漢字圖像的局部變化或破損魯棒性較好。文中采用準確率較高的小波共生直方圖方法和分段最大池化層的方法作為評估基準。這兩種方法在傳統(tǒng)方法和卷積神經(jīng)網(wǎng)絡方法中漢字識別效果較好。
為了探索選擇何種模型最適合處理這類漢字圖像數(shù)據(jù)集,選擇了5種卷積神經(jīng)網(wǎng)絡模型,經(jīng)過試驗發(fā)現(xiàn),使用AlexNet網(wǎng)絡模型精確度最高,網(wǎng)絡數(shù)較少,所以文中選擇結(jié)構(gòu)相對簡單的AlexNet處理漢字圖像數(shù)據(jù)集。
識別對象為文字圖像,處理過程包含的參數(shù)有:輸入圖像的像素大小為x1×x2,濾波器的像素大小為f1×f2,卷積移動步幅為s像素,在每一邊添加白邊的像素大小為p,則卷積操作后圖像的像素大小為x1×x2。x1和x2的關系如下:
(1)
例如Conv1,輸入的圖片像素大小x1=227,卷積濾波器的像素大小f=11,卷積移動步幅s=4,每一邊添加白邊的像素大小p=0,這樣經(jīng)過卷積計算后會形成像素大小為55×55的圖片((227-11)/4+1=55)。本層共有96組卷積濾波器,則在本層輸出的是55×55×96大小的圖片。然后使用ReLUs激勵函數(shù)進行映射。最后,經(jīng)過步幅s=2、濾波器大小f=3的最大池化操作后,每一邊添加白邊的像素大小p=0,數(shù)據(jù)大小為27×27×96((55-3)/2+1=27),這樣就完成了Conv1。以此類推,Conv2~Conv5需要注意的是,在Conv2中在數(shù)據(jù)周圍加了p=2像素的白邊,在Conv3~Conv5數(shù)據(jù)周圍加了p=1像素的白邊,以便在池化操作時數(shù)據(jù)大小能夠被整除。
數(shù)據(jù)經(jīng)過5個卷積層后與4 096個節(jié)點進行全連接,再用Tanh激勵函數(shù)進行映射,最后設置將輸出值減半,完成全連接層FC1。FC1和FC2的神經(jīng)元個數(shù)有4 096,F(xiàn)C3的神經(jīng)元個數(shù)為3 755,相當于訓練目標的3 755個漢字類別。
表1和表2分別列出了每層配置的參數(shù)數(shù)據(jù)以及每次計算后的數(shù)據(jù)大小(Data_Size),其中每條數(shù)據(jù)都為三通道,在實際計算中需乘以3。為了便于數(shù)據(jù)顯示,這里采用實際默認形式。表中Num_Filter為卷積濾波器個數(shù),Padding為補充的白邊大小,F(xiàn)ilter_Size為卷積濾波器大小,Stride為濾波器移動的步幅,Activation為激勵函數(shù),Kernel_Size為池化濾波器大小,Kept_Prob為Dropout步驟中輸出值被削減的比例。
表1 Conv1~Conv5配置詳細信息和數(shù)據(jù)大小
表2 FC1~FC3配置詳細信息和數(shù)據(jù)大小
在卷積神經(jīng)網(wǎng)絡中,如果想把注意力放在圖像中的某個部位,那么就可以對目標區(qū)域賦予更高的權(quán)重,達到關注該區(qū)域的目的。圖1(a)為部分形相似漢字以及被圈出的“微小特征”??梢钥吹?,漢字的“微小特征”區(qū)域大多都在漢字的上下左右以及四個斜對角八個區(qū)域。為了提高這些區(qū)域的權(quán)重,可以將漢字圖像與注意力圖(attention map)進行濾波處理。注意力圖如圖1(b)所示,圖中以上下左右和斜對角八個權(quán)值為1的白色中心點向四周擴散,權(quán)值越來越小,直到變?yōu)楹谏瑱?quán)值為0。
圖1 部分形相似漢字的“微小特征”以及注意力圖
圖2 注意力網(wǎng)絡原理
雖然在濾波處理后,關注的區(qū)域得到了加強,但是沒有保留原始區(qū)域,因為原始區(qū)域權(quán)值為0。所以可以將原始圖片正常進行卷積操作后與濾波處理后的圖片相加,這樣既增強了目標區(qū)域,又保留了原始區(qū)域。注意力網(wǎng)絡原理如圖2所示。這里把圖像數(shù)據(jù)x與注意力圖進行濾波得到H(x),然后與通過兩層卷積層計算后的數(shù)據(jù)F(x)直接相加,獲得最終數(shù)據(jù)y(y=F(x)+H(x)),最后再對該數(shù)據(jù)進行后續(xù)的計算。這樣就達到增強數(shù)據(jù)的“微小特征”的目的。
AlexNet網(wǎng)絡由三組卷積神經(jīng)網(wǎng)絡(Group1、Group2和Group3)和兩個4 096節(jié)點的全連接層組成。Group1和Group2都包含了一個卷積層和一個池化層,Group3包含了三個卷積層和一個池化層。Conv1~Conv5是卷積層,Pooling是池化層。FC1~FC3是全連接層。
接下來把注意力層融合到AlexNet中。為了提高模型訓練中對漢字圖像八個區(qū)域的權(quán)重,選擇在Group1和Group2相對深層的兩個位置添加注意力層,將兩個注意力層分別與Conv2和Conv3~Conv5并聯(lián),融合后的網(wǎng)絡結(jié)構(gòu)如圖3所示。
圖3 AlexNet+Attention Layer網(wǎng)絡結(jié)構(gòu)
步驟如下:
(1)輸入一張227×227像素大小的三通道漢字圖片,經(jīng)過Group1計算得到大小為27×27×96的圖像數(shù)據(jù)x1。
(2)將數(shù)據(jù)x1與注意力圖進行濾波,形成Attention Layer1,得到數(shù)據(jù)H1(x);然后與原本經(jīng)過Conv2計算后的數(shù)據(jù)F1(x)相加得到y(tǒng)1(y1=F1(x)+H1(x));最后通過池化計算得到數(shù)據(jù)x2。
(3)將數(shù)據(jù)x2與注意力圖進行濾波,形成Attention Layer2,得到數(shù)據(jù)H2(x);然后與原本經(jīng)過Conv3~Conv5計算后的數(shù)據(jù)F2(x)相加得到y(tǒng)2(y2=F2(x)+H2(x));最后通過池化計算完成Group3。
(4)將Group3輸出數(shù)據(jù)輸入至全連接層,最后把第一步輸入的圖像分類至某一個漢字類別,完成模型訓練和識別。
文中使用的數(shù)據(jù)集由3 755類漢字圖片組成,每一類漢字有45個樣本,共計168 975個樣本,每個樣本數(shù)據(jù)大小為227×227。在實驗中,使用90%(150 200)的圖像進行訓練,即每一類漢字有40個樣本圖像進行訓練,5個樣本用于測試。
使用Tensorflow[15]庫來實現(xiàn)卷積神經(jīng)網(wǎng)絡模型。文中使用的GPU為一塊NVIDIA GTX970圖形處理器。實驗將批量大小(batch size)設置為64,全部樣本訓練次數(shù)(epoch)設置為30,則迭代次數(shù)總共為79 207次,全程學習率不變,均為0.001。在模型訓練的每一輪迭代中,神經(jīng)網(wǎng)絡層參數(shù)都會更新,這些參數(shù)主要是卷積濾波器的參數(shù)。按照圖3的網(wǎng)絡結(jié)構(gòu)進行訓練,訓練結(jié)束后將模型保存,這樣就可以使用該模型來識別漢字圖像了。
將數(shù)據(jù)集的10%作為測試集,通過比較測試圖像結(jié)果與圖像標簽來計算識別結(jié)果,計算平均識別率。此外,還將測試結(jié)果與評估基準進行比較,結(jié)果如表3所示。
表3 模型對比 %
從表中可以看出,基于卷積神經(jīng)網(wǎng)絡的方法比基于特征的方法效果好10%;基于注意力層的卷積神經(jīng)網(wǎng)絡相比基于分段最大池化層的卷積神經(jīng)網(wǎng)絡保留的有效信息更多;只要迭代次數(shù)足夠多,卷積神經(jīng)網(wǎng)絡對于處理多分類問題的效果還是不錯的。
文中使用AlexNet加上注意力層對3 755類漢字圖片數(shù)據(jù)集進行了實驗。實驗結(jié)果表明:普通的卷積神經(jīng)網(wǎng)絡會丟失漢字“微小特征”,注意力層可以有效彌補這一點;卷積神經(jīng)網(wǎng)絡可以處理多分類問題,但是會增加訓練難度。文中的研究可以為后續(xù)的在線識別漢字圖像模型提供參考。