李恩霖,謝秋菊,蘇中濱,高 睿
(東北農(nóng)業(yè)大學(xué) 電氣與信息學(xué)院,黑龍江 哈爾濱 150030)
玉米是我國重要的糧食作物,種植面積非常廣闊,然而大面積的玉米密集種植在遭受突發(fā)性病害時,由于其較強的傳染性,產(chǎn)量會受到很大的影響,玉米病害已經(jīng)成為影響我國玉米產(chǎn)量的重要因素之一[1-2]。因此,準確、快速地識別玉米病害種類變得尤為重要。
近年來,隨著深度學(xué)習(xí)在圖像識別方面的發(fā)展,很多學(xué)者開始將以 AlexNet[3]、Inception V3[4]、VGG[5]、ResNet[6]以及DenseNet[7]等為代表的深度卷積神經(jīng)網(wǎng)絡(luò)模型應(yīng)用到農(nóng)作物病蟲害識別當(dāng)中并且取得了一定的進展[8]。例如,在棉花葉部病害識別方面,趙立新等[9]通過改進的AlexNet模型融合遷移學(xué)習(xí)實現(xiàn)的病害率可達到97.16%,但只建立了VGG19和Inception V2兩種模型,未有其他更先進的模型;樊湘鵬等[10]提出了改進的卷積神經(jīng)網(wǎng)絡(luò)對田間復(fù)雜背景下的玉米病害進行識別,其識別準確率可達到99.12%,但設(shè)計的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)較淺并不一定能夠有效提取植物病害的特征信息;Chen等[11]建立的INC-VGGN模型對水稻病害進行識別,在公開數(shù)據(jù)集的測試中準確率略低,識別率為91.83%;劉君等[12]建立了基于YOLO的卷積神經(jīng)網(wǎng)絡(luò)模型對番茄病害進行識別,識別率可達85.09%,識別率并不夠高。然而,由于數(shù)據(jù)采集環(huán)境復(fù)雜,同時受采集的數(shù)據(jù)樣本量限制,識別精準度仍需進一步提高。此外,雖然上述研究大都采用數(shù)據(jù)增強技術(shù)增加數(shù)據(jù)的復(fù)雜度及擴大樣本量,然而在目前病害識別研究中,結(jié)合較新的深度網(wǎng)絡(luò)模型,探索適合小樣本量條件下優(yōu)化的病害識別方法的研究仍然欠缺。
本文以玉米銹病、玉米葉枯病、玉米灰斑病3種病害為例,采用遷移學(xué)習(xí)和離線數(shù)據(jù)增強方法,建立基于深度網(wǎng)絡(luò)模型 VGG16、Inception V3、ResNet50、ResNet101 和DenseNet121的玉米葉片病害識別方法,設(shè)計全新分類層,選擇較優(yōu)的網(wǎng)絡(luò)模型,通過遷移學(xué)習(xí)凍結(jié)分類層訓(xùn)練方式優(yōu)化模型性能。與徐景輝等[13]建立的基于遷移學(xué)習(xí)的VGG16模型進行玉米大斑病與銹病相比,本文建立了幾種優(yōu)于VGG16模型的卷積神經(jīng)網(wǎng)絡(luò)模型進行3種玉米病害的識別,并同樣采用了遷移學(xué)習(xí)和數(shù)據(jù)增強的方法,突破由于樣本量及不同數(shù)據(jù)敏感性帶來的深度模型的識別限制,為今后農(nóng)作物病害識別提供可行的參考。
本實驗以玉米銹病、玉米葉枯病和玉米灰斑病這3種玉米病蟲害為研究對象,實驗數(shù)據(jù)來自于公開數(shù)據(jù)集PlantVillage(https://github.com/spMohanty/PlantVillage-Dataset)。數(shù)據(jù)集中3種病蟲害圖片數(shù)目并不一致,為了防止樣本不均衡所帶來的過擬合等問題[14],分別選取3種病蟲害圖片各500張。為滿足輸入模型的圖片維度固定,本文將圖片尺寸統(tǒng)一轉(zhuǎn)換為256×256×3像素。為了防止非葉片信息對病蟲害識別產(chǎn)生干擾,本文采用了經(jīng)過閾值分割后的病蟲害圖片,經(jīng)過閾值分割后3種病蟲害樣本圖片如圖1所示。
圖1 經(jīng)過閾值分割后3種病蟲害樣本圖片
本文采用了離線數(shù)據(jù)增強技術(shù)對數(shù)據(jù)集進行了擴充,對3種玉米病蟲害圖片進行了翻轉(zhuǎn)、旋轉(zhuǎn)20°、對比度增強、亮度增強以及顏色增強。最后將原始數(shù)據(jù)集中3種玉米病蟲害圖片各500張,擴充至每種玉米病蟲害圖片各2500張,相當(dāng)于對原始的數(shù)據(jù)集擴充至5倍。經(jīng)過離線數(shù)據(jù)增強后的部分樣本圖片如圖2所示。
圖2 經(jīng)過離線數(shù)據(jù)增強后的部分樣本圖片
CNN由于其在圖像識別方面表現(xiàn)出的巨大優(yōu)勢,近年來在各種視覺識別領(lǐng)域應(yīng)用廣泛。與傳統(tǒng)的方法不同,CNN不需要人工提取特征,可以直接從原始圖像中自動提取特征。典型的CNN模型包括輸入層、輸出層和多個隱藏層,其中隱藏層包括:卷積層、池化層、全連接層以及分類層,如圖3所示。
圖3 典型的卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)[7]
卷積層是CNN模型的關(guān)鍵組成成分,它通過不同大小的卷積核對圖片進行特征的提取。經(jīng)過一系列的卷積操作后,可以提取出原始圖像中的一些特征信息。卷積層的計算公式,如公式(1)所示。
式中,yij-卷積層的輸出;wuv-維度為 u×v的卷積核;xi+u-1,j+v-1-卷積層的輸入。
在卷積層提取到的特征數(shù)據(jù)不具備空間不變性,只有通過池化層之后才具備空間不變特性。同時池化層還可以減少特征空間,避免一定的過擬合,增加卷積核的感受野。池化層可以理解為對圖像進行下采樣的過程,對于每一次滑動窗口的所有值,輸出其中的最大值、均值或其他方法產(chǎn)生的值。本文中各個模型通過更改都采用了平均池化,如公式(2)所示。
式中,ym,n-池化層的輸出;Rm,n-池化區(qū)域;xi-池化層的輸入。
在一系列的卷積和池化操作后,通常會再連接一個或多個全連接層,全連接層的目的是利用提取出的特征信息進行圖像分類,本文使用Softmax函數(shù)進行分類,如公式(3)所示。
式中,wc-第c類別的權(quán)重向量;-所有類別的預(yù)測條件概率組成的向量。
本文對比 VGG16、Inception V3、ResNet50、ResNet1 01和DenseNet121這幾種優(yōu)異的CNN模型,建立基于深度學(xué)習(xí)模型的玉米病害識別方法。
1.2.1 DenseNet
DenseNet是Huang G.等[7]在論文中提出的一種采用密集連接機制的CNN結(jié)構(gòu),它通過特征圖重用的方式來探索網(wǎng)絡(luò)的潛能[15]。DenseNet在輸入層的表示如公式(4)所示。
式中,Hl(*)代表的是非線性轉(zhuǎn)化函數(shù),是一個組合操作,其可能包括一系列的BN、ReLU、Pooling及Conv操作。
DenseNet主要由DenseBlock層和Transition層交替連接形成。在DenseBlock中,各層特征圖大小相同并且在通道維度上進行疊加。由于在通道維度上疊加的操作會導(dǎo)致后面層的輸入非常大,因此在DenseBlock內(nèi)部采用了bottleneck層來降低計算量,bottleneck層主要是在原有的結(jié)構(gòu)中添加了1×1的卷積核。Transition層是連接兩個相鄰的DenseBlock模塊,由連續(xù)的卷積和池化構(gòu)成,可以起到降低特征圖大小的作用。
本文對DenseNet121進行了修改,保留了其卷積層,頂部添加了全局平均池化層、結(jié)點數(shù)為512的全連接層、丟棄率為0.5的Dropout層,最后又添加了3分類的Softmax分類層,如圖4所示。
圖4 DenseNet121模型結(jié)構(gòu)圖
1.2.2 VGG16
本文建立的VGG16模型共16層,包括3×3的卷積層和2×2的最大池化層,在最后連接了3個全連接層,前兩個全連接層的激活函數(shù)為ReLU,最后一個全連接層的激活函數(shù)為Softmax[16],輸入圖像像素大小為256×256×3。本文將VGG16模型前兩層全連接層結(jié)點數(shù)設(shè)置為512,最后的分類層設(shè)置為3分類,結(jié)構(gòu)圖如圖5所示。
圖5 VGG16模型結(jié)構(gòu)圖
1.2.3 ResNet
ResNet利用殘差結(jié)構(gòu)堆疊來解決梯度消失和退化問題[17],其結(jié)構(gòu)如圖6所示。在層數(shù)比較少的ResNet模型中使用了圖6所示左側(cè)的殘差結(jié)構(gòu),在層數(shù)較多的ResNet模型中使用了圖6所示右側(cè)的殘差結(jié)構(gòu)。在殘差結(jié)構(gòu)堆疊的最后采用了平均池化進行了一次下采樣,再連接一個分類層。本文將原始的ResNet50和ResNet101模型的分類層之前添加了兩層結(jié)點數(shù)為512的全連接層,并將分類層結(jié)點數(shù)設(shè)置為3。
圖6 殘差單元結(jié)構(gòu)圖
1.2.4 Inception V3
Inception V3是谷歌公司[4]提出的第三代Inception模型。通過設(shè)計一個稀疏網(wǎng)絡(luò)結(jié)構(gòu),產(chǎn)生稠密的數(shù)據(jù),增加神經(jīng)網(wǎng)絡(luò)的表現(xiàn),保證計算資源的使用效率[18]。Inception模塊采用多層的小卷積核來代替大的卷積核,以此來減少計算量和參數(shù)量,其結(jié)構(gòu)如圖7。本文將原始的Inception V3模型分類層結(jié)點數(shù)設(shè)置為3,以適應(yīng)3分類的玉米病蟲害識別。
圖7 Inception模塊結(jié)構(gòu)圖
為了提高以上網(wǎng)絡(luò)模型的識別精度,本文將遷移學(xué)習(xí)融入到各個模型當(dāng)中,解決本研究中深度學(xué)習(xí)數(shù)據(jù)量樣本小的問題。遷移學(xué)習(xí)是一種機器學(xué)習(xí)技術(shù),本文采用遷移學(xué)習(xí)目的是讓計算機將從ImageNet大數(shù)據(jù)集中所學(xué)到的知識和方法遷移到數(shù)據(jù)量不足的玉米病蟲害識別任務(wù)中。通過從ImageNet預(yù)訓(xùn)練模型中提取卷積層并且凍結(jié)它們,以免在后續(xù)的訓(xùn)練中破壞它們所包含的特征信息,在凍結(jié)層的頂部添加了全局平均池化層、全連接層、Dropout層以及分類層,進行新舊功能的轉(zhuǎn)換。對玉米病害數(shù)據(jù)集進行訓(xùn)練建立模型,最后進行微調(diào),解凍卷積層并以非常低的學(xué)習(xí)率進行重新訓(xùn)練,通過不斷訓(xùn)練來逐步適應(yīng)玉米病蟲害數(shù)據(jù)集,從而節(jié)省訓(xùn)練時間,提高病害的識別準確率[19-20]。
1.4.1 實驗環(huán)境
實驗在Python3.7.6、Tensorflow-GPU 2.3.0軟件環(huán)境下完成。硬件環(huán)境中CPU采用Intel core i5-10300H,主頻為2.5GHz;GPU采用NVIDIA GTX2060Ti,6G顯存。
1.4.2 實驗數(shù)據(jù)集劃分及遷移優(yōu)化與實驗設(shè)計
本文將經(jīng)過數(shù)據(jù)增強的3種玉米病蟲害圖片數(shù)據(jù)集以70%、20%、10%的比例劃分為訓(xùn)練集、驗證集和測試集。訓(xùn)練集和驗證集用于模型的訓(xùn)練和擬合,測試集用于模型的測試。
本文中遷移學(xué)習(xí)方法遷移了ImageNet的權(quán)重參數(shù),并且對 VGG16、ResNet50、ResNet101、Inception V3、DenseNet121模型進行了微調(diào),只保留上述模型的卷積層,將頂層分類層設(shè)置為全局平均池化層+全連接層+Dropout+Softmax分類層。實驗總體分為兩個部分,第一個部分凍結(jié)各個模型的卷積層只訓(xùn)練各個模型的分類層,第二個部分將凍結(jié)層全部打開再進行訓(xùn)練以使模型達到更優(yōu)的結(jié)果。
1.4.3 超參數(shù)設(shè)計
本實驗設(shè)置VGG16模型的優(yōu)化器為SGD,其他模型均采用Adam優(yōu)化器;batchsize設(shè)置為16,Dropout丟棄率設(shè)置為0.5,第一部分和第二部分均訓(xùn)練30個epoch。
VGG16模型第一部分訓(xùn)練初始學(xué)習(xí)率設(shè)置為0.01,第二部分訓(xùn)練初始學(xué)習(xí)率設(shè)置為0.0001,其他模型第一部分和第二部分訓(xùn)練初始學(xué)習(xí)率均設(shè)置為0.0001,并且所有模型均采用了學(xué)習(xí)率衰減的方法,當(dāng)驗證集的損失函數(shù)超過2個epoch沒有減小時,學(xué)習(xí)率設(shè)置為原來的1/10的方法。
為了更好地對比以上幾種模型的分類能力,本文采用混淆矩陣判斷模型各項性能指標,分別用TP(True Positive)代表真實值是true模型認為是positive的數(shù)量,F(xiàn)N(False Negative)代表真實值是false模型認為是negative 的數(shù)量,F(xiàn)P(False Positive)代表真實值是 false模型認為是positive的數(shù)量,TN(True Negative)代表真實值是true模型認為是negative的數(shù)量。通過利用混淆矩陣這幾個基礎(chǔ)指標可以得到準確率(Accuracy)來評估模型正確分類樣本數(shù)占總樣本數(shù)的比例,精確率(Precision)評估模型預(yù)測的所有positive中預(yù)測正確的比例,召回率(Recall)評估所有真實positive中模型預(yù)測正確的positive的比例、特異度(Specificity)評價所有真實negative中模型預(yù)測正確的negative比例,計算如公式(5)-(8)所示。
2.1.1 準確率分析
本實驗為了評估目前比較先進的深度卷積神經(jīng)網(wǎng)絡(luò)在植物病蟲害識別任務(wù)中的適用性,重點對DenseNet121、VGG16、ResNet50、ResNet101 和 Inception V3 幾種網(wǎng)絡(luò)模型進行了微調(diào)后并凍結(jié)最后分類層進行訓(xùn)練30epoch,解凍凍結(jié)層后繼續(xù)訓(xùn)練30epoch,解凍后模型訓(xùn)練準確率與損失函數(shù)變化如圖8,具體結(jié)果如表1。
圖8 各個模型損失函數(shù)與準確率變化
表1 各個模型第一、二部分參數(shù)量、每步時間、準確率、損失值
由圖8可以看出,除了Inception V3模型外,其他模型擬合速度都很快,都在5個epoch左右即可達到較高的準確率與較低的損失值。
由表1可以看出,除了VGG16其余網(wǎng)絡(luò)模型結(jié)構(gòu)準確率都超過99.00%,并且在VGG16網(wǎng)絡(luò)模型解凍之后訓(xùn)練30epoch后訓(xùn)練集準確率達到99.98%,而測試集卻只有98.40%,說明在與其他模型相同的超參數(shù)設(shè)置情況下VGG16存在著一定的過擬合。
在凍結(jié)分類層訓(xùn)練30epoch后,VGG16的準確率最高為98.13%,DenseNet和Inception V3準確率也較高,分別為97.33%、94.27%,在準確率要求不那么高的情況下可以選用VGG16模型,不但擁有不錯的準確率,訓(xùn)練時間也會比較短。解凍凍結(jié)層后再訓(xùn)練30epoch可以發(fā)現(xiàn)各個模型準確率均有提升,其中ResNet50和ResNet101在后30epoch訓(xùn)練開始時準確率特別低,原因可能是兩種模型總的參數(shù)量特別龐大,而凍結(jié)卷積層訓(xùn)練時只訓(xùn)練了很少的參數(shù),當(dāng)解凍卷積層后無法將玉米病蟲害識別這個功能有效的繼承。解凍凍結(jié)層后訓(xùn)練結(jié)果中,DenseNet模型表現(xiàn)最好,準確率為99.73%。
2.1.2 訓(xùn)練時間與參數(shù)量分析
由表1可以看出,Inception V3凍結(jié)分類層訓(xùn)練每個epoch用時最短為19s,其次DenseNet121也有著較短的訓(xùn)練時間為23s,解凍后訓(xùn)練模型每個epoch用時最短的兩個算法依然為Inception V3和DenseNet121,運行每個epoch時間分別為55s和73s。在參數(shù)量方面DenseNet121相比于其他模型少很多,也就意味著在保存DenseNet121模型參數(shù)時所需要的存儲空間也就更小。并且在數(shù)據(jù)集不那么多的情況下,模型需要訓(xùn)練的參數(shù)量越多,也越容易產(chǎn)生過擬合。
2.1.3 通過混淆矩陣對比
由表2可以看出,DenseNet121對于3種病蟲害的精確率、召回率以及特異率表現(xiàn)最好。ResNet50、ResNet101、DenseNet121這3種模型識別玉米銹病時精確率、召回率以及特異率都達到了100%,說明這3種模型對于玉米銹病的識別能力非常好。通過圖9各個模型混淆矩陣可以看出,DenseNet121模型對于3種病蟲害識別能力最強,750個測試集只有2個測試集分類錯誤,分別是葉枯病和灰斑病識別錯誤。觀察其他模型的識別情況可以發(fā)現(xiàn),在這5種模型中最多的分類錯誤都出現(xiàn)在葉枯病和灰斑病上,說明葉枯病和灰斑病可能有著一定的相似性。
表2 各個模型 Precision、Recall、Specificity
圖9 各個模型混淆矩陣
通過以上對各個模型的對比,本實驗采用表現(xiàn)最為優(yōu)異的DenseNet121模型做了兩組對比實驗,分別為不進行遷移學(xué)習(xí)訓(xùn)練60epoch、不凍結(jié)卷積層直接訓(xùn)練60epoch,結(jié)果對比如表3所示。最后兩種對比實驗準確率分別為97.86%和99.60%,與不進行遷移學(xué)習(xí)對比發(fā)現(xiàn),利用遷移學(xué)習(xí)可以提升一定的準確率。在同樣使用遷移學(xué)習(xí)的條件下,對比先凍結(jié)分類層訓(xùn)練30epoch再解凍訓(xùn)練30epoch和直接訓(xùn)練60epoch,結(jié)果發(fā)現(xiàn)先凍結(jié)分類層30epoch再解凍訓(xùn)練30epoch模型準確率為99.73%,直接訓(xùn)練60epoch的模型準確率為99.60%,兩種訓(xùn)練方式準確率相近,采用先凍結(jié)分類層30epoch再解凍訓(xùn)練30epoch準確率略高,但是從訓(xùn)練時間上看,采用本實驗的訓(xùn)練方式凍結(jié)分類層訓(xùn)練每一epoch用時23s、解凍后訓(xùn)練每一epoch用時73s,而采用直接訓(xùn)練的訓(xùn)練方式訓(xùn)練每一epoch用時都為73s,說明采用本實驗的訓(xùn)練方式不但準確率有略微的提升,訓(xùn)練時間也有著明顯的縮短。
表3 3種訓(xùn)練方式下DenseNet121準確率與訓(xùn)練每步時長對比
通過以上結(jié)果分析可以看出,各個模型對于玉米銹病識別的準確率明顯高于玉米葉枯病和玉米灰斑病。玉米銹病、玉米灰斑病和玉米葉枯病都是由病菌侵染發(fā)生在葉片上的玉米病害[21-22]。玉米銹病發(fā)病后,整張葉片都布滿銹褐色長橢圓型病斑,病斑呈散生;玉米灰斑病和玉米葉枯病在發(fā)病后,病斑多會沿著玉米葉脈方向擴展,寬度受葉脈限制,逐漸擴展為橢圓形。因此,可以推斷各個模型識別3種病害圖片效果的差異可能是由于3種病害病斑的形態(tài)學(xué)特征。為了驗證這一推斷,本文利用識別效果最好的DenseNet121模型保存好的權(quán)重參數(shù),對3種病害圖片進行特征圖可視化,選取conv1relu、conv2_block1_0relu、conv3_block1_0relu、conv4_block1_0relu 層的 3 種病蟲害特征圖可視化圖片,如圖10所示。通過觀察各個層3種病蟲特征圖可視化圖片可以發(fā)現(xiàn),較淺的卷積層conv1relu提取的為整張葉片的信息,隨著卷積層數(shù)的加深,提取的特征主要為葉片的邊緣信息、葉片的葉脈信息以及葉片的病斑信息,玉米灰斑病與玉米葉枯病提取的葉斑信息都順著葉脈的方向,而玉米銹病提取的葉斑信息呈散狀分布。通過以上的分析可驗證,玉米病蟲害病斑的形態(tài)特征會影響模型的識別情況。
圖10 經(jīng)過卷積可視化的3種病蟲害樣本圖片
(1)本文以3種玉米病害為例,對比5種模型結(jié)構(gòu),發(fā)現(xiàn)DenseNet121準確率、精確率、召回率、特異率最好,并且參數(shù)量最少、模型訓(xùn)練時間相對比較短,因此,表明DenseNet121模型是最適合的玉米病害識別方法。
(2)采用遷移學(xué)習(xí)可以在一定的程度上提高模型的準確率。本文對表現(xiàn)最為優(yōu)異的DenseNet121模型,不采用遷移學(xué)習(xí)與采用遷移學(xué)習(xí)訓(xùn)練60epoch的模型性能進行對比,其準確率分別為97.86%和99.73%,采用遷移學(xué)習(xí)機制可以較大程度地提高玉米病害識別模型的準確率。
(3)在模型訓(xùn)練過程中,采用先凍結(jié)卷積層訓(xùn)練再解凍進行整個模型訓(xùn)練的方法,相比于不凍結(jié)分類層直接進行模型訓(xùn)練的方法更為合理,在提高準確率的同時,大大縮短訓(xùn)練時間。
(4)玉米病害病斑的形態(tài)特征會在一定程度上影響模型的識別精準率。本文通過卷積可視化發(fā)現(xiàn),病斑形狀及分布相似的玉米灰斑病與玉米葉斑病識別準確率明顯低于玉米銹病的識別準確率。