房夢婷 陳中舉



摘要:為提高圖像識別的準確率,提出了一種基于卷積神經(jīng)網(wǎng)絡的圖像識別模型。本實驗使用Python編程語言實現(xiàn)模型的訓練與測試。對圖像數(shù)據(jù)集cifar-10進行預處理后,使用Python中的Keras框架進行模型的構建與訓練,模型訓練完畢后,對識別準確率進行評估,最后對測試集中的圖片進行識別,獲得預測準確率和混淆矩陣。通過增加卷積運算的次數(shù),提高圖像識別的準確率。
關鍵詞:卷積神經(jīng)網(wǎng)絡;圖像識別;Python;Keras
中圖分類號:TP391 文獻標識碼:A
文章編號:1009-3044(2020)10-0190-03
1概述
卷積神經(jīng)網(wǎng)絡,簡稱CNN,是多層神經(jīng)網(wǎng)絡模型的一個變種,受到生物學的啟發(fā),卷積神經(jīng)網(wǎng)絡在圖像領域得到了廣泛的應用。最早的神經(jīng)網(wǎng)絡模型是1998年由LeCun等人提出的LeNet5m,它以交替出現(xiàn)的卷積層和池化層作為基礎的主干網(wǎng)絡,結合全連接層組成完整的網(wǎng)絡結構。在2012年,Krizhevsky等人設計了AlexNetN網(wǎng)絡,它的主干網(wǎng)絡包含了五個卷積層,全連接層增加到三個,并且將傳統(tǒng)的激活函數(shù)替換成ReLU函數(shù)。2013年,MinLin在NetworkinNetworkN中首次明確提出了在進行卷積運算的時候使用1Xl的卷積核。2014年,Szegedv等人提出了并行卷積的Inception模塊。2015年,HeK等人提出了使用兩個3x3的卷積核代替原來的5x5的卷積核的MSRA-Net[S],使網(wǎng)絡的性能得到非常大的提升。同年,HeK等人提出的RestNet網(wǎng)絡,進一步提升了網(wǎng)絡性能。 2相關技術
2.1Keras框架
Keras是一個使用Python編寫的模型級的高級深度學習程序庫,只處理模型的建立、訓練和預測等,使用最少的程序代碼、花費最少的時間建立深度學習模型。對于深度學習底層的運算(如張量運算),使用的是“后端引擎”。目前Keras提供了兩種后端引擎:TensorFlow與Theano。同Keras相比,單獨使用TensorFlow這樣低級的鏈接庫雖然可以完全控制各種深度學習模型的細節(jié),但是需要編寫更多的程序代碼,花費更多時間進行開發(fā)。
2.2卷積神經(jīng)網(wǎng)絡
卷積神經(jīng)網(wǎng)絡是一種在監(jiān)督學習下的多層網(wǎng)絡模型,由多個卷積層和池化層(有時也統(tǒng)稱卷積層)交替連接而成。最經(jīng)典的卷積神經(jīng)網(wǎng)絡模型是LeNet5模型,它由YannLeCun設計,基本的操作包括:卷積運算和池化運算。其具體的網(wǎng)絡結構如圖1所示:
2.2.1卷積運算
卷積層的意義是將原本一個圖像經(jīng)過卷積運算產(chǎn)生多個圖像,每一個圖像保有原圖像的一些特征,卷積運算的效果很類似濾鏡的效果,用于提取不同的特征。卷積運算的過程如圖2所示:
在圖3所示過程中,輸入圖片的大小為6×6,卷積核的大小為3×3,首先選取圖片左上角一個3×3的矩陣(藍色區(qū)域)與卷積核進行運算。運算的過程是:被選區(qū)域與卷積核對應位置元素相乘,得到一個3×3的矩陣,再將該矩陣中的所有元素相加,得到第一個卷積特征,即3×1+0×0+1×(-1)+1×1+5×0+8×(-1)+2×1+7×0+2×(-1)=-5。然后藍色被選區(qū)域向右移動一個步長(在這里步長為1),利用新得到的矩陣繼續(xù)跟卷積核做卷積運算,同樣是先乘后加,得到對應位置的卷積特征-4。接下來藍色被選區(qū)域按照從左到右、從上到下的順序,依次遍歷整個圖片,得到圖片卷積之后的所有特征值,是一個4×4的矩陣。在實驗過程中,通常利用多個不同的卷積核來處理圖片,從而提取出不同的特征。
從上面的卷積過程可以看出,通過卷積運算,圖片大小由原來的6×6,縮小為4×4,若進行多次的卷積,圖片一直縮小,會使得圖片的邊緣特征被忽略掉。要使得卷積過程中圖片的大小不變,保留圖片更多的特征,需要在圖片外面進行填充,通常是填充0。
2.2.2池化運算
池化層(也稱下采樣層)意義是用一個特征來表達一個局部的特征,池化運算就是對圖像進行縮減采樣。池化運算中最常用的是最大池化,就是只取指定區(qū)域中的最大值,另外還有平均池化,k最大池化等。其中,最大池化運算的過程如圖3所示,原本4×4的圖像經(jīng)過池化運算后,圖像的大小變?yōu)?×2:
通過池化運算減少了需要處理的數(shù)據(jù)點,節(jié)省了后續(xù)運算所需的時間。同時也讓參數(shù)的數(shù)量和計算量有所下降,這在一定程度上也控制了過度擬合。
3卷積神經(jīng)網(wǎng)絡的圖像識別實驗
3.1數(shù)據(jù)源
本實驗使用cifar-lO圖像識別數(shù)據(jù)集作為實驗數(shù)據(jù),該數(shù)據(jù)集中共有60000張彩色圖片,圖片大小為32×32,由兩部分組成,一部分是訓練圖片共50000張,一部分是測試圖片共10000張。該數(shù)據(jù)集中包含了10類事物,分別為:airplane,auto-mobile,bird,cat,deer,dog,frog,horse,ship,truck,每個分類有6000張圖片。
3.2實驗過程
本實驗使用Pvthon的Keras框架來完成圖像識別模型的設計,為比較不同卷積層數(shù)對識別準確率的影響,需要不斷加深模型的卷積層數(shù)。具體流程如圖4所示:
4實驗結果
4.1訓練結果
在模型訓練階段,將50000條訓練數(shù)據(jù)按照8:2的比例隨機分為訓練數(shù)據(jù)和驗證數(shù)據(jù),設置損失函數(shù)的參數(shù)為categori-cal_crossentropy,優(yōu)化器為adam,評估模型的方法為準確率,訓練周期為15,batch_size設為128。模型一為只有兩個卷積層的淺層神經(jīng)網(wǎng)絡,模型二將卷積層增加到了六層。為了防止模型出現(xiàn)過擬合的情況,在建模的過程中適當添加Dropout函數(shù)放棄部分神經(jīng)元。訓練過程中的準確率執(zhí)行結果如圖5所示。
如果訓練準確率一直增加,驗證準確率沒有增加,可能是出現(xiàn)了過擬合的現(xiàn)象。比較兩個模型,可以發(fā)現(xiàn)對過擬合程度控制更好的是模型二。
4.2測試結果
使用測試數(shù)據(jù)集,對兩個模型預測的準確率進行評估,最終模型一的準確率為0.7384,模型二的準確率為0.8062。可以看出,模型二預測的準確率要高于模型一。
4.3效果展示
如圖7是模型二對圖片預測效果的展示。
5總結
為完成圖像識別任務,本文利用Pvthon中的Keras框架,通過少量的代碼完成了卷積神經(jīng)網(wǎng)絡模型的構建。通過不斷加深網(wǎng)絡的深度,得出如下結論,針對特定數(shù)據(jù)集,通過適當增加卷積層的數(shù)量可以有效地提高圖像識別的準確率。由于實驗機器的計算能力有限,實驗數(shù)據(jù)量太小,本次實驗構建的卷積神經(jīng)網(wǎng)絡的結構并不大。下一步的研究可以在改變參數(shù)設置、更換實驗環(huán)境、使用更加龐大的數(shù)據(jù)集等方面進行展開,更加深入的學習和利用卷積神經(jīng)網(wǎng)絡。