王江晴,冀星,莫海芳,帖軍,劉暢
(1. 中南民族大學計算機科學學院,武漢市,430074;2. 湖北省制造企業(yè)智能管理工程技術(shù)研究中心,武漢市,430074)
植物病蟲害是農(nóng)產(chǎn)品質(zhì)量、產(chǎn)量下降和農(nóng)業(yè)經(jīng)濟損失的主要原因之一[1]。由于植物病蟲害種類繁多,人工判斷受主觀因素影響,很容易造成誤判,因此尋找準確快速識別病蟲害的方法,是避免損失、提高產(chǎn)量的關鍵。
近年來,卷積神經(jīng)網(wǎng)絡(Convolutional Neural Networks,CNN)[2]在圖像識別中獲得了極大的成功,其可以自動提取特征,實現(xiàn)了端到端的訓練,因此很多人使用卷積神經(jīng)網(wǎng)絡來解決植物病蟲害的識別問題。目前,常見的卷積神經(jīng)網(wǎng)絡是AlexNet[3],InceptionNet[4]和ResNet[5]等。Drumus等[6]使用PlantVillage數(shù)據(jù)集的番茄圖像進行訓練,在AlexNet上和SqueezeNet[7]上的準確率高于原模型。Lü等[8]在Alexnet中加入膨脹卷積和多尺度卷積,提取復雜環(huán)境下玉米葉片的特征,同時使用批量標準化防止網(wǎng)絡過擬合。王國偉等[9]使用LeNet模型對玉米病害進行識別,并用Adam算法進行學習率動態(tài)調(diào)整來優(yōu)化模型。李鑫然等[10]采用特征金字塔網(wǎng)絡[11]融合淺層的細節(jié)信息特征和深層的具有語義信息的特征,避免對蘋果葉片病害造成的像素偏差。Zhang等[12]使用EfficientNet[13]構(gòu)建黃瓜病害識別模型,并進行遷移學習,解決了病害識別中樣本不足的問題。肖經(jīng)緯等[14]降低ResNet卷積層數(shù)與卷積核數(shù)來精簡網(wǎng)絡參數(shù),再利用類間相似懲罰項解決相似樣本區(qū)分度低的問題。
雖然這些模型取得了較高的準確率,但參數(shù)量過大,不適合部署在微算力的移動端和嵌入式設備上。而實現(xiàn)識別模型在移動端和嵌入式設備上的部署,有助于幫助病蟲害識別算法走出實驗室,實現(xiàn)在復雜環(huán)境下的應用。因此,對VGG16模型進行改進,提高網(wǎng)絡模型的準確率并降低參數(shù)量。
VGG是一個經(jīng)典的深度神經(jīng)網(wǎng)絡模型,它探索了神經(jīng)網(wǎng)絡深度對其準確率的影響[15]。與最新的網(wǎng)絡結(jié)構(gòu)相比,VGG16的結(jié)構(gòu)簡單、沒有復雜的瓶頸結(jié)構(gòu),模型中只包含非常小(3×3)的卷積濾波器,如圖1所示,VGG16共有13層卷積層、4層最大池化層、3層全連接層和激活函數(shù),依然取得了優(yōu)越的成績,在ILSVRC 2014提交的成績中TOP5錯誤率僅為7.3%。但是VGG16整個網(wǎng)絡的參數(shù)量約為14 728 266,模型總共需要的浮點數(shù)計算次數(shù)(Floating Point of Operations,F(xiàn)LOPs)為313 M。眾多的參數(shù)使得VGG16網(wǎng)絡具有很高的擬合能力,同時也使得VGG16網(wǎng)絡需要訓練的時間過長,調(diào)參難度大。
圖1 VGG16各層特征圖大小Fig. 1 Feature map size of VGG16 layers
近幾年,一些學者提出了提高VGG效率的有效改進方法。主要包括通過剪枝和量化進行模型壓縮,減小網(wǎng)絡規(guī)模。Han等[16]對模型中的小型連接進行修改,將所有權(quán)重低于閾值的連接從網(wǎng)絡中刪除,然后對網(wǎng)絡進行重新訓練,將AlexNet和VGG16網(wǎng)絡模型的參數(shù)數(shù)量分別減少了9倍和13倍。蒲秀夫等[17]將VGG16模型的權(quán)值進行二值化,得到的模型達到原模型近兩倍的計算速度。
輕量化模型追求實現(xiàn)更高效的網(wǎng)絡計算方式,比如需要更少計算量的卷積方式。SqueezeNet為了降低模型參數(shù),用1×1的卷積核來替換3×3的卷積核。MobileNet[18]引入了深度可分離卷積,將常規(guī)卷積分為兩步,先對輸入特征圖的每個通道進行按位相乘,再使用1×1的卷積核進行常規(guī)卷積運算,得到n張?zhí)卣鲌D,降低了參數(shù)量。ShuffleNet[19]將輸入層的不同特征圖進行分組,然后采用不同的卷積核對各個組進行卷積,以此降低卷積的計算量。
雖然這些模型降低了參數(shù)量并取得了較高準確率,但在實際應用中表現(xiàn)仍不理想,并且很少被應用在植物病蟲害識別上,因此本文將輕量化技術(shù)用于解決植物病蟲害識別問題,獲得的最終模型參數(shù)量為0.41 M。
為了降低VGG16的浮點運算次數(shù)FLOPs,同時保證網(wǎng)絡模型的準確率,本文對VGG16的網(wǎng)絡結(jié)構(gòu)做出了改變。
深度神經(jīng)網(wǎng)絡中包含大量的卷積核,產(chǎn)生巨大的計算開銷,卷積層的輸出特征圖通常包括很多冗余或者相似的特征圖,沒有必要使用大量的參數(shù)和FLOPs生成這些冗余特征圖。本文使用Han等[20]提出的Ghost模塊來替換VGG16中的卷積。將深度神經(jīng)網(wǎng)絡中的卷積操作分為兩步,先使用普通卷積生成一部分特征圖,然后對這些特征圖進行線性變換,得到更多特征圖。與普通卷積神經(jīng)網(wǎng)絡相比,在不更改輸出特征圖大小的情況下,該網(wǎng)絡所需的參數(shù)量減少了50%,獲得了良好的模型性能,該模塊結(jié)構(gòu)如圖2所示。
圖2 Ghost模塊結(jié)構(gòu)Fig. 2 Structure of Ghost module
首先,假設第一部分普通卷積過程的輸入為X∈Rc×h×w,其中c為輸入通道數(shù),h和w分別為輸入數(shù)據(jù)的高和寬,生成m個特征圖的卷積操作過程見式(1)。
Y=X*f
(1)
式中:*——普通的卷積操作;
Y——輸出特征圖,通道數(shù)為m,高和寬分別為h′和w′;
f——卷積濾波器,卷積核大小為k×k。
在第二部分的線性變換中,本文使用卷積對Y中的每一個特征圖進行s次線性變換,線性運算用到的卷積核大小可以為3×3或5×5,最終得到n=m×s個特征圖,特征圖的高和寬仍然保持不變,該過程見式(2)。
yi,j=Φi,j(yi),?i=1,…,m,j=1,…,s
(2)
式中:yi——Y中的第i個特征;
yi,j——線性變換yi后得到的第j個特征圖;
Φi,j——對yi進行的第j個線性操作;
Φs——恒等映射,用于保留第一部分生成的m個特征圖。
VGG16網(wǎng)絡中使用了大量3×3的卷積核,其中包含了一些冗余的卷積核,這些卷積核會產(chǎn)生一些重復或極其相似的特征圖,因此可以對卷積網(wǎng)絡的卷積核進行適當?shù)男藜?,且不會顯著降低網(wǎng)絡模型的性能。
圖3顯示了VGG中每層卷積層的參數(shù)量和內(nèi)存占用情況,每經(jīng)過一個最大池化層,特征圖的寬和高會變?yōu)橹暗?/2,因此模型中前期的內(nèi)存消耗大于后期。從圖1可以看出,在模型后期的卷積操作中,特征圖的寬度和長度逐漸減小,但通道數(shù)一直增大。假設某卷積層輸入通道數(shù)為c,輸出特征圖通道數(shù)為m,卷積核大小為k×k,該卷積層的參數(shù)量見式(3)。
P(k,c,m)=k×k×c×m
(3)
在后期的卷積層中,來自上層輸入的特征圖和本層輸出的特征圖通道數(shù)都逐漸增大,會使得模型后期的參數(shù)量發(fā)生激增,在此時減少卷積核個數(shù)可以更明顯抑制通道數(shù)增長引起的參數(shù)量激增。
(a) 參數(shù)量變化示意圖
(b) 占用內(nèi)存變化示意圖圖3 VGG16各層參數(shù)量、占用內(nèi)存示意圖Fig. 3 Schematic diagram of the amount of parameters and memory occupied by each layer of VGG16
探索了減少不同層卷積核個數(shù)與模型的準確率和計算量之間的關系,發(fā)現(xiàn)減少模型后期的卷積核個數(shù),對準確率造成的損失更小。把模型第5~7和8~10層卷積核個數(shù)減半,分別設置為128和256,最終得到的模型FLOPs為172.72 M,再使用Ghost模塊后為88.45 M;而把模型第1~4層卷積核減半,得到的FLOPs為232.89 M,再使用Ghost模塊為118 M。
通過減少網(wǎng)絡的卷積核個數(shù)雖然可以減少參數(shù)量,但同時導致每層產(chǎn)生的特征圖個數(shù)減少,引起網(wǎng)絡的表達能力下降,為此,需要尋找提高網(wǎng)絡模型表達能力的方法。本文嘗試了對預訓練得到的權(quán)重值進行聚類,賦值給模型的第一層卷積核,在試驗結(jié)果中,模型的準確率得到了大幅度上升,但預訓練的開銷與訓練的開銷相同,不符合構(gòu)建輕量化網(wǎng)絡的目的。
本文還嘗試用Ranger優(yōu)化器來替換VGG16的隨機梯度下降(SGD)。隨機梯度下降是當前神經(jīng)網(wǎng)絡中使用最為廣泛的優(yōu)化算法之一,但該算法訓練速度慢,同時很容易使模型陷入局部最優(yōu)解中。在植物病蟲害識別應用上,希望模型具有較好的泛化能力和更快的訓練速度,為了實現(xiàn)上述目標,本文引入了Ranger優(yōu)化器[21],該優(yōu)化器在訓練過程中動態(tài)調(diào)整學習率,使模型獲得更高的收斂速率。
在模型的訓練過程中,使用兩組權(quán)重值:慢速權(quán)重φ和快速權(quán)重θ,快速權(quán)重每更新k次后,更新一次慢速權(quán)重,然后將快速權(quán)重重置為當前慢速權(quán)重值。在快速權(quán)重θ的更新過程中,使用了RAdam優(yōu)化器[22]進行更新,實現(xiàn)學習率的動態(tài)調(diào)整,在模型訓練早期,由于缺乏訓練樣本,常常會得到不太好的局部最優(yōu)解,可以通過降低學習率的方差來彌補這個缺陷。為了使學習率具有一致的方差,引入?yún)?shù)r對第t輪的學習率進行校正,第t輪的r計算方式見式(4),當ρt≤4或ρ∞≤4時,該算法退化為帶動量的SGD算法。
(4)
式中:ρt——第t輪的SMA長度;
ρ∞——SMA的最大長度;
rt——第t輪的整流項。
由式(5)計算出簡單移動平均線(Simple Moving Average,SMA)的最大長度。
(5)
式中:β2——二階動量衰減率。
第t輪的SMA長度見式(6)。
(6)
圖4為改進后的輕量化VGG網(wǎng)絡模型結(jié)構(gòu),模型中每層卷積使用Ghost模塊替換,卷積核的大小為3×3,并保留了VGG16中的池化層和softmax層用于輸出最后的分類結(jié)果,各卷積層輸出特征圖通道數(shù)如表1所示,在模型的5~10層進行了卷積核減半操作,并引入了Ranger優(yōu)化器。
圖4 模型結(jié)構(gòu)Fig. 4 Structure of the model proposed
表1 各卷積層輸出特征圖通道數(shù)Tab. 1 Number of output feature map channels for each convolutional layer
圖5展示了試驗中使用的圖片,尺寸為224像素×224像素的RGB彩色圖像,使用的數(shù)據(jù)集為公開的PlantVillage植物病蟲害數(shù)據(jù)集,包括辣椒健康葉1 477張、辣椒細菌性斑點病997張、土豆健康葉152張、土豆早疫病1 000張、土豆晚疫病1 000張、番茄輪斑病835張、番茄花葉病373張、番茄黃曲病3 209張、番茄細菌性斑點病2 127張、番茄早疫病1 000張,總共為12 739張圖像,為了增加訓練集的數(shù)據(jù),訓練時按照9∶1的比例劃分訓練集和測試集。初始學習率設定為0.1,批量大小設定為128,迭代次數(shù)為100次,Ghost模塊的超參數(shù)s設置為2,該網(wǎng)絡模型在Pytorch框架下進行。
圖5 PlantVillage部分圖片F(xiàn)ig. 5 Images of PlantVillage
3.2.1 減少各層卷積核的結(jié)果比較
為分析減少的卷積核個數(shù)對模型準確率的影響,將8~10層卷積層的卷積核個數(shù)分別減少25%、50%、75%,因為這部分卷積層被兩個最大池化層隔開,而且卷積核個數(shù)較多。圖6為減少不同的卷積核個數(shù)對模型計算次數(shù)的影響,由于卷積核減少有利于實現(xiàn)輕量化,但卷積核過少時準確率出現(xiàn)明顯下降,后續(xù)試驗中使用卷積核減半策略。
圖6 減少不同卷積核個數(shù)得到的FLOPsFig. 6 FLOPs of reducing different convolution kernels number
進行4組對比試驗,嘗試對VGG16的不同層的卷積核個數(shù)進行減半,模型采用交叉熵損失函數(shù)計算損失值。試驗中,把最大池化層隔開的卷積層看作一個整體,分階段進行減半操作。在A組試驗中,把VGG16的第1~4卷積層卷積核個數(shù)減少一半,其他層不變;B組試驗把第3~7卷積層卷積核個數(shù)減少一半,其他層不變;C組試驗把第5~10卷積層卷積核個數(shù)減少一半,其他層不變;D組試驗把第8~13卷積層卷積核個數(shù)減少一半,其他層不變。模型的準確率、FLOPs和參數(shù)量的變化情況如表2所示。最終,本文選用了FLOPs最低的一組(C組),即在VGG16的第5~10層卷積層中將卷積核進行減半。
表2 各組試驗的結(jié)果對比Tab. 2 Results comparison of each experiments
3.2.2 VGG16與本文模型試驗結(jié)果比較
在減少卷積核的基礎上,加入Ghost模塊和Ranger優(yōu)化器,構(gòu)成最終的網(wǎng)絡模型。為了驗證本文改進后VGG16網(wǎng)絡的性能,本文將改進后的VGG16網(wǎng)絡模型與傳統(tǒng)的VGG16、使用Ghost模塊替換VGG16中的卷積層的網(wǎng)絡(表3中的Ghost-VGG16)進行對比,模型損失函數(shù)均為交叉熵損失函數(shù),試驗結(jié)果從FLOPs、測試集的準確率和參數(shù)量、識別時間四個方面進行比較。
與傳統(tǒng)的VGG16相比,該模型結(jié)構(gòu)參數(shù)量減少了72.37%,模型需要的浮點運算次數(shù)FLOPs下降了71.86%,識別時間縮短25.8%,而準確率提高了0.24%,說明該模型實現(xiàn)了VGG16的輕量化,同時也輕微提高模型的準確率,這也證明VGG16中存在大量冗余的卷積核,這些冗余的卷積核增加不必要的計算開銷。表4為不同模型在測試集上對不同病蟲害的識別準確率和識別時間。
表3 PlantVillage數(shù)據(jù)集識別結(jié)果對比Tab. 3 Comparison of identification results on PlantVillage dataset
表4 不同病蟲害識別結(jié)果Tab. 4 Identification results of different diseases
在Ghost-VGG16中,僅僅用Ghost模塊替換了VGG16網(wǎng)絡中的卷積層,分析試驗結(jié)果可以得出,本文提出的方法參數(shù)量更小,準確率更高,而且從圖7可以看出本文提出的方法在模型訓練的過程中更快地達到了收斂。這是因為Ranger優(yōu)化器根據(jù)每一輪的訓練情況實時調(diào)整學習率,使模型獲得更高的收斂速度。
為了驗證模型在圖像分類問題上的適用性,在同樣的試驗環(huán)境下在Cifar10數(shù)據(jù)集驗證,該數(shù)據(jù)集由60 000張大小為32像素×32像素的RGB圖片組成,包含10個分類,其中訓練集包含50 000張圖片,測試集包含10 000張圖片。從表5中的試驗結(jié)果可以看出,本文提出的模型在Cifar10上仍然取得了較高的準確率,而且參數(shù)量和計算次數(shù)更少,識別時間比VGG16減少了37.37%。
表5 Cifar10數(shù)據(jù)集識別結(jié)果對比Tab. 5 Comparison of identification results on Cifar10 dataset
(a) 模型的準確率比較
(b) 交叉熵損失值比較圖7 準確率和損失值變化比較Fig. 7 Comparison of accuracy and loss value changes
3.2.3 復雜環(huán)境下的識別結(jié)果
為了測試本文提出的模型在復雜情況下識別準確率,構(gòu)建了包含17 591張RGB圖片的數(shù)據(jù)集,圖像大小為224像素×224像素,均拍攝于自然光照下,圖8給出了部分圖像示例。
圖8 復雜環(huán)境下圖像示例Fig. 8 Images of complex environment
其中包含蘋果酒銹病1 662張、蘋果蛙眼斑病2 814張、蘋果健康葉4 138張、蘋果白粉病1 041張、蘋果瘡痂病4 311張、柑橘健康葉101張、柑橘潰瘍病2 130張、咖啡健康葉712張、咖啡紅蜘蛛螨病151張、咖啡葉銹病542張,訓練集與測試集仍然按照9∶1的比例劃分。表6為本文模型與其他模型在測試集上的對比結(jié)果,從表6可以看出本文提出的模型在復雜環(huán)境下仍然取得了較高的準確率,識別時間卻僅為VGG16耗時的50%,模型需要的計算量和參數(shù)量也更少,更適合部署在微算力的嵌入式設備上。
表6 不同方法在復雜環(huán)境下的識別結(jié)果Tab. 6 Identification results of different models based on complex environment
1) 針對VGG16網(wǎng)絡模型的參數(shù)量大,計算開銷大等問題,提出了一種基于VGG的輕量化網(wǎng)絡模型。該方法首先使用Ghost模塊替換VGG16中的卷積層,再對卷積層中的卷積核進行修剪,最后使用Ranger優(yōu)化器提高模型的準確率。
2) 本文提出的改進在植物病蟲害識別中具有明顯優(yōu)勢,在PlantVillage上的準確率達到99.37%,而FLOPs比VGG16網(wǎng)絡減少了71.86%,識別時間也更少。
3) 改進后的模型在復雜環(huán)境下識別準確率為92.4%,還有待提高,因此下一步將考慮去除雜草或其他葉片的遮擋、光照等因素的影響,對網(wǎng)絡結(jié)構(gòu)進一步優(yōu)化,提高網(wǎng)絡模型的泛化能力。