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