龔建偉,孟博文,童昱恒,孔煜杰,譚儀慧
(北京師范大學 香港浸會大學聯合國際學院理工科技學院,廣東 珠海 519087)
隨著圖像識別技術的不斷發展,如今圖像識別不僅可用于不同種類物體的識別,對于較為相似的物體也可以進行準確度較高的區分。在諸多圖像識別項目中,動物識別具有較為特殊的意義,在智能家居、智慧牧業等諸多場合都有用武之地。目前雖然已有的圖像識別技術已經可以較好地區分外貌差異較大的動物,但是當面臨長相相似的動物之時,快速、高效地進行準確識別仍是一項具有挑戰性的工作。貓、狗作為體型與外貌相對接近的動物,對于圖片識別來說還是較有挑戰性的難題。如何在確保準確度的同時又能提升識別準確度,在識別速度和準確度之間找到均衡,是諸多動物圖像識別項目需要面臨的挑戰。
目前,利用卷積神經網絡(Convolutional Neural Network,CNN)自動提取圖像特征,然后放入訓練好的模型進行識別,是圖片識別項目最為常用的手段[1-3]。Le Net 模型是非常經典的卷積神經網絡模型,不僅可用于識別顏色特征[4],也可用于識別人臉[5]等彼此差別較小的圖像。隨著圖像識別技術日益進步,人們意識到傳統的Le Net 模型已不能滿足圖像識別的需求,在精度等方面都有待提升。雖然L2 正則化和Dropout 優化網絡等方法的引入,可以減輕Le Net 模型的過擬合問題[6],基于Le Net 也可以搭建更好的混合激活函數卷積神經網絡[7],但對其它模型的探索還是被人們提上了日程。在諸多進一步發展的CNN 模型中,VGG 模型是較具代表性的優質模型,其主要思路是通過增加卷積神經網絡的深度和寬度來提升模型的性能[8]。雖然現有的VGG-16 等已經是相當優秀的模型,但由于VGG模型的基礎架構,使其所包含的權重參數數目相當之大。因此,在此基礎上尋找改進版的輕量級模型是許多圖像識別項目的工作[9]。設計合理的淺層VGG 模型不但訓練耗時少、泛化能力強,且準確度也有保障[10]。目前已有研究者嘗試在既有的VGG-16 模型基礎之上進一步改進以用于圖像識別,取得了較好的成效,這證明VGG 模型具有充分的改造潛力[11]。但VGG-16 模型對于動物識別來說可能過于臃腫。本研究試圖構建多種不同的輕量級VGG 模型并且驗證準確度,最終構建出用于動物識別時準確度較高且足夠輕量級的VGG 模型。此外,在實驗過程中亦可得到一些改進思路與方向,這對未來研究者進一步改進模型也有所幫助。
為了檢查導入的圖片是否正確,實驗首先使用matplotlib 庫,繪制幾張導入后的圖片以進行檢查。然后需要建立若干新目錄,并將圖片按一定比例隨機分配至測試集與訓練集當中。根據實驗的設置,將有25%的數據被保留在測試集內。在完成這一步之后,實驗選擇利 用 Keras 庫中的ImageDataGenerator 在模型運行時對圖片進行預處理,以將其規范化為200×200 像素的圖片,有助于后面進一步開展模型訓練與預測工作。
在完成圖片的導入、展示與預處理之后,進一步將圖片劃分為幾部分,并使用卷積神經網絡(CNN)進行圖像識別。考慮到本次探究的目的,實驗采用了傳統VGG 模型(全程使用3x3 的卷積和2x2 的max pooling)作為此次項目的基礎,傳統VGG 模型結構簡單且應用性強,而且有較為明確的改進方向。不僅如此,相較GoogLeNet 等模型,VGG 在遷移學習任務中的表現更好[12],這意味著探究VGG 的改進具有更深的意義。與其他模型相比,VGG 的優勢在于其采用連續的小卷積核代替較大卷積核,以獲取更大的網絡深度[13]。
VGG 模型的突出特點是使用卷積塊和全鏈接塊來代替傳統的卷積層與全連接層,這里的塊是由多個輸出通道相同的層構成。max pooling 被用于劃分不同的塊,而既有的VGG 模型則根據網絡層數不同被分為VGG-11、VGG-13、VGG-16、VGG19 等。雖然既有模型層數較多且目前的諸多研究仍然側重以VGG-16 為基礎進行改進[14],但直接使用更加輕量化的VGG 模型進行圖像識別仍是可能的[15]。
為了節約資源,實驗嘗試了單塊,以及兩塊、三塊、四塊與五塊的VGG 模型,不同塊的過濾器數量分別為32、64、128、256、512 個(均只有一個全連接層)。因為這是一個二分類問題,故class_mode 被指定為binary。為了檢查過擬合現象以及訓練的成效,實驗還繪制了損失曲線圖以及準確率曲線圖,其中藍色曲線為訓練集結果,橙色曲線為測試集結果。
測試過程中發現,在識別準確度提高的同時,也會存在較為明顯的過擬合現象,這是卷積神經網絡的通病。不僅如此,由于貓與狗確實較為相近,因此準確率也仍然有進一步提升的空間。為了解決這一問題,實驗嘗試了Dropout 正則化和圖像增強兩種技術。Dropout 正則化會丟棄一些網絡中的神經元,以模擬不同結構的網絡,其基礎特性在于節點刪除的完全隨機性[16];而圖像增強則是改變圖像的視覺效果,從而增加訓練集的數據量。應用Dropout 前后的神經網絡示意如圖1 所示:
實驗軟硬件環境設定為:16 GB 計算機內存,Windows10 64 位1909 版操作系統,搭載有Intel Xeon E3-1231v3 3.4 GHz 處理器與GTX960 顯卡;基于Python3.6 編程語言的TensorFlow 深度學習框架中集成的Keras 庫。
在正式實驗開始之前,由于貓狗并非同時導入系統,因此預先使用matplotlib 分別繪制數據集,以檢查圖像數據導入的正確行,如圖2、圖3 所示。

圖2 使用matplotlib 繪制的狗圖像數據集Fig.2 Dog images dataset drawn with matplotlib

圖3 使用matplotlib 繪制的貓圖像數據集Fig.3 Cat images dataset drawn with matplotlib
2.3.1 Dropout 對比試驗
實驗首先基于5 000 張圖片數據集嘗試對雙塊模型進行Dropout 正則化以模擬不同的網絡結構。實驗在每一次卷積中設定10%的Dropout 值,而在全連接層,這一數字被增加到35%。經過測試可以發現,過擬合現象雖然有所減輕,但是準確率確有明顯下降。如圖4 所示,對比三塊VGG 和三塊VGG+Dropout 的測試結果可以發現,雖然過擬合現象有所減輕,但是準確率始終保持在較低水平。

圖4 三塊VGG 且無Dropout 與三塊VGG+Dropout 的對比Fig.4 Comparison between 3 block VGG model without dropout and 3 block VGG model+dropout
2.3.2 圖像增強實驗
除Dropout 正則化之外,實驗還考慮了圖像增強。為避免破壞圖片本體結構,實驗基于5 000 張圖片數據集選擇了一定的水平和垂直位移/水平翻轉來獲取更多的樣本,用以提升模型的準確率。測試中嘗試了多種位移值,三塊VGG 所對應的位移值為0.12,兩塊VGG 所設置的位移值為0.22,翻轉均被設置為True。
通過對比發現,三塊VGG 且有圖像增強時,過擬合現象顯著小于單純的三塊VGG 時的狀態;無圖像增強時,測試集準確率大多時候都低于訓練集,但有圖像增強之后有所不同。不僅如此,模型本身的準確率并未受到太大影響。但令人遺憾的是,雖然模型訓練時epoch 已被提升至40,但最終的準確率仍然只有72.1%左右。兩塊VGG+圖像增強的最終準確度為69.1%,較原先有明顯提升,證明了圖像增強的有效性,同時也可看到測試集曲線波動仍然較大,如圖5所示。

圖5 三塊VGG+圖像增強與兩塊VGG+圖像增強的對比Fig.5 Comparison between 3 block VGG model+image data augmentation and 2 block VGG model+image data augmentation
2.3.3 VGG-16 模型實驗
數據集樣本中若僅有5 000,在某些情境下或許顯得有些少,因此需要探究數據集數量是否影響了模型的準確度。在與既有的VGG-16 對比之后不難發現,模型實際上仍有較多改進空間。事實證明,VGG-16 在樣本數為5 000 的前提下依舊表現出色,僅僅兩個epoch 就可以達到很高的效能,但這與VGG-16 模型的復雜度有關,如圖6 所示。

圖6 VGG-16 測試結果Fig.6 Test results based on VGG-16 model
2.3.4 大樣本實驗
對實驗所設計的輕量級模型而言,采用包含2.5萬張圖片的數據集,結果如圖7 所示。在針對2.5萬張圖片的完整數據集進行測試時可以發現,測試集曲線要顯著比5 000 張圖片時平緩。此外,三塊VGG+圖像增強和四塊VGG+圖像增強的準確率都有所提升,分別達到了74.2%和78.5%的水平,這說明有更多樣本用于訓練對提升準確率很有幫助。

圖7 三塊VGG+圖像增強和四塊VGG+圖像增強的對比Fig.7 Comparison between 3 block VGG model+image data augmentation and 4 block VGG model+image data augmentation
2.3.5 單塊多卷積層模型實驗
由于2.5 萬張圖片的數據集測試起來比較費時,所以后續實驗基于1 萬張圖片的數據集進行測試。圖8 分別為四塊VGG 和三塊VGG,但是最后一個塊有兩個卷積層的測試結果。

圖8 四塊VGG 和三塊VGG 測試結果Fig.8 Comparison between 4 block VGG model and 3 block VGG model
兩個模型均出現了相當明顯的過擬合現象。其中四塊VGG 的最終準確率為75%,三塊VGG 的準確率則為69.2%。雖然兩個模型均有4 個卷積層,但池化層的分布(用于劃分塊數)仍然對結果產生了巨大的影響。
2.3.6 四塊VGG+圖像增強模型實驗
由上述結果可以看出,四塊VGG 的準確率較5 000張圖片時(70.9%)有明顯提升,這說明其具有進一步改進的潛力。因此,實驗嘗試了四塊VGG+圖像增強(偏移值設置為0.09)的模型,最終在經過40 epochs的訓練后,得到了83.3%的準確度,如圖9所示。這一結果已經超過了2007 年的SVM 分類器的水平[17]。

圖9 四塊VGG+圖像增強的測試結果Fig.9 Test results of 4 block VGG model+image data augmentation
從模型構建結果來看,實驗最終構建得到的四塊VGG+圖像增強(偏移值設置為0.09)的模型準確度在80%以上,對于輕量級模型而言,這一結果比較令人滿意。模型相對傳統的VGG-16 而言可算相當輕量級的模型,在訓練速度等方面都有顯著優勢。因此,這一模型可以較好地滿足智慧牧業、社區監控等應用的需求。除此之外,實驗所得到的方向性結論也可為試圖構建輕量級VGG 模型的研究者提供一定幫助。