楊夢卓 郭夢潔 方亮
摘 要:當(dāng)前卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于圖像識別已成為研究的熱點(diǎn)之一。相比于Tensorflow,Keras使用最少的程序代碼、花費(fèi)最少的時間就可以建立深度學(xué)習(xí)模型,進(jìn)行訓(xùn)練、評估準(zhǔn)確率,并進(jìn)行預(yù)測。在Python的環(huán)境下輸入CIFAR-10數(shù)據(jù)集,對圖片進(jìn)行歸一化、數(shù)據(jù)增強(qiáng)等預(yù)處理后,利用Keras構(gòu)造改進(jìn)的VGG16卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)對CIFAR-10圖像數(shù)據(jù)集進(jìn)行建模和預(yù)測,最后通過比較不同的Batch Size來比較不同模型的準(zhǔn)確率和損失,實(shí)驗結(jié)果表明當(dāng)Batch Size為128,CIFAR-10數(shù)據(jù)集識別正確率達(dá)到89%,明顯高于其他方法。
關(guān)鍵詞:VGG16;卷積神經(jīng)網(wǎng)絡(luò);深度學(xué)習(xí);Keras;圖像識別
中圖分類號:TP751 ?文獻(xiàn)標(biāo)識碼:A
1 keras簡介
Keras是一個開放源碼的高級深度學(xué)習(xí)程序庫,它的設(shè)計參考了Torch,用Python語言編寫,支持GPU和CPU,是一個高度模塊化的神經(jīng)網(wǎng)絡(luò)庫。目前 Keras 提供了兩種后端引擎:Theano與TensorFlow,在二者之上,Keras提供了可以讓用戶更專注于模型設(shè)計并更快進(jìn)行模型實(shí)驗的API。這些API以模塊的形式封裝了來自Tensorflow和Theano的諸多小的組件,所以使用這兩者能夠搭建的網(wǎng)絡(luò)也可以通過Keras進(jìn)行搭建,并且基本上沒有性能損失。使用Keras框架最大的好處是在搭建新的網(wǎng)絡(luò)結(jié)構(gòu)時能夠能夠節(jié)約更多的時間。
2 相關(guān)算法
2.1 卷積神經(jīng)網(wǎng)絡(luò)(CNN)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN或ConvNet)屬于前饋神經(jīng)網(wǎng)絡(luò),一般是通過卷積層、匯聚層和全連接層交叉堆疊而成,基于反向傳播算法進(jìn)行訓(xùn)練,最早主要用來處理圖像信息。當(dāng)使用全連接前饋神經(jīng)網(wǎng)絡(luò)訓(xùn)練圖像時,會產(chǎn)生參數(shù)太多、很難提取局部不變特征的問題。而卷積神經(jīng)網(wǎng)絡(luò)有局部連接,權(quán)重共享和等變表示三個結(jié)構(gòu)上的特點(diǎn)。因此這些特性使得卷積神經(jīng)網(wǎng)絡(luò)具有一定程度上的平移、縮放和旋轉(zhuǎn)不變性。
2.2 VGGNet卷積網(wǎng)絡(luò)模型
VGGNet模型對卷積神經(jīng)網(wǎng)絡(luò)的深度與其性能之間的關(guān)系進(jìn)行了探索,網(wǎng)絡(luò)的結(jié)構(gòu)非常簡潔,它的整個網(wǎng)絡(luò)中全部使用了大小相同的卷積核(3×3)和最大池化核(2×2)。通過重復(fù)堆疊的方式,使用這些卷積層和最大池化層成功的搭建了11~19層深的卷積神經(jīng)網(wǎng)絡(luò)。根據(jù)網(wǎng)絡(luò)深度的不同以及是否使用LRN,VGGNet可以分為A~E6個級別。如表1所示為VGGNet各級別的網(wǎng)絡(luò)結(jié)構(gòu)表。
由表1可以看出,VGGNet擁有5段卷積,每一段卷積內(nèi)都有一定數(shù)量的卷積層(或一個或四個),所以是5階段卷積特征提取。每一段卷積之后都有一個max-pool層,這些最大池化層被用來縮小圖片的尺寸。并且同一段內(nèi)的卷積層擁有相同的卷積核數(shù),之后每增加一段,該段內(nèi)卷積層的卷積核就增長一倍。
3 卷積神經(jīng)網(wǎng)在CIFAR-10數(shù)據(jù)集上的應(yīng)用
3.1 CIFAR-10數(shù)據(jù)集
CIFAR-10是一個圖像數(shù)據(jù)集,是用于普通物體識別的小型數(shù)據(jù)集,最初是由Alex及其團(tuán)隊收集而來。CIFAR-10中有60000張彩色圖片,每張圖片的大小是 32x32,60000張圖片中有50000 張用于訓(xùn)練,10000張圖片用于測試,分別有五個訓(xùn)練塊、一個測試塊。圖片的內(nèi)容標(biāo)簽分為10類,每張圖片的標(biāo)簽唯一,每一類圖片的個數(shù)都是6000張。
3.2 改進(jìn)的VGG16模型的結(jié)構(gòu)設(shè)計
本文采用的模型是在VGG16模型基礎(chǔ)上做的改進(jìn),使用固定尺寸的小卷積核(3×3),兩層卷積層搭配一層池化層,使用 VGG16 的前三個卷積池化結(jié)構(gòu):以2的冪次遞增卷積核數(shù)量(64,128,256),全連接層沒有采用VGG16龐大的三層結(jié)構(gòu),避免運(yùn)算量過大,卷積層輸出直接上10分類的 Softmax Classifier,權(quán)重初始化采用He Normal,而沒有采用Xavier,并且加入Drop層,防止模型過度擬合。
3.3 模型訓(xùn)練過程
3.3.1 圖像預(yù)處理
圖像預(yù)處理階段分三步進(jìn)行,第 1階段合并全部 50000 張訓(xùn)練圖片及其標(biāo)簽將像素灰度值歸一化;第 2 階段對數(shù)據(jù)集進(jìn)行圖像增強(qiáng);第3階段將標(biāo)簽進(jìn)行 One-Hot 編碼,以達(dá)到使用 Softmax 進(jìn)行預(yù)測的目的;第四階段導(dǎo)出預(yù)處理后的訓(xùn)練數(shù)據(jù)。
3.3.2 利用Keras建立模型
導(dǎo)入Keras的相關(guān)模塊,基于Keras構(gòu)造上述模型,summary()查看的模型的完整結(jié)構(gòu)如圖1所示。
第一段卷積網(wǎng)絡(luò)是由2個卷積層和1個最大池化層構(gòu)成。這兩個卷積層的卷積核的大小都是3×3,同時卷積核數(shù)量也均為64,步長為1×1。第一個卷積層的輸入input的尺寸為32×32×3,輸出尺寸為32×32×64;而第二個卷積層的輸入、輸出尺寸均為32×32×64(接收來自第一個卷積層的輸出)。兩個卷積層之后是一個2×2的最大池化層,由于步長是2,所以經(jīng)過最大池化之后,輸出結(jié)果尺寸變成了16×16×64。
第二段和第三段卷積網(wǎng)絡(luò)和第一段的結(jié)構(gòu)非常類似,兩個卷積層的卷積核尺寸也是3×3,只是經(jīng)由這兩個卷積層之后輸出的通道數(shù)變了,所以第二段和第三段卷積網(wǎng)絡(luò)的輸出尺寸分別為8×8×128和4×4×256,然后將結(jié)果輸入到Flatten層。Flatten層用來將輸入“壓平”,即把多維的輸入一維化,本文采用Dropout的正則化方法,防止模型過擬合,提升模型的泛化能力,之后直接進(jìn)入10 分類的 Softmax Classifier。
3.3.3 實(shí)驗結(jié)果分析
實(shí)驗環(huán)境為 Windows10系統(tǒng),采用編程語言為 Python,神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)框架采用Keras框架,將上文提出的VGG16神經(jīng)網(wǎng)絡(luò)對CIFAR-10預(yù)處理后的圖片進(jìn)行特征提取與訓(xùn)練,Batch Size = 64,經(jīng)過106步的迭代,將訓(xùn)練好的模型對CIFAR-10訓(xùn)練集進(jìn)行測試,所能達(dá)到的最高準(zhǔn)確率是第98步,為97.89%。模型在測試集上所能達(dá)到的最高準(zhǔn)確度為90%,這一準(zhǔn)確度在第85代訓(xùn)練達(dá)到。如圖2所示。
在CIFAR-10上的模型訓(xùn)練過程準(zhǔn)確率和損失率變化在 Tensorboard 可視化后,得到準(zhǔn)確率和損失率變化曲線,如圖3所示。
根據(jù)上面的損失率變化曲線,可以觀察到模型在第40代訓(xùn)練之后損失不斷上升,這說明模型已經(jīng)進(jìn)入過擬合狀態(tài),不應(yīng)再繼續(xù)訓(xùn)練。結(jié)合上面的分析,Batch Size為64的模型實(shí)際收斂準(zhǔn)確度應(yīng)該是 88%-89%。把Batch Size改為128,Tensorboard可視化的準(zhǔn)確率和損失率變化曲線如圖4所示。
根據(jù)上面的準(zhǔn)確率變化曲線,我們可以看到模型在測試集上所能達(dá)到的最高準(zhǔn)確度為90.22%,這一準(zhǔn)確度在第104代訓(xùn)練達(dá)到。但是根據(jù)上面的損失率變化曲線,可以觀察到模型在第60代訓(xùn)練之后損失不斷上升,這說明模型已經(jīng)進(jìn)入過擬合狀態(tài),不應(yīng)再繼續(xù)訓(xùn)練。結(jié)合上面的分析,Batch Size為128的模型實(shí)際收斂準(zhǔn)確度應(yīng)該是 89%。
3.3.4 對比不同 Batch Size下的模型訓(xùn)練過程
使用相同的模型和不同的batch size,對模型嘗試了四種不同的 Batch Size = 64 / 128 / 256 / 512,并通過Tensorboard將這四個模型的訓(xùn)練準(zhǔn)確度和Loss曲線繪制在一張圖上。將模型訓(xùn)練過程用Tensorboard記錄繪制如圖5所示,橫軸是訓(xùn)練代數(shù),半透明的折線是原始數(shù)據(jù),實(shí)線是經(jīng)過平滑后的數(shù)據(jù),能夠更清晰的看到每個模型在同一個訓(xùn)練指標(biāo)上的變化趨勢以及不同模型在訓(xùn)練過程中的性能差異。
不同的Batch Size和不同的迭代次數(shù)下的損失率、準(zhǔn)確率的差異見表2。通過對比試驗,可以得到以下幾條關(guān)于 Batch Size 對訓(xùn)練模型影響的結(jié)論:Batch Size越大,每代訓(xùn)練的訓(xùn)練時間越短,但縮短到一定程度就不再下降;Batch Size越大,模型收斂的越慢,直至不能收斂;Batch Size 越大,過擬合會越晚體現(xiàn)出來。
4 結(jié)語
本文介紹了一種圖像識別方法,利用改進(jìn)的VGG16神經(jīng)網(wǎng)絡(luò)模型,在CIFAR-10數(shù)據(jù)集訓(xùn)練并測試,使用TensorBoard對比不同Batch Size下的模型訓(xùn)練過程,實(shí)驗得出CIFAR-10數(shù)據(jù)集識別正確率達(dá)到89%。文中提出的方法雖未達(dá)到前人在CIFAR-10數(shù)據(jù)集上的最高準(zhǔn)確率,但為解決圖像識別問題提供了不錯的思路。
參考文獻(xiàn):
[1]范望,韓俊剛,茍凡,等.卷積神經(jīng)網(wǎng)絡(luò)識別漢字驗證碼[J].計算機(jī)工程與應(yīng)用,2018,(3):160-165.
[2]鄒鑫.基于卷積神經(jīng)網(wǎng)絡(luò)的圖像分類算法研究[D].西北師范大學(xué),2018.
作者簡介:楊夢卓(1995-),女,安徽六安人,碩士,研究方向:深度學(xué)習(xí);郭夢潔(1996-),女,安徽安慶人,碩士,研究方向:深度學(xué)習(xí);方亮(1994-),男,安徽銅陵人,碩士,研究方向:深度學(xué)習(xí)。