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