黃詩瑀,葉 鋒,2,3,黃麗清,2,3,黃添強,2,3,陳家禎,2,3,鄭子華,2,3
(1.福建師范大學計算機與網(wǎng)絡空間安全學院,福建 福州 350117;2.數(shù)字福建大數(shù)據(jù)安全技術研究所,福建 福州 350117;3.福建省公共服務大數(shù)據(jù)挖掘與應用工程技術研究中心,福建 福州 350117)
隨著近年來人工智能技術迅速發(fā)展,各大深度學習技術社區(qū)網(wǎng)站出現(xiàn)了許多預訓練模型可供調(diào)用,使用者無需關心模型內(nèi)部的實現(xiàn)細節(jié).高度黑盒化的深度學習模式也帶來了一個問題,在實際的圖像分類應用中,沒有正確評估數(shù)據(jù)集和模型之間的大小關系,偏好使用大而復雜的模型進行圖像分類任務,雖然在訓練集上達到了很高的分類精度,但是在驗證集和測試集上分類精度較差,同時模型訓練計算開銷大,訓練時間長,占用存儲空間多,模型可塑性和維護性差.一些業(yè)余的深度學習使用者,并沒有足夠的算力在短時間內(nèi)得到想要的模型,也導致了深度學習技術的應用門檻較高.本文對模型進行結構剪枝研究,并依據(jù)剪枝策略設計一個高效輕量的蘑菇識別模型MushroomNet-MicroV2(簡稱MicroV2).
本文的貢獻如下:(1)收集并整理了包含9類蘑菇圖片的數(shù)據(jù)集,經(jīng)過圖像增強(裁剪、旋轉)處理之后為4 500張;(2)對圖像分類網(wǎng)絡各部分精度貢獻做了比較研究,為卷積神經(jīng)網(wǎng)絡模塊構建提供依據(jù);(3)研究了數(shù)據(jù)集大小對圖像分類精度帶來的影響;(4)提出一種用于識別小型數(shù)據(jù)集的微型神經(jīng)網(wǎng)絡MushroomNet-MicroV2,該模型精簡高效,可以在蘋果M1 CPU等ARM平臺上快速訓練與部署,發(fā)布的PyTorch版本代碼網(wǎng)址為https:∥github.com/Huang-Shi-Yu/MushroomNet/.
現(xiàn)有的主要的圖像分類模型包括AlexNet[1]、VGG[2]、GoogLeNet[3]、EfficientNet[4]以及Vision Transformer[5].這些圖像分類網(wǎng)絡在大型數(shù)據(jù)集(例如Imagenet)上表現(xiàn)良好,而對于小型數(shù)據(jù)集,此類網(wǎng)絡存在過擬合現(xiàn)象.且大型網(wǎng)絡訓練緩慢,使得模型不易訓練和部署.為了能適應小型數(shù)據(jù)集的分類任務,學者陸續(xù)提出了ResNet[6]、SqueezeNet[7]、MobileNet[8-10]、ShuffleNet[11-12]、Xception[13]等輕量化模型,以實現(xiàn)分類精度和效率之間的平衡.除此之外,常見的模型壓縮的方法還有網(wǎng)絡剪枝[14-17]和知識蒸餾[18-21].
現(xiàn)有的國內(nèi)蘑菇圖像分類工作:肖杰文等[22]收集了7種共1 675張蘑菇圖像,并數(shù)據(jù)增強至8 375張作為分類對象,使用ShuffleNetV2進行分類,達到了55.18%的Top-1分類準確率;沈若蘭等[23]分類9種共6 714張蘑菇圖片,在ResNet50和Xception上分別達到了93.46%和95.10%的分類準確率;樊帥昌等[24]使用VGG、GoogLeNet和ResNet系列模型對14 669張圖片(包含18種毒蘑菇圖片和5種非毒蘑菇圖片)進行分類,其中ResNet152性能最佳,在驗證集上達到了92.17%的分類準確率,同時作者還比較了不同遷移學習策略(全局預訓練和全連接層預訓練)對模型性能帶來的影響;陳秋月等[25]搭建了13層卷積神經(jīng)網(wǎng)絡,對8類共4 688張蘑菇圖片進行分類,達到了95%的分類準確率,但是其數(shù)據(jù)集內(nèi)類別不平衡(數(shù)量最少的類別有340張,數(shù)量最多的類別有900張)導致一些類別正確率較低.
現(xiàn)有的國外蘑菇圖像分類工作:Zahan等[26]收集了8 190張蘑菇圖像,先用對比度增強方法對數(shù)據(jù)預處理,隨后用InceptionV3、VGG16和ResNet50對45種蘑菇進行3分類,分為可食用、不可食用和有毒,訓練過程引入遷移學習,在3個分類模型上分別達到上達到88.4%、84.44%和58.65%的精度;Kiss等[27]收集了29 100共106類蘑菇圖像,使用遷移學習訓練EfficientNet—B5,并引入Noisy Student和類別增長策略,進行消融實驗,比較了不同網(wǎng)絡結構(EfficientNet—B0和EfficientNet—B5)和各種訓練技巧對最終模型精度造成的影響,最終分類模型達到92.6%的精度;Ketwongsa等[28]收集了5種共623張蘑菇圖像,并數(shù)據(jù)增強至2 000張圖像,隨后用GoogLeNet、AlexNet和ResNet50上執(zhí)行二分類任務(有毒和可食用),分別達到99.5%、99.0%、99.5%的驗證精度,提出的模型達到了98.5%的驗證精度,同時還比較了各模型的運行時間,所設計的模型可以在NVIDIA GTX3060上以4.37 min完成10輪訓練,雖然該工作精度很高,但是數(shù)據(jù)集內(nèi)只有5類圖像且數(shù)據(jù)增強方式?jīng)]有公開,沒有介紹模型設計依據(jù).
本文基于蘑菇數(shù)據(jù)集,著重探究卷積神經(jīng)網(wǎng)絡的性能和效率平衡點,分析卷積神經(jīng)網(wǎng)絡模型的卷積層、池化層和全連接層3個部分以及激活函數(shù)對分類精度和效率的影響,并設計精簡的模型結構,在短時間內(nèi)完成訓練,獲得存儲占用小的模型,并達到誤差可接受(相比大模型不低于5%)的分類結果.
輸入一定大小的圖片,卷積核k以一定的間隔s滑動,用于執(zhí)行對圖像的上采樣、下采樣操作,并將數(shù)據(jù)用于下一層的計算.在卷積過程中,局部感受場以滑動的方式覆蓋圖像中所有元素,下一層的神經(jīng)元可以呈現(xiàn)出本層的單個局部感受場(即特征),可以使用Padding操作填充邊緣,以達到控制結果圖像尺寸的目的.在PyTorch中,輸出圖像邊長o的和輸入圖像邊長i的大小關系如公式(1)所示.
(1)
卷積之后進行池化操作,池化操作使得模型具有輸入不變性,即輸入圖像經(jīng)過平移、旋轉、縮放等方式處理之后依然可分類正確的特性.同時池化層使模型參數(shù)量迅速減少.池化層的特征壓縮,使得淺層卷積提取的特征多為細節(jié)特征,例如斑點、紋理;中層卷積提取的特征多為局部特征(菌柄、傘褶);深層卷積提取到的則為全局特征(蘑菇輪廓).本文使用最大池化(MaxPool),在局部感受場區(qū)間內(nèi)采集最大值,突出圖像特征.經(jīng)過卷積和池化操作之后,輸出的特征圖張量大小取決于全局池化層(AvgPool)的結構.
卷積和池化層完成特征提取和降維后,展平成一維向量X輸入全連接層.每一層的神經(jīng)元都和下一層的所有神經(jīng)元相連,神經(jīng)元的學習參數(shù)包括權重w和偏置b.單個神經(jīng)元的輸入和輸出關系如公式(2)所示,最后一層輸出的向量維度表示分類數(shù),取最大分量表示最終類別.
y=σ(wx+b).
(2)
本文設計的全連接網(wǎng)絡中使用2種正則化方法減緩過擬合.(1)dropout:dropout在網(wǎng)絡訓練時隨機地選出神經(jīng)元致其失效,失效神經(jīng)元不再進行信號的傳遞.本文搭建的神經(jīng)網(wǎng)絡在全連接層的第1層與第2層之間,第2層與第3層之間設置了dropout機制.(2)L2權重正則化:該方法通過在學習過程中對大的權重進行懲罰以抑制過擬合.本次實驗為損失函數(shù)加上權重的L2范數(shù),假設權重張量W=(w1,w2,w3,…,wn),L2范數(shù)的表達式如公式(3)所示,記λ為控制正則化強度的因子,L2范數(shù)的權值衰減表達式如公式(4)所示.對于所有權重,權重衰減方法都會為損失函數(shù)加上權重懲罰項Lweight,求權重梯度的計算中,都會為誤差反向傳播法加上正則化的導數(shù)λL2,PyTorch中使用weight—decay超參數(shù)作為λ進行權重參數(shù)懲罰.
(3)
Lweight=0.5λ·L2.
(4)
在模型的層與層之間使用激活函數(shù),增加模型的非線性表征能力.sigmoid和ReLU的表達式如公式(5)和公式(6)所示.
(5)
(6)
圖 1展示了sigmoid函數(shù)和ReLU函數(shù)的原函數(shù)和導函數(shù)圖像.傳統(tǒng)的sigmoid函數(shù)兩邊導數(shù)值較小,當激活函數(shù)的梯度小于1時,在反向傳播時可能會因網(wǎng)絡層數(shù)過多會引起梯度彌散導致其越來越小,傳送到足夠深的層數(shù)時,該層的權重值由于梯度過小,幾乎不會發(fā)生改變,增加訓練輪數(shù)時模型性能不會得到明顯的改進.而ReLU函數(shù)能在一定程度上克服傳統(tǒng)sigmoid激活函數(shù)的梯度彌散問題.ReLU激活函數(shù)在輸入大于0時,直接輸出該值,在輸入小于等于0時,一律按照0處理,同時其具有加快訓練速度的作用.對比sigmoid類函數(shù)主要變化是:單側抑制、相對寬闊的興奮邊界和稀疏激活性.
圖1 Sigmoid/ReLU激活函數(shù)及其導數(shù)圖像Fig.1 Sigmoid/ReLU activation functions and derivative graphs
ReLU函數(shù)輸入值為負時,輸出始終為0,其一階導數(shù)也始終為0,導致神經(jīng)元不能更新參數(shù).為了解決ReLU函數(shù)這個缺點,在ReLU函數(shù)的負半?yún)^(qū)間引入Leaky值,稱為Leaky—ReLU函數(shù),其函數(shù)表達式如公式(7)所示.相比ReLU函數(shù),Leaky—ReLU的導數(shù)值總是不為0,減少了靜默神經(jīng)元的出現(xiàn),所有的神經(jīng)元都會參與學習過程.相比Leaky—ReLU,ELU激活函數(shù)的單元激活均值可以更接近0,類似于Batch Normalization的效果,但是只需要更低的計算復雜度.雖然Leaky—ReLU函數(shù)也有負值部分,但是不保證在輸入為負的情況下能夠抵抗噪聲干擾.反觀ELU在輸入小值時具有軟飽和的特性,該特性能夠提升對噪聲的魯棒性.ELU的激活函數(shù)如公式(8)所示.
(7)
(8)
MushroomNet模型的參數(shù)信息如表 1所示,模型結構如圖2所示.每一個卷積塊都包括卷積層和池化層,卷積層結束之后使用池化層進行特征壓縮.模型從小到大可以分為Micro(微型)、Slim(小型)、Middle(中型)、Large(大型).Micro模型只有一個卷積塊,模型規(guī)模每提升一級,多一個卷積塊且通道數(shù)翻倍.在輸入數(shù)據(jù)上,Micro模型和Slim模型輸入64×64像素的圖片,中型和大型模型輸入100×100像素的圖片數(shù)據(jù).
圖2 MushroomNet 結構框架Fig.2 MushroomNet frameworks
表1 MushroomNet模型結構參數(shù)信息Tab.1 MushroomNet model structures parameters
在所有MushroomNet模型中,第1個卷積塊遵循VGG設計思想,連續(xù)使用2個3×3像素的卷積層,第一個卷積層將通道數(shù)由3提升至32,第2個卷積層保持通道數(shù)不變.隨后的每一個卷積塊,均把通道數(shù)翻倍.在全連接層中根據(jù)通道數(shù)進行設計,經(jīng)過1個全連接層通道數(shù)減半.從圖片輸入到輸出一共要經(jīng)過3次下采樣,由于小模型層數(shù)較少,在卷積層中使用無邊緣填充的降尺度卷積.
為了比較模型各部分對于分類的重要程度,選擇2.4節(jié)所述的Micro模型再次進行修改,以模型各部分的功能作為修改依據(jù).首先卷積層用于特征提取,特征的復雜程度決定了卷積層的規(guī)模,若圖像特征較多也應設置更多卷積核和卷積層,以便于從多尺度更加精細地提取特征.其次池化層用于特征壓縮,將指定區(qū)域(感受野)內(nèi)的特征簡化并減小圖像尺寸,使得模型開始關注更高級的語義特征.最后全連接層用于特征分類,通過神經(jīng)元的前向計算以輸出類別向量,取最大分量作為最終預測類別.
本文嘗試以下4種Micro模型的修改方案,在Larger FC中使用更多全連接層神經(jīng)元增強分類能力;在More channels中加入更多通道數(shù)增強模型表征能力;在Clip1和Clip2中減少卷積,并使用更大的Stride以驗證卷積對特征提取的貢獻和引起的模型代價.修改后的Micro模型結構參數(shù)見表 2.本文模型和現(xiàn)有一些模型分類精度和效率對比參考實驗3.3節(jié)和實驗3.4節(jié).同時還比較了幾個激活函數(shù)對模型性能的影響,分別在網(wǎng)絡每層之間引入ReLU函數(shù)、Leaky—ReLU函數(shù)和ELU函數(shù),具體實驗結果見3.5節(jié).
表2 修改后的Micro模型結構Tab.2 Altered Micro model structures
積分梯度法[29]是Sundararajan等于2017年提出的,類似的技術還有Grad-CAM顯著性特征圖可視化[30].顯著性特征圖的輸出結果呈現(xiàn)團塊狀,而積分梯度輸出結果呈現(xiàn)點狀,有利于觀察紋理信息對于分類的作用,因此本文選擇積分梯度,該方法可以在保證敏感性、完整性和實現(xiàn)不變性的基礎上,增強模型可解釋性.
(9)
(2)完整性原則.完整性是指輸入各分量的歸因,求和之后等于最終模型預測改變量.同時模型最終預測,是一個量變引起質(zhì)變的過程,是輸入圖像各像素共同作用的結果.在本文對分類器的歸因任務中,檢查了蘑菇圖像相對于基線改變的歸因,可以直觀地根據(jù)歸因圖的區(qū)域亮度判定蘑菇各部分對于最終分類的影響.如公式(10)所示,所有像素點的積分累計后,即為輸出的改變量.
(10)
(3)實現(xiàn)無關性原則.積分梯度方法的歸因結果只跟輸入和輸出有關,和具體網(wǎng)絡實現(xiàn)無關.若具備相同的輸入和輸出,歸因結果是一致的,本文中選擇積分梯度方法,因為它能排除底層網(wǎng)絡實現(xiàn)對歸因結果的干擾,直接根據(jù)輸入和輸出獲得正確的歸因圖.
本實驗基于PyTorch實現(xiàn),使用NVIDIA GTX2080TI訓練模型,訓練過程中使用Adam優(yōu)化器,正則化參數(shù)設置為0.000 1,學習率設置為0.001,dropout設置為0.5,batch—size為64,epoch設置為30輪.模型性能評價指標使用模型精度ACC和交叉熵損失cross—entropy—loss.
在互聯(lián)網(wǎng)上爬取圖片制作蘑菇數(shù)據(jù)集,先篩選和裁剪處理獲得蘑菇圖片2 250張(9類×250張),隨后使用旋轉、對比度調(diào)整等方法以擴充數(shù)據(jù)集至4 500(9類×500張),最后進行圖像尺寸變換以適應特征提取網(wǎng)絡的輸入大小,數(shù)據(jù)集相關信息如表 3所示,數(shù)據(jù)集中圖片樣例如圖 3所示.劃分訓練集和驗證集時按類別8∶2進行隨機劃分,即訓練集為3 600張圖片(9類×400張),驗證集為900張圖片(9類×100張).
表3 數(shù)據(jù)集信息Tab.3 Datasets information
圖3 數(shù)據(jù)集(Mushroom-LQ)展示Fig.3 Dataset (Mushroom-LQ) display
實驗結果如表4所示,數(shù)據(jù)取第30輪.在MushroomNet系列模型中,模型結構越復雜識別精度越高,從Micro模型到Slim模型提升最明顯(50%至77%),而Middle模型精度到達86%之后,增大模型規(guī)模帶來的性能提升逐漸變小(Large模型:88%),且增大模型規(guī)模帶來的代價是極高的.相比Large模型,VGG11的訓練時間多了528 s,且參數(shù)量多了480.7 M,然而驗證精度卻持平.因此有必要研究模型各組件對精度提升帶來的影響,實現(xiàn)有規(guī)則地構建特征提取模型.
表4 模型性能和效率Tab.4 Model performance and efficiency
以Micro模型作為baseline,探討模型各部分對分類精度和效率的影響.數(shù)據(jù)集使用64×64像素低分辨率的Mushroom—LQ,其余設置參照3.1節(jié),實驗結果如表 5所示,接下來從分類精度和訓練和存儲效率方面對結果進行分析.
(1)分類精度.增加全連接層的神經(jīng)元(Larger FC)使得模型驗證精度提升明顯(0.50→0.88),因為Baseline中全連接層神經(jīng)元較少,無法在全連接層有效地進行模型表征,導致分類能力較差.增加通道數(shù)(More channels)對于精度影響極小(0.50→0.53),因為低分辨的蘑菇數(shù)據(jù)集較簡單,無需更多卷積核進行表征.減少1層卷積(Clip1)導致精度下降(0.50→0.48),而完全去除卷積(Clip2)影響較大(0.50→0.39),說明在Baseline中1層卷積提取到的特征已經(jīng)接近飽和.
(2)訓練和存儲效率.全連接層中引入更多神經(jīng)元(Larger FC),會使模型性能顯著提升(0.50→0.88),引入了更多的參數(shù)(189.3 K→1.3 M),但模型訓練時間略微增長(41 s→42 s,因為GTX2080TI有Cuda加速,差距較小,在ARM平臺差距會拉大).在特征較為簡單的蘑菇圖像中,更多通道(More channels)并不會帶來更好的模型性能表現(xiàn),但是會引入額外的參數(shù)量(189.3 K→396.4 K),實驗只采用了64的通道數(shù),參數(shù)量相比基準Micro模型上升207.1 K,而3.3節(jié)實驗中的Large模型還增加了2層128和256的通道數(shù),模型參數(shù)量直達10.7 M,同時更多通道也會帶來訓練時間的提升,通道數(shù)越多,提升越明顯.更多的卷積層沒有帶來更強的性能,參照Micro+Larger FC和3.3節(jié)實驗中的Large模型,反而訓練時間(41 s→99 s)和參數(shù)量(1.3 M→10.7 M)提高了許多,相反更少的卷積層擁有更低的參數(shù)量(152.7 K和18.3 K)和更快的訓練時間(41 s和39 s).
綜合表 4和表 5,Micro+Larger FC是這些模型中兼具精度(0.88)、訓練速度(41 s)和低存儲(1.3 M)的模型,本文將用它繼續(xù)后面的實驗并稱其為MicroV2模型.
表5 模型消融實驗結果Tab.5 Model ablation study results
使用3.4節(jié)MicroV2模型,在3.1節(jié)Mushroom—LQ數(shù)據(jù)集上做測試.實驗結果如表 6所示,使用ReLU激活函數(shù)的改進版本,模型訓練誤差和驗證誤差變低,而精度和訓練時間并無明顯變化.
表6 MicroV2模型的激活函數(shù)比較Tab.6 Activation functions comparison in MicroV2 model
使用3.4節(jié)MicroV2模型,在3.1節(jié)4種數(shù)據(jù)集上做測試.全連接層前加入了AvgPool,因此無需考慮特征網(wǎng)絡和全連接層向量對齊問題,即此時的MicroV2模型適合3.1節(jié)所述的各種尺寸的數(shù)據(jù)集.實驗結果如表 7所示,HQ數(shù)據(jù)集上訓練時間長而精度略低,因為MicroV2模型卷積層較簡單,無法提取高分辨圖像中的復雜特征(尤其是紋理信息),MQ和LQ精度差距不大(0.01),但是時間相差32 s.half—LQ比LQ精度降低了0.10,說明數(shù)據(jù)增強的重要性.
表7 MicroV2模型在各數(shù)據(jù)集上的表現(xiàn)Tab.7 MicroV2 model performance in various datasets
使用梯度歸因技術輸出MicroV2模型在分類各種蘑菇時的可視化歸因圖,歸因結果見圖 4,一幅原圖對應一幅歸因圖像.歸因圖中某區(qū)域的綠色越亮,表示該區(qū)域在分類中起到的作用越明顯.從歸因結果可以看出,在本文數(shù)據(jù)集上訓練的卷積模型能夠正常學習到蘑菇的特征,同時在分類時,優(yōu)先考慮傘蓋特征,只有在傘蓋特征相比傘柄不明顯(杏鮑菇、金針菇的傘蓋很小,黃牛肝菌傘柄顏色鮮艷)時,才會考慮使用傘柄作為主要特征分類.
圖4 模型分類結果和歸因圖Fig.4 Model classification results and attribution images
將3.4節(jié)實驗中的MicroV2模型和Mushroom—LQ數(shù)據(jù)集遷移到PC平臺和嵌入式平臺,測試其性能以及訓練時間.由表 8可知,本文設計的MicroV2模型不僅能在配備有NVIDIA GTX2080TI的服務器上快速訓練,也能在MacBook等設備上得到可接受的訓練時間(143 s)和精度(88%),甚至在嵌入式設備(RK3399)上也能以3 029 s的時間完成訓練.綜上所述,MicroV2模型實現(xiàn)了低成本和靈活的模型訓練.
表8 MicroV2在各平臺的精度和效率測試Tab.8 Accuracy and efficiency testing of MicroV2 on various platforms
本文基于蘑菇數(shù)據(jù)集提出一種兼顧效率和性能的MushroomNet-MicroV2模型,相比傳統(tǒng)大型模型,該模型能夠在可接受的精度誤差下實現(xiàn)快速訓練(Apple M1:142 s),并極大程度減少參數(shù)量(1.3 M).在Mushroom—LQ數(shù)據(jù)集上達到了88%左右的準確度.同時通過消融實驗,比較了網(wǎng)絡模塊和數(shù)據(jù)集對模型精度帶來的影響,說明在小數(shù)據(jù)的場景下,提高性能的最佳方式是增加全連接層的連接節(jié)點數(shù)以及使用數(shù)據(jù)增強方式擴充數(shù)據(jù)集.從效率和成本考慮,在實際應用場景中,應根據(jù)數(shù)據(jù)特征和復雜度選擇合適大小的模型.
未來的工作將從分類精度的角度出發(fā),可在原有的基礎之上擴大數(shù)據(jù)集,在數(shù)據(jù)集中加入一些蘑菇局部特征的圖片,引導模型學習.還可以依據(jù)模型在每一種類蘑菇的數(shù)據(jù)集上的表現(xiàn),來調(diào)整數(shù)據(jù)集的選取,對于數(shù)據(jù)集的預處理可以更加多樣化,讓分類精度進一步提高.從模型效率的角度出發(fā),引入一些其他模型加速策略(例如遷移學習),或是從內(nèi)部模塊上簡化模型計算(例如深度可分離卷積).