王江晴,冀星,莫海芳,帖軍,劉暢
(1. 中南民族大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,武漢市,430074;2. 湖北省制造企業(yè)智能管理工程技術(shù)研究中心,武漢市,430074)
植物病蟲害是農(nóng)產(chǎn)品質(zhì)量、產(chǎn)量下降和農(nóng)業(yè)經(jīng)濟(jì)損失的主要原因之一[1]。由于植物病蟲害種類繁多,人工判斷受主觀因素影響,很容易造成誤判,因此尋找準(zhǔn)確快速識別病蟲害的方法,是避免損失、提高產(chǎn)量的關(guān)鍵。
近年來,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)[2]在圖像識別中獲得了極大的成功,其可以自動提取特征,實(shí)現(xiàn)了端到端的訓(xùn)練,因此很多人使用卷積神經(jīng)網(wǎng)絡(luò)來解決植物病蟲害的識別問題。目前,常見的卷積神經(jīng)網(wǎng)絡(luò)是AlexNet[3],InceptionNet[4]和ResNet[5]等。Drumus等[6]使用PlantVillage數(shù)據(jù)集的番茄圖像進(jìn)行訓(xùn)練,在AlexNet上和SqueezeNet[7]上的準(zhǔn)確率高于原模型。Lü等[8]在Alexnet中加入膨脹卷積和多尺度卷積,提取復(fù)雜環(huán)境下玉米葉片的特征,同時(shí)使用批量標(biāo)準(zhǔn)化防止網(wǎng)絡(luò)過擬合。王國偉等[9]使用LeNet模型對玉米病害進(jìn)行識別,并用Adam算法進(jìn)行學(xué)習(xí)率動態(tài)調(diào)整來優(yōu)化模型。李鑫然等[10]采用特征金字塔網(wǎng)絡(luò)[11]融合淺層的細(xì)節(jié)信息特征和深層的具有語義信息的特征,避免對蘋果葉片病害造成的像素偏差。Zhang等[12]使用EfficientNet[13]構(gòu)建黃瓜病害識別模型,并進(jìn)行遷移學(xué)習(xí),解決了病害識別中樣本不足的問題。肖經(jīng)緯等[14]降低ResNet卷積層數(shù)與卷積核數(shù)來精簡網(wǎng)絡(luò)參數(shù),再利用類間相似懲罰項(xiàng)解決相似樣本區(qū)分度低的問題。
雖然這些模型取得了較高的準(zhǔn)確率,但參數(shù)量過大,不適合部署在微算力的移動端和嵌入式設(shè)備上。而實(shí)現(xiàn)識別模型在移動端和嵌入式設(shè)備上的部署,有助于幫助病蟲害識別算法走出實(shí)驗(yàn)室,實(shí)現(xiàn)在復(fù)雜環(huán)境下的應(yīng)用。因此,對VGG16模型進(jìn)行改進(jìn),提高網(wǎng)絡(luò)模型的準(zhǔn)確率并降低參數(shù)量。
VGG是一個(gè)經(jīng)典的深度神經(jīng)網(wǎng)絡(luò)模型,它探索了神經(jīng)網(wǎng)絡(luò)深度對其準(zhǔn)確率的影響[15]。與最新的網(wǎng)絡(luò)結(jié)構(gòu)相比,VGG16的結(jié)構(gòu)簡單、沒有復(fù)雜的瓶頸結(jié)構(gòu),模型中只包含非常小(3×3)的卷積濾波器,如圖1所示,VGG16共有13層卷積層、4層最大池化層、3層全連接層和激活函數(shù),依然取得了優(yōu)越的成績,在ILSVRC 2014提交的成績中TOP5錯(cuò)誤率僅為7.3%。但是VGG16整個(gè)網(wǎng)絡(luò)的參數(shù)量約為14 728 266,模型總共需要的浮點(diǎn)數(shù)計(jì)算次數(shù)(Floating Point of Operations,F(xiàn)LOPs)為313 M。眾多的參數(shù)使得VGG16網(wǎng)絡(luò)具有很高的擬合能力,同時(shí)也使得VGG16網(wǎng)絡(luò)需要訓(xùn)練的時(shí)間過長,調(diào)參難度大。

圖1 VGG16各層特征圖大小Fig. 1 Feature map size of VGG16 layers
近幾年,一些學(xué)者提出了提高VGG效率的有效改進(jìn)方法。主要包括通過剪枝和量化進(jìn)行模型壓縮,減小網(wǎng)絡(luò)規(guī)模。Han等[16]對模型中的小型連接進(jìn)行修改,將所有權(quán)重低于閾值的連接從網(wǎng)絡(luò)中刪除,然后對網(wǎng)絡(luò)進(jìn)行重新訓(xùn)練,將AlexNet和VGG16網(wǎng)絡(luò)模型的參數(shù)數(shù)量分別減少了9倍和13倍。蒲秀夫等[17]將VGG16模型的權(quán)值進(jìn)行二值化,得到的模型達(dá)到原模型近兩倍的計(jì)算速度。
輕量化模型追求實(shí)現(xiàn)更高效的網(wǎng)絡(luò)計(jì)算方式,比如需要更少計(jì)算量的卷積方式。SqueezeNet為了降低模型參數(shù),用1×1的卷積核來替換3×3的卷積核。MobileNet[18]引入了深度可分離卷積,將常規(guī)卷積分為兩步,先對輸入特征圖的每個(gè)通道進(jìn)行按位相乘,再使用1×1的卷積核進(jìn)行常規(guī)卷積運(yùn)算,得到n張?zhí)卣鲌D,降低了參數(shù)量。ShuffleNet[19]將輸入層的不同特征圖進(jìn)行分組,然后采用不同的卷積核對各個(gè)組進(jìn)行卷積,以此降低卷積的計(jì)算量。
雖然這些模型降低了參數(shù)量并取得了較高準(zhǔn)確率,但在實(shí)際應(yīng)用中表現(xiàn)仍不理想,并且很少被應(yīng)用在植物病蟲害識別上,因此本文將輕量化技術(shù)用于解決植物病蟲害識別問題,獲得的最終模型參數(shù)量為0.41 M。
為了降低VGG16的浮點(diǎn)運(yùn)算次數(shù)FLOPs,同時(shí)保證網(wǎng)絡(luò)模型的準(zhǔn)確率,本文對VGG16的網(wǎng)絡(luò)結(jié)構(gòu)做出了改變。
深度神經(jīng)網(wǎng)絡(luò)中包含大量的卷積核,產(chǎn)生巨大的計(jì)算開銷,卷積層的輸出特征圖通常包括很多冗余或者相似的特征圖,沒有必要使用大量的參數(shù)和FLOPs生成這些冗余特征圖。本文使用Han等[20]提出的Ghost模塊來替換VGG16中的卷積。將深度神經(jīng)網(wǎng)絡(luò)中的卷積操作分為兩步,先使用普通卷積生成一部分特征圖,然后對這些特征圖進(jìn)行線性變換,得到更多特征圖。與普通卷積神經(jīng)網(wǎng)絡(luò)相比,在不更改輸出特征圖大小的情況下,該網(wǎng)絡(luò)所需的參數(shù)量減少了50%,獲得了良好的模型性能,該模塊結(jié)構(gòu)如圖2所示。

圖2 Ghost模塊結(jié)構(gòu)Fig. 2 Structure of Ghost module
首先,假設(shè)第一部分普通卷積過程的輸入為X∈Rc×h×w,其中c為輸入通道數(shù),h和w分別為輸入數(shù)據(jù)的高和寬,生成m個(gè)特征圖的卷積操作過程見式(1)。
Y=X*f
(1)
式中:*——普通的卷積操作;
Y——輸出特征圖,通道數(shù)為m,高和寬分別為h′和w′;
f——卷積濾波器,卷積核大小為k×k。
在第二部分的線性變換中,本文使用卷積對Y中的每一個(gè)特征圖進(jìn)行s次線性變換,線性運(yùn)算用到的卷積核大小可以為3×3或5×5,最終得到n=m×s個(gè)特征圖,特征圖的高和寬仍然保持不變,該過程見式(2)。
yi,j=Φi,j(yi),?i=1,…,m,j=1,…,s
(2)
式中:yi——Y中的第i個(gè)特征;
yi,j——線性變換yi后得到的第j個(gè)特征圖;
Φi,j——對yi進(jìn)行的第j個(gè)線性操作;
Φs——恒等映射,用于保留第一部分生成的m個(gè)特征圖。
VGG16網(wǎng)絡(luò)中使用了大量3×3的卷積核,其中包含了一些冗余的卷積核,這些卷積核會產(chǎn)生一些重復(fù)或極其相似的特征圖,因此可以對卷積網(wǎng)絡(luò)的卷積核進(jìn)行適當(dāng)?shù)男藜簦也粫@著降低網(wǎng)絡(luò)模型的性能。
圖3顯示了VGG中每層卷積層的參數(shù)量和內(nèi)存占用情況,每經(jīng)過一個(gè)最大池化層,特征圖的寬和高會變?yōu)橹暗?/2,因此模型中前期的內(nèi)存消耗大于后期。從圖1可以看出,在模型后期的卷積操作中,特征圖的寬度和長度逐漸減小,但通道數(shù)一直增大。假設(shè)某卷積層輸入通道數(shù)為c,輸出特征圖通道數(shù)為m,卷積核大小為k×k,該卷積層的參數(shù)量見式(3)。
P(k,c,m)=k×k×c×m
(3)
在后期的卷積層中,來自上層輸入的特征圖和本層輸出的特征圖通道數(shù)都逐漸增大,會使得模型后期的參數(shù)量發(fā)生激增,在此時(shí)減少卷積核個(gè)數(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
探索了減少不同層卷積核個(gè)數(shù)與模型的準(zhǔn)確率和計(jì)算量之間的關(guān)系,發(fā)現(xiàn)減少模型后期的卷積核個(gè)數(shù),對準(zhǔn)確率造成的損失更小。把模型第5~7和8~10層卷積核個(gè)數(shù)減半,分別設(shè)置為128和256,最終得到的模型FLOPs為172.72 M,再使用Ghost模塊后為88.45 M;而把模型第1~4層卷積核減半,得到的FLOPs為232.89 M,再使用Ghost模塊為118 M。
通過減少網(wǎng)絡(luò)的卷積核個(gè)數(shù)雖然可以減少參數(shù)量,但同時(shí)導(dǎo)致每層產(chǎn)生的特征圖個(gè)數(shù)減少,引起網(wǎng)絡(luò)的表達(dá)能力下降,為此,需要尋找提高網(wǎng)絡(luò)模型表達(dá)能力的方法。本文嘗試了對預(yù)訓(xùn)練得到的權(quán)重值進(jìn)行聚類,賦值給模型的第一層卷積核,在試驗(yàn)結(jié)果中,模型的準(zhǔn)確率得到了大幅度上升,但預(yù)訓(xùn)練的開銷與訓(xùn)練的開銷相同,不符合構(gòu)建輕量化網(wǎng)絡(luò)的目的。
本文還嘗試用Ranger優(yōu)化器來替換VGG16的隨機(jī)梯度下降(SGD)。隨機(jī)梯度下降是當(dāng)前神經(jīng)網(wǎng)絡(luò)中使用最為廣泛的優(yōu)化算法之一,但該算法訓(xùn)練速度慢,同時(shí)很容易使模型陷入局部最優(yōu)解中。在植物病蟲害識別應(yīng)用上,希望模型具有較好的泛化能力和更快的訓(xùn)練速度,為了實(shí)現(xiàn)上述目標(biāo),本文引入了Ranger優(yōu)化器[21],該優(yōu)化器在訓(xùn)練過程中動態(tài)調(diào)整學(xué)習(xí)率,使模型獲得更高的收斂速率。
在模型的訓(xùn)練過程中,使用兩組權(quán)重值:慢速權(quán)重φ和快速權(quán)重θ,快速權(quán)重每更新k次后,更新一次慢速權(quán)重,然后將快速權(quán)重重置為當(dāng)前慢速權(quán)重值。在快速權(quán)重θ的更新過程中,使用了RAdam優(yōu)化器[22]進(jìn)行更新,實(shí)現(xiàn)學(xué)習(xí)率的動態(tài)調(diào)整,在模型訓(xùn)練早期,由于缺乏訓(xùn)練樣本,常常會得到不太好的局部最優(yōu)解,可以通過降低學(xué)習(xí)率的方差來彌補(bǔ)這個(gè)缺陷。為了使學(xué)習(xí)率具有一致的方差,引入?yún)?shù)r對第t輪的學(xué)習(xí)率進(jìn)行校正,第t輪的r計(jì)算方式見式(4),當(dāng)ρt≤4或ρ∞≤4時(shí),該算法退化為帶動量的SGD算法。
(4)
式中:ρt——第t輪的SMA長度;
ρ∞——SMA的最大長度;
rt——第t輪的整流項(xiàng)。
由式(5)計(jì)算出簡單移動平均線(Simple Moving Average,SMA)的最大長度。
(5)
式中:β2——二階動量衰減率。
第t輪的SMA長度見式(6)。
(6)
圖4為改進(jìn)后的輕量化VGG網(wǎng)絡(luò)模型結(jié)構(gòu),模型中每層卷積使用Ghost模塊替換,卷積核的大小為3×3,并保留了VGG16中的池化層和softmax層用于輸出最后的分類結(jié)果,各卷積層輸出特征圖通道數(shù)如表1所示,在模型的5~10層進(jìn)行了卷積核減半操作,并引入了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展示了試驗(yàn)中使用的圖片,尺寸為224像素×224像素的RGB彩色圖像,使用的數(shù)據(jù)集為公開的PlantVillage植物病蟲害數(shù)據(jù)集,包括辣椒健康葉1 477張、辣椒細(xì)菌性斑點(diǎn)病997張、土豆健康葉152張、土豆早疫病1 000張、土豆晚疫病1 000張、番茄輪斑病835張、番茄花葉病373張、番茄黃曲病3 209張、番茄細(xì)菌性斑點(diǎn)病2 127張、番茄早疫病1 000張,總共為12 739張圖像,為了增加訓(xùn)練集的數(shù)據(jù),訓(xùn)練時(shí)按照9∶1的比例劃分訓(xùn)練集和測試集。初始學(xué)習(xí)率設(shè)定為0.1,批量大小設(shè)定為128,迭代次數(shù)為100次,Ghost模塊的超參數(shù)s設(shè)置為2,該網(wǎng)絡(luò)模型在Pytorch框架下進(jìn)行。

圖5 PlantVillage部分圖片F(xiàn)ig. 5 Images of PlantVillage
3.2.1 減少各層卷積核的結(jié)果比較
為分析減少的卷積核個(gè)數(shù)對模型準(zhǔn)確率的影響,將8~10層卷積層的卷積核個(gè)數(shù)分別減少25%、50%、75%,因?yàn)檫@部分卷積層被兩個(gè)最大池化層隔開,而且卷積核個(gè)數(shù)較多。圖6為減少不同的卷積核個(gè)數(shù)對模型計(jì)算次數(shù)的影響,由于卷積核減少有利于實(shí)現(xiàn)輕量化,但卷積核過少時(shí)準(zhǔn)確率出現(xiàn)明顯下降,后續(xù)試驗(yàn)中使用卷積核減半策略。

圖6 減少不同卷積核個(gè)數(shù)得到的FLOPsFig. 6 FLOPs of reducing different convolution kernels number
進(jìn)行4組對比試驗(yàn),嘗試對VGG16的不同層的卷積核個(gè)數(shù)進(jìn)行減半,模型采用交叉熵?fù)p失函數(shù)計(jì)算損失值。試驗(yàn)中,把最大池化層隔開的卷積層看作一個(gè)整體,分階段進(jìn)行減半操作。在A組試驗(yàn)中,把VGG16的第1~4卷積層卷積核個(gè)數(shù)減少一半,其他層不變;B組試驗(yàn)把第3~7卷積層卷積核個(gè)數(shù)減少一半,其他層不變;C組試驗(yàn)把第5~10卷積層卷積核個(gè)數(shù)減少一半,其他層不變;D組試驗(yàn)把第8~13卷積層卷積核個(gè)數(shù)減少一半,其他層不變。模型的準(zhǔn)確率、FLOPs和參數(shù)量的變化情況如表2所示。最終,本文選用了FLOPs最低的一組(C組),即在VGG16的第5~10層卷積層中將卷積核進(jìn)行減半。

表2 各組試驗(yàn)的結(jié)果對比Tab. 2 Results comparison of each experiments
3.2.2 VGG16與本文模型試驗(yàn)結(jié)果比較
在減少卷積核的基礎(chǔ)上,加入Ghost模塊和Ranger優(yōu)化器,構(gòu)成最終的網(wǎng)絡(luò)模型。為了驗(yàn)證本文改進(jìn)后VGG16網(wǎng)絡(luò)的性能,本文將改進(jìn)后的VGG16網(wǎng)絡(luò)模型與傳統(tǒng)的VGG16、使用Ghost模塊替換VGG16中的卷積層的網(wǎng)絡(luò)(表3中的Ghost-VGG16)進(jìn)行對比,模型損失函數(shù)均為交叉熵?fù)p失函數(shù),試驗(yàn)結(jié)果從FLOPs、測試集的準(zhǔn)確率和參數(shù)量、識別時(shí)間四個(gè)方面進(jìn)行比較。
與傳統(tǒng)的VGG16相比,該模型結(jié)構(gòu)參數(shù)量減少了72.37%,模型需要的浮點(diǎn)運(yùn)算次數(shù)FLOPs下降了71.86%,識別時(shí)間縮短25.8%,而準(zhǔn)確率提高了0.24%,說明該模型實(shí)現(xiàn)了VGG16的輕量化,同時(shí)也輕微提高模型的準(zhǔn)確率,這也證明VGG16中存在大量冗余的卷積核,這些冗余的卷積核增加不必要的計(jì)算開銷。表4為不同模型在測試集上對不同病蟲害的識別準(zhǔn)確率和識別時(shí)間。

表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)絡(luò)中的卷積層,分析試驗(yàn)結(jié)果可以得出,本文提出的方法參數(shù)量更小,準(zhǔn)確率更高,而且從圖7可以看出本文提出的方法在模型訓(xùn)練的過程中更快地達(dá)到了收斂。這是因?yàn)镽anger優(yōu)化器根據(jù)每一輪的訓(xùn)練情況實(shí)時(shí)調(diào)整學(xué)習(xí)率,使模型獲得更高的收斂速度。
為了驗(yàn)證模型在圖像分類問題上的適用性,在同樣的試驗(yàn)環(huán)境下在Cifar10數(shù)據(jù)集驗(yàn)證,該數(shù)據(jù)集由60 000張大小為32像素×32像素的RGB圖片組成,包含10個(gè)分類,其中訓(xùn)練集包含50 000張圖片,測試集包含10 000張圖片。從表5中的試驗(yàn)結(jié)果可以看出,本文提出的模型在Cifar10上仍然取得了較高的準(zhǔn)確率,而且參數(shù)量和計(jì)算次數(shù)更少,識別時(shí)間比VGG16減少了37.37%。

表5 Cifar10數(shù)據(jù)集識別結(jié)果對比Tab. 5 Comparison of identification results on Cifar10 dataset

(a) 模型的準(zhǔn)確率比較

(b) 交叉熵?fù)p失值比較圖7 準(zhǔn)確率和損失值變化比較Fig. 7 Comparison of accuracy and loss value changes
3.2.3 復(fù)雜環(huán)境下的識別結(jié)果
為了測試本文提出的模型在復(fù)雜情況下識別準(zhǔn)確率,構(gòu)建了包含17 591張RGB圖片的數(shù)據(jù)集,圖像大小為224像素×224像素,均拍攝于自然光照下,圖8給出了部分圖像示例。

圖8 復(fù)雜環(huán)境下圖像示例Fig. 8 Images of complex environment
其中包含蘋果酒銹病1 662張、蘋果蛙眼斑病2 814張、蘋果健康葉4 138張、蘋果白粉病1 041張、蘋果瘡痂病4 311張、柑橘健康葉101張、柑橘潰瘍病2 130張、咖啡健康葉712張、咖啡紅蜘蛛螨病151張、咖啡葉銹病542張,訓(xùn)練集與測試集仍然按照9∶1的比例劃分。表6為本文模型與其他模型在測試集上的對比結(jié)果,從表6可以看出本文提出的模型在復(fù)雜環(huán)境下仍然取得了較高的準(zhǔn)確率,識別時(shí)間卻僅為VGG16耗時(shí)的50%,模型需要的計(jì)算量和參數(shù)量也更少,更適合部署在微算力的嵌入式設(shè)備上。

表6 不同方法在復(fù)雜環(huán)境下的識別結(jié)果Tab. 6 Identification results of different models based on complex environment
1) 針對VGG16網(wǎng)絡(luò)模型的參數(shù)量大,計(jì)算開銷大等問題,提出了一種基于VGG的輕量化網(wǎng)絡(luò)模型。該方法首先使用Ghost模塊替換VGG16中的卷積層,再對卷積層中的卷積核進(jìn)行修剪,最后使用Ranger優(yōu)化器提高模型的準(zhǔn)確率。
2) 本文提出的改進(jìn)在植物病蟲害識別中具有明顯優(yōu)勢,在PlantVillage上的準(zhǔn)確率達(dá)到99.37%,而FLOPs比VGG16網(wǎng)絡(luò)減少了71.86%,識別時(shí)間也更少。
3) 改進(jìn)后的模型在復(fù)雜環(huán)境下識別準(zhǔn)確率為92.4%,還有待提高,因此下一步將考慮去除雜草或其他葉片的遮擋、光照等因素的影響,對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)一步優(yōu)化,提高網(wǎng)絡(luò)模型的泛化能力。