龔 安,井曉萌
(中國石油大學(xué)(華東) 計算機科學(xué)與技術(shù)學(xué)院,山東 青島 266580)
中國作為農(nóng)業(yè)大國,農(nóng)業(yè)生產(chǎn)在中國經(jīng)濟發(fā)展中發(fā)揮著重要的作用,農(nóng)作物是保障人民生活順利運轉(zhuǎn)的重要資源,然而農(nóng)作物病害卻會嚴(yán)重影響農(nóng)作物的產(chǎn)量。農(nóng)作物病害的識別通常通過直接觀察植物葉片進(jìn)行癥狀判斷,但是這種方法對于沒有專業(yè)知識的普通農(nóng)民來說具有一定的困難,因而會導(dǎo)致病害誤診或者錯過最佳治理時間。因此,運用深度學(xué)習(xí)[1]的方法幫助農(nóng)民識別診斷病害圖像,盡早檢測農(nóng)作物的健康狀況并及時發(fā)現(xiàn)病害癥狀至關(guān)重要。
近年來,卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)在圖像分類和識別中取得了顯著的研究成果[2-3]。因此,國內(nèi)外專家學(xué)者也將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于農(nóng)作物的病害診斷中,并取得了不錯的研究成果。在國外,將圖像處理技術(shù)應(yīng)用在農(nóng)作物病害識別方面的研究相對較早,且有著完善的圖像數(shù)據(jù)庫。Ramcharan等人[4]運用遷移學(xué)習(xí)訓(xùn)練深度卷積神經(jīng)網(wǎng)絡(luò),對木薯的三種疾病和兩種病蟲害進(jìn)行識別,利用Inception v3模型訓(xùn)練,通過多次對單個模型進(jìn)行調(diào)參取得了不錯的結(jié)果,并將其利用的卷積神經(jīng)網(wǎng)絡(luò)模型在移動端使用,這對幫助農(nóng)民對農(nóng)作物病害的進(jìn)行識別有著極大的現(xiàn)實意義。Too等[5]對14種植物38種不同的類別進(jìn)行植物疾病識別,其采用目前比較先進(jìn)的深度卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行微調(diào),通過不斷加深網(wǎng)絡(luò)模型層數(shù)來提高網(wǎng)絡(luò)性能,網(wǎng)絡(luò)模型包括VGG16[6]、InceptionV4[7]、RensNet50[8]、RensNet101、RensNet152、DenseNet121[9]網(wǎng)絡(luò)結(jié)構(gòu)。Khamparia等人[10]利用卷積神經(jīng)網(wǎng)絡(luò)和自動編碼器組合設(shè)計了一種檢測農(nóng)作物葉片病害的混合方法,在小樣本上對3種作物和5種作物病害進(jìn)行訓(xùn)練,在訓(xùn)練時采用2×2和3×3不同的卷積濾波器,最后在小樣本數(shù)據(jù)集上取得了非常不錯的效果。相對傳統(tǒng)的圖像識別方法,深度學(xué)習(xí)方法準(zhǔn)確率更高,檢測速度快,國內(nèi)的研究人員也將目光投向了利用深度學(xué)習(xí)來解決農(nóng)作物病害識別的問題。楊晉丹等人[11]利用卷積神經(jīng)網(wǎng)絡(luò)對草莓葉部白粉病害進(jìn)行識別,設(shè)計了一種混合池化的CNN-9模型,其首先設(shè)計由3種不同網(wǎng)絡(luò)深度與3種不同尺寸的卷積核交叉組合的網(wǎng)絡(luò)結(jié)構(gòu),然后選擇4種采樣層構(gòu)建方法,經(jīng)多次訓(xùn)練測試后,最終對草莓白粉病病害識別達(dá)到了98.61%的正確識別率。劉永波等人[12]將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到自然環(huán)境下玉米10種常見病害的識別上,應(yīng)用Triplet loss雙卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)圖像特征,使用sift算法提取圖像紋理細(xì)節(jié),最后通過SoftMax對圖像進(jìn)行分類,最后取得了90%的準(zhǔn)確率。蔣豐千等人[13]采用卷積神經(jīng)網(wǎng)絡(luò)對生姜的炭疽病、姜瘟病、根結(jié)線蟲病和白星病進(jìn)行研究分析達(dá)到了96%的識別率,并設(shè)計了人機交互界面,通過可視化界面提高了系統(tǒng)使用的便捷性。
結(jié)合上述研究發(fā)現(xiàn),目前國內(nèi)外的農(nóng)作物病害識別還存在一些問題:(1)通過不斷增加單一網(wǎng)絡(luò)模型的深度來提高準(zhǔn)確率,往往會導(dǎo)致出現(xiàn)訓(xùn)練難以收斂的情況;(2)對單一模型不斷地進(jìn)行調(diào)參,從而增加了時間成本;(3)多數(shù)針對單一農(nóng)作物的病害進(jìn)行識別。針對這些問題,文中在現(xiàn)有國內(nèi)外農(nóng)作物病害識別研究的基礎(chǔ)上,對原有卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行優(yōu)化,采用Stacking[14]融合算法對蘋果、櫻桃、玉米、柑橘、馬鈴薯等十種農(nóng)作物的物種-病害-程度進(jìn)行細(xì)粒度分類識別。采用多模型融合的方法,提高識別的準(zhǔn)確率,優(yōu)化識別效率,從而得到高質(zhì)量的檢測效果,彌補農(nóng)民專業(yè)知識的不足。
文中所使用的基礎(chǔ)網(wǎng)絡(luò)模型都是深度卷積神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)是一種多層神經(jīng)網(wǎng)絡(luò),包括輸入層、卷積層、池化層、全連接層、輸出層。每層是由多個二維平面(即特征映射)組成,而每個平面由多個獨立的神經(jīng)元組成,通過不同的卷積核提取圖像的局部特征,將該局部特征組合成更高層的全局特征,從而完成圖像從局部到整體的映射過程。圖1為常見卷積網(wǎng)絡(luò)結(jié)構(gòu)。
圖1 卷積網(wǎng)絡(luò)結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)通常是采用卷積層對輸入的數(shù)據(jù)進(jìn)行特征提取,卷積層內(nèi)部包含很多個卷積核,組成卷積核的每個元素都對應(yīng)一個權(quán)重系數(shù)和一個偏差量(bias vector),類似于一個前饋神經(jīng)網(wǎng)絡(luò)的神經(jīng)元(neuron)。卷積層內(nèi)每個神經(jīng)元都與前一層中位置接近的區(qū)域的多個神經(jīng)元相連,區(qū)域的大小取決于卷積核的大小。卷積核在工作時,會有規(guī)律地掃過輸入特征,在感受野內(nèi)對輸入特征做矩陣元素乘法求和并疊加偏差量。只有對輸入圖像進(jìn)行準(zhǔn)確、全面的特征提取才能確保分類識別的正確性。但是隨著CNN網(wǎng)絡(luò)層數(shù)的不斷增加,訓(xùn)練難度逐漸增大,為了降低訓(xùn)練成本,文中使用ImageNet預(yù)訓(xùn)練好的模型,固定底層模型參數(shù),修改頂層的全連接層,分別使用4個模型進(jìn)行特征提取。
為提取能更好地表達(dá)語義信息的特征,文中在深度卷積網(wǎng)絡(luò)的基礎(chǔ)上,將殘差學(xué)習(xí)的思想應(yīng)用到農(nóng)作物病害特征的提取上。
圖2是殘差學(xué)習(xí)模塊的示意圖,殘差學(xué)習(xí)模塊可以作為神經(jīng)網(wǎng)絡(luò)的一部分也可作為多個部分。假設(shè)該部分卷積神經(jīng)網(wǎng)絡(luò)的輸入為x,要擬合的函數(shù)映射(即
圖2 殘差學(xué)習(xí)示意圖
輸出)為H(x),可以定義另外一個殘差映射為F(x)=H(x)-x,則原始的函數(shù)映射H(x)可以表示為F(x)+x。He的實驗表明:優(yōu)化殘差映射F(x)比優(yōu)化原始映射H(x)要比較容易。
F(x)+x在前饋神經(jīng)網(wǎng)絡(luò)中可以理解為捷徑(short cut)x與主徑F(x)的加和。然而捷徑并沒有因此而引入額外的參數(shù),并不影響原始神經(jīng)網(wǎng)絡(luò)的復(fù)雜度,整體神經(jīng)網(wǎng)絡(luò)依然可使用現(xiàn)有的深度學(xué)習(xí)進(jìn)行反饋訓(xùn)練求解。
為提高網(wǎng)絡(luò)的表示能力,文中引入SE[15](squeeze-and-excitation)架構(gòu)單元嵌入到現(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中。SE的思想是在2017年由Jie Hu等人提出,網(wǎng)絡(luò)結(jié)構(gòu)根據(jù)損失去學(xué)習(xí)特征權(quán)重,自適應(yīng)地校準(zhǔn)通道的特征響應(yīng),通過給予有效的特征更大的權(quán)重而抑制無效或者效果小的特征,從而得到更好的效果。SE模塊是一個子結(jié)構(gòu),圖3是將SE模塊嵌入到ResNet網(wǎng)絡(luò)的結(jié)構(gòu)圖。
圖3 SE-ResNet結(jié)構(gòu)
常見的損失函數(shù)有很多,在處理多分類任務(wù)時通常采用交叉熵?fù)p失函數(shù),其表達(dá)式為:
其中,yi表示期望輸出,pti表示模型對樣本的實際輸出。
然而在文中使用的數(shù)據(jù)集各類別間圖片數(shù)量存在不均衡的問題,類別的不均衡問題會影響各類別結(jié)果的輸出,故使用改進(jìn)的交叉熵?fù)p失函數(shù)—focal loss[16]。為了解決類別不均衡問題,何凱明團隊在2016年提出focal loss損失函數(shù),給交叉熵?fù)p失函數(shù)添加了一個預(yù)測概率Pt和超參數(shù)γ,公式可以表達(dá)為:
FL(Pt)=-(1-Pt)rlog(Pt)
該損失函數(shù)通過減少易分樣本的權(quán)重,使模型在訓(xùn)練時更專注難分類的樣本,從而解決農(nóng)作物病害分類的不均衡問題。
傳統(tǒng)的優(yōu)化算法不是將學(xué)習(xí)率設(shè)置為常數(shù)就是根據(jù)訓(xùn)練次數(shù)調(diào)節(jié)學(xué)習(xí)率,因此極大忽視了學(xué)習(xí)率其他變化的可能性。然而學(xué)習(xí)率對網(wǎng)絡(luò)模型的性能有著非常大的影響,因此需要采取一系列策略來更新學(xué)習(xí)率,從而提高網(wǎng)絡(luò)訓(xùn)練速度。Adam[17],AdaGrad,RMSProp等算法都是常見的自適應(yīng)學(xué)習(xí)率優(yōu)化算法。文中選用Adam算法,Adam是一種將Momentum算法和RMSProp算法結(jié)合起來使用的算法,通過Momentum利用類似于移動指數(shù)加權(quán)平均的方法來對網(wǎng)絡(luò)的參數(shù)進(jìn)行平滑處理,讓梯度的擺動幅度變得更小,網(wǎng)絡(luò)收斂速度更快,同時利用RMSProp算法對梯度計算微分平方加權(quán)平均數(shù),消除擺動幅度大的方向,用來修正拍動幅度,使得各個維度的擺動都較小。
XGBoost[18](extreme gradient boosting)是由華盛頓大學(xué)的陳天奇博士提出的分布式梯度提升樹算法,由于其較高的準(zhǔn)確率和出色的性能,越來越多的人將其應(yīng)用在工業(yè)界和Kaggle等數(shù)據(jù)競賽中。XGBoost算法是在傳統(tǒng)的GBDT[19]算法基礎(chǔ)上進(jìn)行改進(jìn)的,GBDT算法采用一階導(dǎo)數(shù)信息,而XGBoost算法同時用到了一階導(dǎo)數(shù)和二階導(dǎo)數(shù),對損失函數(shù)做二階泰勒展開,有利于梯度下降的更快,XGBoost算法還在目標(biāo)函數(shù)之外加入了正則項,控制模型的復(fù)雜性,降低了出現(xiàn)過擬合的可能性。XGBoost可以處理高維度特征,并有著處理速度快的優(yōu)點,所以文中在Stacking算法的第二層選用XGBoost元學(xué)習(xí)器。該算法的思想就是通過不斷進(jìn)行特征分裂來生成樹,每次添加樹的過程就是學(xué)習(xí)一個新的函數(shù)來擬合上次預(yù)測的殘差的過程。如果要預(yù)測一個種類的得分,就是根據(jù)這個種類的特征,在訓(xùn)練的每棵樹中落到對應(yīng)的一個葉子節(jié)點上,這樣每個葉子節(jié)點就會對應(yīng)一個得分,最后將每棵樹對應(yīng)的得分加起來就得到這個種類的預(yù)測值。
模型融合也被稱為集成學(xué)習(xí)(ensemble learning),主要思路是先通過一定的規(guī)則生成多個學(xué)習(xí)器,再采用集成策略進(jìn)行模型組合,最后綜合判斷從而輸出最終結(jié)果。融合多個模型可以彌補單個模型的不足,從而達(dá)到比訓(xùn)練單個模型更好的分類結(jié)果,并且比單模型具有更高的穩(wěn)定性。常見的集成方法有投票法、平均法、Boosting、Bagging、Stacking,文中采用基于Stacking的集成學(xué)習(xí)方式,以下是Stacking算法的偽代碼。
輸入:訓(xùn)練數(shù)據(jù)集D={(x1,y1),(x2,y2),…,(xm,ym)};次級分類器L1,…,LT;元學(xué)習(xí)器L
過程1:學(xué)習(xí)次級分類器
Fort=1,2,…,T:
ht=Lt(D)
End;
過程2:構(gòu)建新的數(shù)據(jù)集用于預(yù)測
Fort=1,2,…,m:
End;
過程3:學(xué)習(xí)元分類器
學(xué)習(xí)H(Dh)
輸出:集成學(xué)習(xí)分類器H
首先,為了防止發(fā)生過擬合,文中采用5-折交叉驗證法,將農(nóng)作物病害原始訓(xùn)練數(shù)據(jù)集隨機劃分成5個大小基本相等的子集。
其次,采用Resnet101、RestNext50、SE-ResNet50、SE-RestNext50這4種網(wǎng)絡(luò)模型作為Stacking算法的基礎(chǔ)模型,對每一份訓(xùn)練數(shù)據(jù),都用剩余4份數(shù)據(jù)來訓(xùn)練模型,預(yù)測出該份數(shù)據(jù)的結(jié)果,這樣經(jīng)過5次交叉檢驗,將得到5個預(yù)測結(jié)果,然后分別對原始測試集進(jìn)行預(yù)測,將幾個結(jié)果加權(quán)平均。
最后,在這四個基礎(chǔ)模型完成交叉驗證過程后,根據(jù)它們輸出的樣本預(yù)測結(jié)果來構(gòu)建新的預(yù)測結(jié)果,作為第二層元學(xué)習(xí)器XGBoost輸入,由XGBoost進(jìn)行訓(xùn)練后得到最終預(yù)測結(jié)果。
文中采用了Resnet101、RestNext50[20]、SE-ResNet50、SE-RestNext50這4種網(wǎng)絡(luò)來提取圖像特征,然后將其預(yù)測結(jié)果作為Stacking算法第二層元學(xué)習(xí)器XgBoost的輸入,應(yīng)用于農(nóng)作物病害識別領(lǐng)域。文中流程如圖4所示,輸入為農(nóng)作物病害圖像,這幾種網(wǎng)絡(luò)分別從輸入的農(nóng)作物病害圖像中檢測提取出病害特征,然后應(yīng)用SoftMax分類器對圖像進(jìn)行分類,最后將預(yù)測結(jié)果作為XgBoost的輸入,得到最終的分類結(jié)果。
圖4 算法流程
實驗環(huán)境如表1所示。
表1 實驗環(huán)境
文中所用數(shù)據(jù)集來自AI Challenger(https://challenger.ai/competition/pdr2018),共有47 393張圖片,數(shù)據(jù)集分為訓(xùn)練集70%,驗證集10%,測試集20%,為方便結(jié)果對比,使用原驗證集作為測試集。該數(shù)據(jù)集按照物種-病害-程度分為61種不同的類別,10個物種(包括蘋果、櫻桃、玉米、葡萄、柑桔、桃、辣椒、馬鈴薯、草莓、番茄葉子圖片),27種病害(包括蘋果黑星病、蘋果灰斑病、蘋果雪松銹病、櫻桃白粉病、玉米灰斑病、玉米銹病、玉米葉斑病、玉米花葉病毒病、葡萄黑腐病、葡萄輪斑病、葡萄褐斑病、柑桔黃龍病、桃瘡痂病、辣椒瘡痂病、馬鈴薯早疫病、馬鈴薯晚疫病、草莓葉枯病、番茄白粉病、番茄瘡痂病、番茄早疫病、番茄晚疫病菌、番茄葉霉病、番茄斑點病、番茄斑枯病、番茄紅蜘蛛損傷、番茄黃化曲葉病毒病、番茄花葉病毒病,其中24個病害分一般和嚴(yán)重兩種程度),3種病害程度(分為健康、一般、嚴(yán)重)。其中番茄瘡痂病一般(第44類)和番茄瘡痂病嚴(yán)重(第45類)訓(xùn)練集中分別只有1張圖片,驗證集分別有1、0張圖片,所以為了提高準(zhǔn)確率,在圖像識別的過程中將44類,45類刪除。
深度學(xué)習(xí)是一種基于大數(shù)據(jù)的方法,數(shù)據(jù)的規(guī)模越大、質(zhì)量越高就越好,模型也能夠擁有更好的泛化能力,然而在實際采集數(shù)據(jù)的時候,往往很難覆蓋全部的場景,數(shù)據(jù)增強是擴充數(shù)據(jù)樣本規(guī)模的一種有效的方法,為了避免網(wǎng)絡(luò)過擬合現(xiàn)象,提升整體性能,文中對訓(xùn)練集中所有圖片進(jìn)行了隨機旋轉(zhuǎn)、上下翻轉(zhuǎn)、隨機裁剪的數(shù)據(jù)增強操作,測試集不做任何處理。
所用評價指標(biāo)公式如下:
其中,N(c)表示判斷正確的個數(shù),N(t)表示總個數(shù)。
先使用前面所提到的4種深度卷積神經(jīng)網(wǎng)絡(luò)對農(nóng)作物葉子病害及病害程度圖像進(jìn)行識別,表2是實驗所用參數(shù)。首先對訓(xùn)練集進(jìn)行5-折交叉驗證,將數(shù)據(jù)隨機劃分為5份,其中4份作為訓(xùn)練集,1份作為測試集,重復(fù)五次實驗,再用測試結(jié)果對原測試集進(jìn)行預(yù)測。在訓(xùn)練時,為了節(jié)省時間和提高分類性能,實驗運用遷移學(xué)習(xí),將低層次模型參數(shù)固定,在訓(xùn)練時不改變這些層的參數(shù),修改頂層的全連接層的參數(shù)為59類進(jìn)行訓(xùn)練。表3展示的就是在測試集上不同網(wǎng)絡(luò)模型的農(nóng)作物病害種類及其程度的識別結(jié)果。為方便結(jié)果記錄,將Resnet101記為M1,RestNext50記為M2,SE-ResNet50記為M3,SE-RestNext50記為M4。
表2 實驗所用參數(shù)
表3 不同網(wǎng)絡(luò)模型病害種類及程度實驗結(jié)果
從表3中可以看出,SE-RestNext50在單獨使用時比其他網(wǎng)絡(luò)提供了更好的性能,帶來了更高的準(zhǔn)確率。那么在對模型進(jìn)行融合時,可以優(yōu)先考慮使用SE-RestNext50網(wǎng)絡(luò)與其他網(wǎng)絡(luò)組合。實驗的最后,采用Stacking方法將模型預(yù)測結(jié)果輸入第二層元學(xué)習(xí)器XgBoost,從而得到最終的預(yù)測結(jié)果。對比單個卷積神經(jīng)網(wǎng)絡(luò)模型,為了實現(xiàn)更高的識別準(zhǔn)確率,文中將網(wǎng)絡(luò)采用排列組合的方式對單個網(wǎng)絡(luò)模型進(jìn)行融合。模型融合實驗結(jié)果如表4所示。
表4 模型融合實驗結(jié)果
表4說明基于模型融合的方法相比單模型有一定的優(yōu)勢,彌補了單網(wǎng)絡(luò)模型的不足,提高了識別準(zhǔn)確率。尤其是M1+M2+M3+M4組合,即將Resnet101,RestNext50,SE-ResNet50,SE-RestNext50這四種網(wǎng)絡(luò)組合比性能最好的單模型在準(zhǔn)確率上提高了0.26%,并且從一定程度上來說,模型融合相比單網(wǎng)絡(luò)模型結(jié)構(gòu)來說具有較好的穩(wěn)定性和泛化能力。
針對現(xiàn)有農(nóng)作物病害識別時單一模型準(zhǔn)確率不高、且多是對單一物種的不同病害的識別,提出了一種將多種主流神經(jīng)網(wǎng)絡(luò)融合的方法,還借鑒使用了focal loss損失函數(shù)解決了數(shù)據(jù)分類不均衡的問題。通過融合后的模型對農(nóng)作物病害及程度識別最高準(zhǔn)確率達(dá)到了87.19%,基于這種高水平的性能,很明顯卷積神經(jīng)網(wǎng)絡(luò)通過分析簡單的葉子圖像非常適合于農(nóng)作物病害的自動檢測和診斷。但是文中所用數(shù)據(jù)多為簡單背景并且數(shù)據(jù)量小,所以擴大現(xiàn)有數(shù)據(jù)庫以納入更多種類的植物物種和疾病應(yīng)成為下一個緊迫的任務(wù);另一個關(guān)鍵問題是未來在該領(lǐng)域驗證該方法的工作應(yīng)旨在開發(fā)基于移動設(shè)備的應(yīng)用程序,使農(nóng)民能夠快速監(jiān)測疾病情況。