丁瓊
(貴州工業(yè)職業(yè)技術(shù)學院 貴州省貴陽市 550008)
水族是我國五十六個民族中擁有自己傳統(tǒng)文字的十七個民族之一,其文字被稱為“水書”。水書與納西族的東巴文一起被譽為象形文字的活化石,然而目前對水書的研究依然還處于手抄翻譯及搶救整理階段,所以完成水書文字的機器識別能夠幫助相關(guān)學者研究水族的社會歷史宗教文化及進一步的研究水書的精髓。
圖像特征提取是指從對象本身獲取各種對于分類有用的度量或?qū)傩?。按特征提取所得的特征向量給每個對象賦予一個類別標記,得到n 類分析樣本,同一類別的樣本具有類似特征。
字符特征提取是文字識別的第一步,通過人工提取待分類圖像特征放入常用分類器(如SVM、決策樹,隨機森林)中進行分類,得出各類的概率值,從而判斷出待分類圖像屬于哪一類。對于字符識別而言,提取的特征包括:區(qū)域特征、灰度特征、灰度值和灰度投影,以水書中的四個字符為例,我們提取出的特征值如表1 所示。
由于水書文字屬于象形文字,為非標準化文字,在所收集的水書樣本中,幾乎都是手寫的水書資料,同一個字不同的人寫出來差別可能很大,這對字符特征提取與分類算法提出了較高的要求。
自九十年代以來,基于反向傳播學習的多層感知器MLP 遭遇了支持向量機的強勁競爭,然而近年來,由于深度學習的廣泛應(yīng)用,MLP 又再次得到了關(guān)注。作為典型的前饋網(wǎng)絡(luò),MLP 信息處理方向為輸入層到各隱層,各隱層再到輸出層,MLP 神經(jīng)網(wǎng)絡(luò)模型如圖1 所示。
隱含層節(jié)點數(shù),隱含層到輸出層的連接權(quán)值和輸出層的閥值是MLP 神經(jīng)網(wǎng)絡(luò)需要確定的參數(shù)。每個神經(jīng)單元和輸入值進行權(quán)重相乘:
相乘的結(jié)果作為隱藏層結(jié)果:
輸出結(jié)果為:
我們嘗試人工提取了水書文字中6 個字符的特征值,在Matlab中實現(xiàn)三層神經(jīng)網(wǎng)絡(luò)對這6 個水書字符的識別。首先分割出這6 個水書字符,即分為6 個類別,由于每個類別只有一個樣本,故而需要樣本的擴充,利用每個類別的第一個樣本,對其進行旋轉(zhuǎn)、平移、腐蝕膨脹效果、高斯噪聲,椒鹽噪聲等等不同操作使得一個樣本生成制定大小和數(shù)量的多個樣本,代碼如圖2 所示。
圖1:MLP 神經(jīng)網(wǎng)絡(luò)模型
圖2:定義擴充字符樣本并生成矩陣x 的函數(shù)picTovec()
圖3:使用picTovec()函數(shù)處理6 個字符樣本
表1:水書字符特征值示例
圖4:訓練結(jié)果
圖5:訓練狀態(tài)
以上將一個圖片變成了sizen*sizen 行nums 列的矩陣x,其中每一列為一幅圖片的按列展開。然后再將六張圖片都用函數(shù)picTovec()生成矩陣,并且將六個矩陣橫向拼接。同時生成對應(yīng)的labels,其每一列采用one-hot 編碼對應(yīng)于圖片的類別,其代碼如圖3所示。
圖6:機器學習與深度學習模型對比
圖7:建立CNN 網(wǎng)絡(luò)
圖8:設(shè)置訓練參數(shù)
圖9:訓練網(wǎng)絡(luò)和測試網(wǎng)絡(luò)
圖10:十次迭代后測試結(jié)果
以上得到了輸入數(shù)據(jù)Inputx,和對應(yīng)的labels。Inputx 的每一列為一個50*50 的圖像的展開,每一類別生成了300 張圖,共有6個類別,所以有1800 列,對應(yīng)的labels 也是1800 列。
在命令行輸入nnstart,在出現(xiàn)neural network 窗口,選擇第二項Pattern Recognition app,即模式識別和分類應(yīng)用;點擊next,將輸入選擇為Inputx,
targets 選擇為labels,表示神經(jīng)網(wǎng)絡(luò)的輸入和對應(yīng)的標準輸出;后續(xù)將number of hidden neurons 設(shè)置為200,其余采用默認設(shè)置。三層神經(jīng)網(wǎng)絡(luò)對6 個類別、1800 個樣本的水書字符進行訓練,訓練得到結(jié)果如圖4 所示。
可以看到Matlab 自動在48 次迭代時停止訓練,此時validation的loss 是最小的,如果繼續(xù)訓練,train 的loss 雖然會變小,但validation 的loss 變大證明已經(jīng)產(chǎn)生過擬合現(xiàn)象了。
點擊training state,發(fā)現(xiàn)在訓練集上準確率為99.8%,但在測試集上準確率為90.4%,如圖5 所示。
此訓練狀態(tài)說明該三層神經(jīng)網(wǎng)絡(luò)已經(jīng)出現(xiàn)了一定的過擬合。其原因在于我們的樣本較為單一,且網(wǎng)絡(luò)結(jié)構(gòu)只有一層隱藏層,其泛化能力不足。
為了解決MLP 網(wǎng)絡(luò)泛化能力不足的問題,我們引入了CNN 網(wǎng)絡(luò)模型。
作為一種特殊的深層神經(jīng)網(wǎng)絡(luò)模型,卷積神經(jīng)網(wǎng)絡(luò)(CNN)是將BP 和深度學習網(wǎng)絡(luò)相結(jié)合產(chǎn)生的一種新型網(wǎng)絡(luò),它可對旋轉(zhuǎn)、傾斜、平移等變形保持高度不變性。近年來,CNN 模型的深度神經(jīng)網(wǎng)絡(luò)就獲得了業(yè)界的關(guān)注,成為圖像和視頻深度學習的最流行算法之一,CNN 模型下的深度學習與普通的機器學習區(qū)別如圖6 所示。
CNN 結(jié)構(gòu)利用了圖像的空間信息,增強了圖像中的特征,同時,由于共用權(quán)值,大大減少了參數(shù)量,使得CNN 結(jié)構(gòu)在訓練時更能減少過擬合現(xiàn)象,提高了模型的泛化能力。在驗證CNN 網(wǎng)絡(luò)究竟能否解決MLP 網(wǎng)絡(luò)在水書字符識別過程中所表現(xiàn)出的泛化能力不足問題時,我們用Matlab 創(chuàng)建一個簡單的CNN 網(wǎng)絡(luò),對水書字符進行識別。
首先需要準備數(shù)據(jù)集,選用17 個水書字符做分類,將每一個字符擴充為500 個,存放在對應(yīng)文件夾下,將圖片保存為50*50*1的指定格式,做成待訓練的數(shù)據(jù)格式并劃分訓練集與測試集。然后建立網(wǎng)絡(luò),代碼如圖7 所示。
在這里只建立了一層卷積網(wǎng)絡(luò),卷積核尺寸為3*3,數(shù)量為20個,經(jīng)過relu 激活函數(shù)后進行maxpooling,繼而接入全連接層進行分類。訓練參數(shù)設(shè)置代碼如圖8 所示。
最后訓練網(wǎng)絡(luò)并顯示準確度,具體如圖9 所示。
在10 個epoch 后得到準確度為93.74%,具體如圖10 所示。
考慮到該CNN 網(wǎng)絡(luò)結(jié)構(gòu)較為簡單,且分類目標也僅為17 個,相比于MLP 網(wǎng)絡(luò)對6 個字符分類的準確率90.4%,此結(jié)果表明使用了CNN 結(jié)構(gòu)對分類性能有較大的提升。同時,對訓練的超參數(shù)的修改和生成樣本的改進還可以使準確率進一步提升。
一般來說,較大的網(wǎng)絡(luò)結(jié)構(gòu)需要較大的數(shù)據(jù)量和較長的訓練時間,我們可以選擇在預訓練好的基礎(chǔ)網(wǎng)絡(luò)上進行調(diào)整,即選擇一個合適的訓練好權(quán)值的網(wǎng)絡(luò),改變其全連接層的結(jié)構(gòu),利用前面的權(quán)值作為初始值接著訓練。
人工提取特征是傳統(tǒng)機器學習方法的問題所在,它將直接影響最終分類結(jié)果的效果。CNN 模型的引入可以解決普通神經(jīng)網(wǎng)絡(luò)在水書字符識別過程中所表現(xiàn)出的網(wǎng)絡(luò)泛化能力不足問題,提高水書文字識別系統(tǒng)的識別率。