許冠芝,王澤民,李成強
(西安工程大學(xué)電子信息學(xué)院,西安710600)
2017年我國發(fā)布了《新一代人工智能發(fā)展規(guī)劃》,其中包含了人工智能在智慧農(nóng)業(yè)領(lǐng)域的應(yīng)用,如使用農(nóng)業(yè)信息大數(shù)據(jù)智能決策分析系統(tǒng),建立完善一體化的智能農(nóng)業(yè)信息監(jiān)測系統(tǒng)等[1]。以人工智能技術(shù)解決傳統(tǒng)農(nóng)業(yè)問題是當(dāng)前的研究熱點。在此擬采用人工智能技術(shù)中的深度學(xué)習(xí)方法解決番茄葉部病害識別問題。番茄在我國栽種面積廣泛,是當(dāng)今食用量最多的果蔬之一,但番茄葉病一直制約著番茄產(chǎn)量和質(zhì)量的提升。番茄葉部病害類型的診斷對番茄病害的防治就顯得尤為關(guān)鍵。及早對番茄葉部病害進行識別防治,能最大化降低病害對番茄造成的經(jīng)濟損失,具有重要的理論和實際意義[2]。
傳統(tǒng)對于番茄葉部病害的識別主要依賴農(nóng)民或者專家下農(nóng)田親自檢查,依靠經(jīng)驗進行診斷。這種方法非常不便捷且診斷結(jié)果具有很強的主觀性[3]。近年來,對于農(nóng)作物病害診斷逐漸發(fā)展為利用計算機技術(shù)對植物病害圖片進行識別。文獻[4]提出了一種利用統(tǒng)計方法,通過番茄葉片不同病害顏色、形狀等特征不同來確定番茄病害的方法。該方法對顏色特征的提取依賴較大,某幾種識別率較高,而某些病害則出現(xiàn)較高誤診。文獻[5]提出了一種基于光譜反射特性的番茄葉片早疫病病害識別方法,該方法在某一波段內(nèi)識別率較高,具有極大的局限性。文獻[6]提出一種利用遺傳算法從圖像紋理、顏色、形狀等多個特征中選取穩(wěn)定性及分類能力強的特征用于病害識別的方法,該方法依賴于人工對特征的選取,具有很強的主觀性。文獻[7]提出一種基于神經(jīng)網(wǎng)絡(luò)的水稻二化螟蟲害的識別方法,該方法使用的樣本較少,增大實驗樣本可以提高對二化螟蟲的識別率。
綜上所述,現(xiàn)有方法大多是基于對病害的特征提取,不同病害對應(yīng)不同的顏色、形狀特征,不具有通用性。人工方式特征提取對專家經(jīng)驗要求較高。圖片的質(zhì)量又對結(jié)果影響較大。針對此類問題,擬采用深度學(xué)習(xí)方法,建立番茄葉部病害識別模型。
深度學(xué)習(xí)是人工智能領(lǐng)域最前沿的研究方向之一。深度學(xué)習(xí)技術(shù)已成功應(yīng)用于語音識別[8-9],圖像識別[10-11],自然語言處理[12-13]等領(lǐng)域。主要有深度置信網(wǎng)絡(luò)(Deep Belief Networks,DBN)[14],循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)[15],生成式對抗網(wǎng)絡(luò)(Generative Adversarial Networks,GAN)[16]和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)[17]等。因卷積神經(jīng)網(wǎng)絡(luò)對圖片特征提取效果最好,故在此采用卷積神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)構(gòu)建病害識別模型。
卷積神經(jīng)網(wǎng)絡(luò)一般由輸入層、卷積層、池化層、全連接層和輸出層構(gòu)成[18]。卷積層主要作用為對輸入數(shù)據(jù)進行特征提取。用一個合適大小的矩陣(卷積核)對輸入進行掃描,提取出輸入圖像的特征。卷積過程可以下式來表示:
式中,h表示輸出,x為輸入。輸入包含A個通道,即有A副圖像x1,x2,...,xA,相應(yīng)的掃描矩陣即為w1,w2,...,wA,偏置為b。
池化層主要作用是對輸入的特征進行進一步的提取,可以簡化網(wǎng)絡(luò)的復(fù)雜度,又能保留主要特征。以下為常用的兩種池化操作計算公式:
式(2)為平均池化公式,式(3)為最大池化公式,其中h為輸出,A為輸入,采樣塊大小皆為α×β。
全連接層的主要作用是將卷積和池化提取的局部特征重新通過權(quán)值矩陣全卷積為完整的特征,因為應(yīng)用到了所有局部特征,所以叫全連接。輸出層的作用就是最后對特征進行分類識別,輸出結(jié)果。
經(jīng)全連接層提取的特征維度較高、計算量大、訓(xùn)練耗時,需要對高維特征進行數(shù)據(jù)降維處理。PCA是一種用于數(shù)據(jù)降維的算法,中文名為主成分分析法[19],主要思想是對數(shù)據(jù)進行線性變換,將任意數(shù)據(jù)變換到新的坐標系中,保留數(shù)據(jù)中對方差影響最大的特征。為了得到包含最大差異性的主成分方向,需要計算數(shù)據(jù)矩陣的協(xié)方差,然后得到協(xié)方差矩陣特征向量,選擇特征值最大的K個特征所對應(yīng)的的特征向量組成的矩陣。這樣就可以將數(shù)據(jù)裝換到新空間,實現(xiàn)降維。
樣本均值、樣本方差、協(xié)方差計算公式依次如下所示:
2.3.1 Softmax函數(shù)與中心損失函數(shù)
Softmax函數(shù)用于解決多分類問題,是Logistic函數(shù)的推廣[20],適合于此處的番茄多種葉病識別。該函數(shù)會判斷輸入屬于某一個類別的概率,如果最大,這個類就輸出1;其他類輸出值接近0。由此可知該算法類間互斥,某個輸入只能屬于一個類。Softmax損失函數(shù)如下式:
其中,y(i)表示病害標簽,W是模型參數(shù),x(i)是訓(xùn)練樣本特征向量。k為病害類別數(shù)目,m為樣本大小。
在實際應(yīng)用中,當(dāng)提取的特征不足以用來對類別進行強分類時,經(jīng)常會出現(xiàn)類內(nèi)距離大于類間距離的情況發(fā)生,對最終的分類識別結(jié)果影響較大。在此問題上,Wen[21]等提出了中心損失函數(shù)。對于一個卷積神經(jīng)網(wǎng)絡(luò)來說,每次可計算出多個特征中心,同時根據(jù)特征值與其對于中心的距離計算損失函數(shù)。該函數(shù)可用下式表示:
其中,cyi是第yi個類的特征中心。xi是第i張圖片的特征值。類內(nèi)變化可用下式表示:
由式(9)可知,特征中心cyi隨深度特征的變化而變化。Lc相對于cyi的更新計算公式如下式所示:
其中,當(dāng)條件yi=j滿足時,δ(yi=j)值為1,不滿足時值為0。當(dāng)訓(xùn)練集規(guī)模較大時,需要以小批量的方式進行中心值的更新以解決一次性無法將所有中心獲取的問題。
2.3.2 改進的softmax函數(shù)
由前一節(jié)的論述可知,為了增大類間距離的同時減小類間距離,將softmax損失函數(shù)與中心損失函數(shù)結(jié)合起來,作為聯(lián)合監(jiān)督函數(shù)。聯(lián)合監(jiān)督函數(shù)代替原來的只含softmax函數(shù)作為輸出層的分類函數(shù)。聯(lián)合函數(shù)如下式所示:
其中,λ是用來平衡兩個損失的參數(shù)。合適的λ可以大大提高特征識別能力。由式(11)可知,當(dāng)λ為0時,該函數(shù)即為softmax函數(shù)。
基于深度學(xué)習(xí)的番茄葉片病害圖像識別算法設(shè)計一個卷積神經(jīng)網(wǎng)絡(luò)用于對輸入的病害圖像進行特征學(xué)習(xí)提取,對提取的病害特征進行PCA降維,最后利用改進的softmax函數(shù)進行病害分類??傮w框架如圖1所示。
圖1 算法總體框架圖
圖中,輸入是番茄葉部病害圖片,數(shù)據(jù)預(yù)處理是對輸入的圖片進行標準化和歸一化。核心點在于CNN網(wǎng)絡(luò)模型的構(gòu)建,以及建立基于改進的softmax函數(shù)番茄葉部病害識別模型。在此將深度學(xué)習(xí)技術(shù)應(yīng)用于傳統(tǒng)農(nóng)業(yè)病害識別問題,引入PCA降維算法并改進softmax函數(shù),以提高番茄葉部病害識別的準確度。
如前所述,組成卷積神經(jīng)網(wǎng)絡(luò)由輸入層、卷積層、池化層、全連接層和輸出層構(gòu)成。在此,根據(jù)數(shù)據(jù)集大小及番茄病害特點,設(shè)計一個七層CNN神經(jīng)網(wǎng)絡(luò),其模型如圖2所示。
此CNN模型共有七層(只計算卷積層和全連接層)。網(wǎng)絡(luò)的主要參數(shù)如下:
1)輸入為256×256×3的RGB圖像;
2)全部卷積層和全連接層激活函數(shù)都為Relu(Relu函數(shù)在輸入大于0直接輸入該值,輸入小于等于0時,輸出0);
3)卷積層 C1,卷積核大小為 6×6×3,設(shè)置 64 個卷積核,步長(stride)為 2,Padding=same(此處用padding來解決圖像邊界信息發(fā)揮較少問題,方法是進行零填充),輸出為 126×126×64;
4)池化層 S1,采樣區(qū)域為 3×3,步長為 2,采樣方式為最大采樣,輸入為C1的輸出,輸出為63×63×64;
5)卷積層 C2,卷積核大小為 3×3×64,設(shè)置 128個卷積核,步長為2,Padding=same,輸入為S1的輸出,輸出為 31×31×128;
6)池化層 S2,采樣區(qū)域為 3×3,步長為 2,采樣方式為最大采樣,輸入為C2的輸出,輸出為15×15×128;
7)卷積層C3,卷積核大小為3×3×128,設(shè)置256個卷積核,步長為1,Padding=same,輸入為S2的輸出,輸出為 15×15×256;
8)池化層 S3,采樣區(qū)域為 3×3,步長為 1,采樣方式為最大采樣,輸入為C3的輸出,輸出為7×7×256;
9)卷積層C4,卷積核大小為3×3×256,設(shè)置384個卷積核,步長為1,Padding=same,輸入為S3的輸出,輸出為 7×7×384;
10)池化層 S4,采樣區(qū)域為 3×3,步長為 1,采樣方式為最大采樣,輸入為C4的輸出,輸出為3×3×384;
圖2 CNN結(jié)構(gòu)模型圖
11)全連接層F1,使用了4096個神經(jīng)元;
12)全連接層F2,F(xiàn)3神經(jīng)元個數(shù)由PCA降維之后決定;
13)輸出層,采用改進的softmax函數(shù),輸出類別為10類病害類型和健康類型共11種類別。
至此,得到了一個基本的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),全連接層F1得到一個4096維度特征,經(jīng)PCA對高維特征進行降維。再通過改進的softmax函數(shù)進行病害種類識別。結(jié)構(gòu)模型圖如圖3所示。
圖3 PCA與聯(lián)合函數(shù)結(jié)構(gòu)模型圖
圖3所示結(jié)構(gòu)是對圖2全連接層F1之后的改進。圖2是本提取方法的基本結(jié)構(gòu),但在池化層S4之后使用的是3個全連接層。提取的番茄病害特征維度較高且會出現(xiàn)類內(nèi)距離大于類間距離情況,故圖3在圖2的基礎(chǔ)上,在全連接層F1之后加入了PCA對特征進行降維。全連接層F2與F3采用softmax損失和中心損失聯(lián)合函數(shù)對特征進行分類,以提高分類準確性。
以上述網(wǎng)絡(luò)結(jié)構(gòu)為基礎(chǔ),構(gòu)建完整CNN網(wǎng)絡(luò),對于PCA降維部分,在全連接層F1之后增加一層PCA降維層,在實驗時分別驗證不加入PCA降維,以及加入PCA降維之后。不同特征維度對識別精確度的影響。
對于全連接層F2及F3的softmax與中心損失聯(lián)合監(jiān)督算法部分,將算法的輸入抽象為:訓(xùn)練數(shù)據(jù)集{xi},分別初始化池化層和損失層參數(shù)θc、W及同時輸入?yún)?shù):λ和學(xué)習(xí)率μt,其中迭代的次數(shù)t初始化為0。輸出則抽象為輸出參數(shù)θc。聯(lián)合監(jiān)督的病害識別算法步驟可歸納如下:
Step1:判斷是否收斂,不收斂則跳向step2;
Step2:迭代次數(shù)t=t+1;
Step3:根據(jù)公式(11)計算聯(lián)合損失L;
Step5:利用梯度下降法公式更新參數(shù)W,cj,θc;
Step6:判斷是否收斂,如果收斂則迭代結(jié)束,否則從step1開始循環(huán)執(zhí)行。
在算法設(shè)計完成的基礎(chǔ)上,通過實驗驗證番茄葉部病害識別算法的準確度和魯棒性。實驗需要分別驗證病害特征維度對精確度的影響,以及改進的softmax函數(shù)對精確度的影響。
驗證病害特征維度對準確度的影響的方法:首先使用原softmax函數(shù),通過改變PCA降維維度,測試在softmax函數(shù)不改進的情況下,不同維度與準確度之間的關(guān)系,并根據(jù)結(jié)果得到最佳維度。
驗證改進的softmax函數(shù)對精確度影響的方法:由前一步得到了PCA降維的最佳維度,然后將該維度固定,測試改進的softmax函數(shù)中的參數(shù)λ對識別準確度的影響,以確定最佳λ。
觀察兩次準確度的變化,驗證本模型對番茄葉部病害識別準確度提升的作用,并與當(dāng)前通常使用的其他番茄葉病識別算法比較,驗證本算法的優(yōu)越性。
數(shù)據(jù)來源為:選取國外知名農(nóng)作物人工智能研究機構(gòu)CrowdAI網(wǎng)站所提供的番茄葉部病害圖片。另有部分圖片數(shù)據(jù)來自我國農(nóng)業(yè)網(wǎng)站,如安徽省農(nóng)業(yè)科學(xué)院情報研究所網(wǎng)站所提供的番茄病害圖片。
從數(shù)據(jù)集中選取了我國最常見的10類病害圖片,每類病害共選取600張圖片,加上正常番茄葉部圖片共11類,6600張圖片。這10類病害具體為番茄早疫病、番茄晚疫病、番茄葉霉病、番茄斑枯病、番茄花葉病、番茄棒孢菌病、番茄灰葉斑病、番茄細菌性斑點、番茄二斑葉螨病、番茄黃化曲葉病。將圖庫隨機劃分為訓(xùn)練集和測試集,訓(xùn)練集占總圖庫3/4,測試集為1/4。圖4給出了正常蕃茄葉片及部分患病葉片圖片。
圖4 數(shù)據(jù)集部分圖片
再對數(shù)據(jù)進行預(yù)處理。原圖分辨率大小不一,需要統(tǒng)一處理為256×256像素,以.jpg格式保存。使用谷歌tensorflow深度學(xué)習(xí)框架中提供的tf.image.resize_images函數(shù)調(diào)整圖像大小。此外還需對圖像進行歸一化處理。歸一化并不會改變圖像原有的信息,而是將圖像像素值取值范圍從0~255轉(zhuǎn)化為0~1之間,以方便卷積神經(jīng)網(wǎng)絡(luò)對圖像的處理。此處使用最大最小歸一法對,公式如下所示:
其中,xi表示圖像的像素點值。max()與min()分別表示最大、最小函數(shù)。
4.3.1 PCA降維
采用圖2結(jié)構(gòu)所示的卷積神經(jīng)網(wǎng)絡(luò)F1層輸出的病害特征有4096維,特征維度較大,計算和訓(xùn)練用時過長,降維可以去除冗余特征解決多重共線性問題。為了找到合適的特征維度既能去除冗余,又能擁有較好的識別精度,采用PCA算法對4096維的特征進行降維。經(jīng)過多次實驗得到精確度與特征維度曲線圖如圖5。從圖中可以看出,數(shù)據(jù)維度降低過程中,精確度呈非線性變化,在降低到64維時精確度達到最優(yōu);而低于16維時精確度急劇降低,從4096降到64維過程中精確度穩(wěn)步上升。這表明卷積神經(jīng)網(wǎng)絡(luò)提取的特征含有一定的冗余信息。去除這部分冗余,精確度便得到改善。而數(shù)據(jù)維度低于16維時,由于過度降維,去除了有用信息,導(dǎo)致精確度急劇下降。
圖5 精確度與特征維度曲線圖
4.3.2參數(shù)λ對分類結(jié)果的影響
合適的λ值可用來平衡聯(lián)合函數(shù),加強網(wǎng)絡(luò)對特征的分類能力。由于識別精度同時還受學(xué)習(xí)率的影響,首先固定學(xué)習(xí)率為0.5,改變λ值,測試不同λ值對識別精度的影響。測試結(jié)果如圖6所示。由圖可知,當(dāng)λ為0時,為單純只有softmax算法,識別精度沒有聯(lián)合函數(shù)高,當(dāng)λ取0.003時,識別精度最高,能比softmax改進之前精度提高2.5%左右。這也說明,一個合適的參數(shù)對于聯(lián)合函數(shù)是非常重要的。對于參數(shù)λ值的選取,目前只能通過多次實驗的方法確定。
圖6 參數(shù)λ與識別精確度關(guān)系圖
學(xué)習(xí)率對識別精度也有一定影響,故此還進行了學(xué)習(xí)率對識別精度影響的測試實驗,當(dāng)參數(shù)λ固定選取0.003時,測試不同的學(xué)習(xí)率對識別精度的影響。根據(jù)前人研究經(jīng)驗,學(xué)習(xí)率取值范圍限定為[0.001,1]。學(xué)習(xí)率與精確度關(guān)系曲線見圖7。依據(jù)分析,學(xué)習(xí)率最佳選擇為0.5。
所提出的方法在CrowdAI提供的數(shù)據(jù)源上獲得了較好的識別效果。每類番茄葉部病害的具體識別結(jié)果如表1所示。
圖7 學(xué)習(xí)率與識別精確度關(guān)系圖
表1 常見番茄葉部病害識別結(jié)果
從表1可知,所提出的番茄葉部病害模型識別率較高,綜合識別率能夠達到95%。為進一步說明所提模型的有效性和優(yōu)越性,將本方法與目前在農(nóng)業(yè)病害中常用的識別算法精確度進行性能對比,結(jié)果如表2所示。
表2 算法結(jié)果對比
從表2可以看出,所提出的基于深度學(xué)習(xí)的番茄葉部病害識別方法在識別精確度上優(yōu)于傳統(tǒng)的識別算法;SVM+CNN算法采用了傳統(tǒng)機器學(xué)習(xí)分類算法SVM及CNN網(wǎng)絡(luò)的結(jié)合,并未對特征進行降維及對softmax損失改進,本文方法比SVM+CNN方法準確率提高了8.2%;GA-BP算法采用的是一種人工對病害特征選取的算法,相比而言,本文采用深度學(xué)習(xí)算法具有對特征自動提取的優(yōu)點,本算法比GA-BP方法準確率提高4%;LSM-H算法適用于輪廓比較明顯的待識別物體,經(jīng)過Hought變換及最小二乘法得到最終識別結(jié)果,準確率較高,但是局限性較大本文算法比LSM-H方法準確率提高了0.8%;FCNN-H是快速歸一化互相關(guān)函數(shù)與霍夫變換結(jié)合的一種傳統(tǒng)識別算法,識別準確率較低,本算法比FCNN-HT方法準確率提高了9%。
通過與同類的深度學(xué)習(xí)算法以及傳統(tǒng)機器學(xué)習(xí)算法的對比,可見本模型對番茄病害識具有更高識別精確度及更強的識別通用性。通用性是指本方法能識別番茄10種常見葉子病害,通過增加樣本數(shù)據(jù),能夠做到識別更多的病害種類。而傳統(tǒng)機器算法通常只針對一種或一類進行識別。
提出了一種基于深度學(xué)習(xí)的番茄葉部病害識別算法模型,設(shè)計了一個七層卷積神經(jīng)網(wǎng)絡(luò),使用PCA降維算法并對softmax函數(shù)進行改進。該模型在CrowdAI所提供的數(shù)據(jù)集上的實驗結(jié)果表明:PCA對維度的降低能夠提高識別精確度,減少訓(xùn)練時間,softmax聯(lián)合函數(shù)能夠一定程度增大類間距離的同時減小類內(nèi)距離,提高CNN對病害特征的識別能力。實驗結(jié)果表明該模型對番茄10類病害綜合識別率達到95.7%,驗證了模型的有效性。