林開(kāi)顏, 梅飛, 吳軍輝, 郭文剛, 陳杰, 司慧萍
(同濟(jì)大學(xué)現(xiàn)代農(nóng)業(yè)科學(xué)與工程研究院,上海 200092)
病害是影響作物產(chǎn)量的重要因素之一。農(nóng)戶(hù)往往從自身經(jīng)驗(yàn)出發(fā),難以準(zhǔn)確識(shí)別病害種類(lèi),導(dǎo)致使用的藥劑不能起到防治作用,既浪費(fèi)了農(nóng)藥,又耽誤了病害防治的最佳時(shí)間。目前,農(nóng)作物病害主要依靠從業(yè)人員經(jīng)驗(yàn)進(jìn)行辨識(shí),不僅效率低下,還存在誤判等問(wèn)題,而利用計(jì)算機(jī)視覺(jué)可以提高病害識(shí)別的效率和準(zhǔn)確度。
傳統(tǒng)的病害識(shí)別技術(shù)需要先分割作物葉片圖像,再提取病害特征并利用分類(lèi)器進(jìn)行分類(lèi)?;谔卣鞣诸?lèi)的識(shí)別方法首先使用最大類(lèi)間方差法、分水嶺算法等分割葉片,然后利用尺度不變特征轉(zhuǎn)換(scale-invariant feature transform,SIFT)、方向梯度直方圖(histogram of oriented gradient,HOG)等特征描述子提取特征,最后結(jié)合支持向量機(jī)等淺層機(jī)器學(xué)習(xí)分類(lèi)算法進(jìn)行分類(lèi)。Mohamad等[1]采用基于二叉樹(shù)的支持向量機(jī)算法,利用32類(lèi)作物葉片數(shù)據(jù)集進(jìn)行網(wǎng)絡(luò)訓(xùn)練,與基于BP(back propagation)神經(jīng)網(wǎng)絡(luò)的試驗(yàn)結(jié)果相比,該方法的分類(lèi)準(zhǔn)確率更高。Jagadeesh等[2]通過(guò)預(yù)處理、分割、提取和減少作物受真菌影響部分的特征,采用離散小波變換(discrete wavelet transformation,DWT)進(jìn)行特征提取,并利用主成分分析(principal component analysis,PCA)對(duì)特征進(jìn)一步降維,然后將簡(jiǎn)化的特征輸入到分類(lèi)器進(jìn)行識(shí)別。由于作物不同病害特征差異大,難以找到合適的算法來(lái)識(shí)別多種作物的病害。近年來(lái),在圖像處理領(lǐng)域,以卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)為代表的深度學(xué)習(xí)模型突破了人類(lèi)自身的識(shí)別能力。基于深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)病害特征識(shí)別法也受到越來(lái)越多的關(guān)注。國(guó)內(nèi)外許多學(xué)者開(kāi)始利用深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)來(lái)研究農(nóng)作物病害問(wèn)題。師韻等[3]針對(duì)4種冬棗果實(shí)病害,收集圖像后通過(guò)旋轉(zhuǎn)、尺寸縮放等方式進(jìn)行擴(kuò)展,并利用深度卷積神經(jīng)網(wǎng)絡(luò)提取病害圖像的有效特征,與傳統(tǒng)作物病害識(shí)別法相比,該方法的特征提取過(guò)程更快,識(shí)別率達(dá)到92%以上。郭小清等[4]針對(duì)番茄不同病害間的相似性以及同種病害在不同時(shí)期病斑的差異性問(wèn)題,利用不同尺寸的卷積核提取特征,并在此基礎(chǔ)上設(shè)計(jì)了圖像識(shí)別系統(tǒng),該系統(tǒng)的平均準(zhǔn)確率達(dá)92.7%。鮑文霞等[5]對(duì)小麥穗部的赤霉病進(jìn)行研究,先用U-Net網(wǎng)絡(luò)將單株麥穗分割出來(lái),再使用多路卷積神經(jīng)網(wǎng)絡(luò)在由2 000多張單株麥穗構(gòu)成的圖像數(shù)據(jù)集上進(jìn)行病害識(shí)別。Sladojevic等[6]利用深度學(xué)習(xí)對(duì)作物病害進(jìn)行分類(lèi)識(shí)別,基于14類(lèi)病害數(shù)據(jù)集對(duì)模型進(jìn)行訓(xùn)練,然后進(jìn)行微調(diào),其識(shí)別精度最低為91%,最高可達(dá)98%。上述方法需要大量的數(shù)據(jù)集樣本,針對(duì)小樣本數(shù)據(jù)集,遷移學(xué)習(xí)法可以取得更好的效果。馮曉等[7]以小麥葉部病害圖像為研究對(duì)象,基于MobileNetV2構(gòu)建小麥葉部病害圖像識(shí)別模型,模型初始參數(shù)使用遷移學(xué)習(xí)算法訓(xùn)練好的參數(shù),將模型的所有層設(shè)置為可訓(xùn)練的遷移學(xué)習(xí)方式,并利用數(shù)據(jù)增強(qiáng)法增加樣本量,該模型對(duì)3種小麥病害圖像的平均識(shí)別準(zhǔn)確率高達(dá)99.9%。Amanda等[8]以木薯紅蜘蛛、褐斑病、綠螨病為研究對(duì)象,利用遷移學(xué)習(xí)訓(xùn)練深度卷積神經(jīng)網(wǎng)絡(luò)并進(jìn)行試驗(yàn)分析,結(jié)果顯示,該網(wǎng)絡(luò)對(duì)木薯3種病害的平均分類(lèi)準(zhǔn)確率超過(guò)95%。Afifi等[9]使用卷積神經(jīng)網(wǎng)絡(luò)ResNet構(gòu)建網(wǎng)絡(luò)模型,并在PlantVillage數(shù)據(jù)集上訓(xùn)練,結(jié)果表明當(dāng)目標(biāo)圖像與原數(shù)據(jù)集的拍攝條件差異較小時(shí)模型具有更好的移植性。
前人基于卷積神經(jīng)網(wǎng)絡(luò)的方法雖取得了較好的效果,但多需要大量的數(shù)據(jù)集樣本,且只針對(duì)同一種作物的不同病害。目前,廣泛使用的分類(lèi)網(wǎng)絡(luò)包含ResNet[10]、EfficientNet[11]、VggNet[12]、InceptionNet[13]等。不同的神經(jīng)網(wǎng)絡(luò)框架各有優(yōu)缺點(diǎn),EfficientNet強(qiáng)調(diào)神經(jīng)網(wǎng)絡(luò)參數(shù)在時(shí)間上的效率;VggNet在深層神經(jīng)網(wǎng)絡(luò)的性能更好;ResNet針對(duì)梯度消失、梯度爆炸問(wèn)題具有很好的應(yīng)對(duì)能力。遷移學(xué)習(xí)可以幫助網(wǎng)絡(luò)更好、更快地提取特征,一方面,小樣本量會(huì)導(dǎo)致卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的特征比較粗糙,細(xì)粒度不夠,難以表達(dá)病害的共同特征;另一方面,模型訓(xùn)練需要較長(zhǎng)時(shí)間,采用遷移學(xué)習(xí)能夠減少模型訓(xùn)練的時(shí)間。針對(duì)多種作物數(shù)據(jù)集樣本量小且不均衡的問(wèn)題,本研究欲采用卷積神經(jīng)網(wǎng)絡(luò)和遷移學(xué)習(xí)相結(jié)合的方法,幫助網(wǎng)絡(luò)更好、更快地提取病害特征,并搭建病害識(shí)別平臺(tái),以便更快、更準(zhǔn)確地識(shí)別病害種類(lèi)。
本研究采用AI CHANLENGER 2018農(nóng)作物病害數(shù)據(jù)集的16 892張作物病害圖片作為試驗(yàn)數(shù)據(jù),該數(shù)據(jù)集可以按“物種-病害-程度”分類(lèi),數(shù)據(jù)集的部分示例圖像如圖1所示;該數(shù)據(jù)集涉及的病害種類(lèi)也比較全面,涵蓋了常見(jiàn)的作物病害,樣本數(shù)據(jù)如表1所示。
表1 樣本數(shù)據(jù)匯總Table 1 Sample data summary
圖1 作物病害示例Fig.1 Examples of crop diseases
對(duì)數(shù)據(jù)集進(jìn)行圖片尺寸重定義、樣本批次歸一化處理、圖片去均值化等預(yù)處理。將圖片重定義為224×224×3,降低像素,去除冗余信息,從而減少計(jì)算量。圖片去均值化是為標(biāo)準(zhǔn)化并移除圖像的平均亮度值,具體操作為:對(duì)于尺寸重定義后的圖像,每個(gè)樣本的各像素值減去整個(gè)訓(xùn)練樣本的平均像素值。
1.3.1 模型結(jié)構(gòu) ResNet網(wǎng)絡(luò)基于VGG19網(wǎng)絡(luò)進(jìn)行修改,通過(guò)短路機(jī)制加入殘差單元,末端使用Softmax分類(lèi)器輸出最終類(lèi)別。Softmax 分類(lèi)器會(huì)將輸入映射成(0,1),即每個(gè)類(lèi)別的概率,然后選取概率最大的類(lèi)別作為最終輸出。本試驗(yàn)采用基于ResNet50神經(jīng)網(wǎng)絡(luò)和遷移學(xué)習(xí)相結(jié)合的方法監(jiān)測(cè)識(shí)別病害。由于ResNet網(wǎng)絡(luò)對(duì)于各種粒度的特征給予相同程度的關(guān)注,而同種類(lèi)不同程度病害對(duì)應(yīng)的作物葉片差異往往不顯著。因此,本研究對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了修改,以便于區(qū)分病害檢測(cè)網(wǎng)絡(luò)的一些細(xì)粒度特征。SE(Squeeze-and-Exciation)模塊可以自動(dòng)學(xué)習(xí)到不同通道之間特征的重要程度[14],使得網(wǎng)絡(luò)更加關(guān)注病害的細(xì)粒度特征,因此,采用SE模塊改進(jìn)網(wǎng)絡(luò)。該模塊輸入圖像H×W×C,通過(guò)壓縮(Fsq)和激勵(lì)(Fex)操作,拉伸成1×1×C后與原圖像相乘,并將每個(gè)通道賦予權(quán)重。SE模塊提升了模型對(duì)通道特征的敏感性,并且是輕量級(jí)的,只需要增加較少的計(jì)算量就可以帶來(lái)性能的提升。病害檢測(cè)模型整體結(jié)構(gòu)如圖2所示。
圖2 病害檢測(cè)模型整體結(jié)構(gòu)Fig.2 Overall structure of crop disease detection model
1.3.2 參數(shù)設(shè)計(jì) 按照對(duì)學(xué)習(xí)率、每個(gè)batch中訓(xùn)練樣本的數(shù)量(batch size)、其他參數(shù)的順序調(diào)整參數(shù)。學(xué)習(xí)率表示模型權(quán)重更新的速度,設(shè)置過(guò)大代價(jià)函數(shù)波動(dòng)大,訓(xùn)練結(jié)果不精確;太小則網(wǎng)絡(luò)收斂速度慢,訓(xùn)練時(shí)間變長(zhǎng)。本研究將學(xué)習(xí)率設(shè)置為0.001。每次試驗(yàn)運(yùn)行50 epochs,1 epoch即1個(gè)完整的數(shù)據(jù)集通過(guò)神經(jīng)網(wǎng)絡(luò)1次且返回1次。每個(gè)epoch選取的樣本數(shù)(batch size)習(xí)慣上設(shè)置為2的n次冪,這樣可以加快計(jì)算速度,本研究將其分別設(shè)置為32、64、128和256,比較后最終將batch size設(shè)置為128。模型訓(xùn)練中使用Adam優(yōu)化算法,該算法在非凸優(yōu)化問(wèn)題中有計(jì)算高效、所需內(nèi)存少、適應(yīng)于非穩(wěn)態(tài)目標(biāo)以及適合解決大規(guī)模數(shù)據(jù)和參數(shù)優(yōu)化問(wèn)題等諸多優(yōu)勢(shì),具體算法如下。
式中,m為對(duì)梯度的一階矩估計(jì);v為對(duì)梯度的二階矩估計(jì);β1為一階矩估計(jì)的指數(shù)衰減率;β2為二階矩估計(jì)的指數(shù)衰減率;gt為時(shí)間步為t時(shí)的梯度;θ為更新的參數(shù);α為學(xué)習(xí)率;ε為維持?jǐn)?shù)值穩(wěn)定性而添加的常數(shù)。
Adam優(yōu)化算法超參數(shù)采用框架默認(rèn)參數(shù),其中,α為0.001;β1為0.900;β2為0.999;ε為10-8。經(jīng)交叉驗(yàn)證,試驗(yàn)中設(shè)置隱含節(jié)點(diǎn)Dropout率為0.5,L2正則化參數(shù)為0.000 5。
本試驗(yàn)選用交叉熵?fù)p失函數(shù)(Loss),公式如下。
式中,yi為標(biāo)簽值;yi′為預(yù)值測(cè)。
基于病害檢測(cè)模型開(kāi)發(fā)一款實(shí)時(shí)在線(xiàn)農(nóng)作物病害識(shí)別Web服務(wù)平臺(tái),整體功能如圖3所示。主要功能包括用戶(hù)管理、檢測(cè)、百科全書(shū)、社區(qū)共4個(gè)模塊,其中,檢測(cè)模塊是該Web的核心。該平臺(tái)首先通過(guò)TensorFlow Serving和Docker實(shí)現(xiàn)模型的部署,使用TensorFlow Serving在服務(wù)器上為訓(xùn)練模型提供高性能、支持并發(fā)、高吞吐量的API,使用Docker容器將多種服務(wù)以鏡像的形式掛載其中,以O(shè)pencv、Emgu等計(jì)算機(jī)視覺(jué)算法庫(kù)為工具,使用net進(jìn)行開(kāi)發(fā)。
圖3 系統(tǒng)功能Fig.3 System function
該系統(tǒng)分為管理員和普通用戶(hù)。管理員可通過(guò)對(duì)病害數(shù)據(jù)增、刪、改、查等操作對(duì)系統(tǒng)進(jìn)行維護(hù),例如,通過(guò)輸入作物相關(guān)信息以及對(duì)應(yīng)圖片,將作物相關(guān)信息存入后臺(tái),完善作物病害特征庫(kù);普通用戶(hù)可通過(guò)上傳圖片識(shí)別病害,并顯示該病害的基本信息和防治策略,也可查看病害圖譜,了解病害的相關(guān)信息。
本研究檢測(cè)的病害種類(lèi)存在樣本數(shù)量不均衡問(wèn)題,以番茄數(shù)據(jù)集為例,檢測(cè)的病害種類(lèi)多達(dá)9種,數(shù)據(jù)集樣本超過(guò)10萬(wàn)張,如圖4所示。黃花曲葉病的樣本數(shù)量為葉霉病、瘡痂病等的數(shù)倍,該病害的樣本數(shù)呈長(zhǎng)尾分布。若單純的以該數(shù)據(jù)集為輸入,病害檢測(cè)模型會(huì)偏重于樣本數(shù)最多的病害類(lèi)別,這將會(huì)導(dǎo)致預(yù)測(cè)結(jié)果產(chǎn)生較大誤差。
圖4 番茄樣本分布圖Fig.4 Distribution map of tomato samples
借鑒解決場(chǎng)景圖生成中謂語(yǔ)估計(jì)有偏性問(wèn)題的做法[15],利用2次有偏預(yù)測(cè)的差作為無(wú)偏預(yù)測(cè),如圖5所示。左邊為事實(shí)因果圖,右邊為反事實(shí)因果圖,其中,I是病害圖像;X是提取的特征;Z是標(biāo)簽;Y是病害預(yù)測(cè)。在事實(shí)因果圖中,有3個(gè)箭頭指向Y,分別是X、I、Z,表示Y是由X、I、Z共同引起的組合效應(yīng);在反事實(shí)因果圖中,X被干預(yù),Z依然保持原始值,預(yù)測(cè)出Y;最后2個(gè)預(yù)測(cè)結(jié)果相減,得到最終的總直接效應(yīng)(total direct effect,TDE),即最終的預(yù)測(cè)結(jié)果。
圖5 病害識(shí)別的無(wú)偏預(yù)測(cè)Fig.5 Unbiased prediction for disease recognition
模型訓(xùn)練過(guò)程中,病害種類(lèi)檢測(cè)準(zhǔn)確率、病害程度準(zhǔn)確率及損失函數(shù)隨訓(xùn)練周期的變化曲線(xiàn)分別如圖6和圖7所示。以番茄為例,隨著訓(xùn)練的進(jìn)行Loss函數(shù)平穩(wěn)下降,最終穩(wěn)定在0.1左右;病害種類(lèi)(acc_kind)和病害程度(acc_degree)準(zhǔn)確率隨著訓(xùn)練的進(jìn)行穩(wěn)定上升,最終都達(dá)到90%以上。
圖6 作物病害檢測(cè)準(zhǔn)確率變化曲線(xiàn)Fig.6 Change curve of crop disease detection accuracy
圖7 作物病害Loss函數(shù)變化曲線(xiàn)Fig.7 Change curve of crop disease Loss function
由表2可知,病害程度識(shí)別準(zhǔn)確率和病害種類(lèi)識(shí)別準(zhǔn)確率都達(dá)到了預(yù)期的要求,滿(mǎn)足了檢測(cè)病害的期望。添加SE模塊后,識(shí)別準(zhǔn)確率明顯提高,由此可見(jiàn),SE模塊引入通道注意力機(jī)制加強(qiáng)了特征圖,利用提取通道間的相關(guān)性增強(qiáng)有效特征并抑制無(wú)效特征,從而提升模型準(zhǔn)確率。以番茄數(shù)據(jù)集為例,在病害種類(lèi)多達(dá)9種的情況下,識(shí)別準(zhǔn)確率仍能超過(guò)90%,病害程度識(shí)別準(zhǔn)確率更是高達(dá)99%。綜上所述,該模型算法能夠有效地識(shí)別病害種類(lèi),且精度能夠滿(mǎn)足實(shí)際應(yīng)用需求。
表2 檢測(cè)結(jié)果匯總Table 2 Summary of test results
本研究開(kāi)發(fā)的作物病害智能圖像識(shí)別系統(tǒng)的界面如圖8所示。用戶(hù)通過(guò)點(diǎn)擊“上傳圖片”按鈕提交需要識(shí)別的圖片,待檢測(cè)圖片必需包含完整的葉片,且作物病害部位特征清晰;然后點(diǎn)擊下方的“檢測(cè)”按鈕進(jìn)行病害識(shí)別,系統(tǒng)后臺(tái)會(huì)根據(jù)所訓(xùn)練的模型進(jìn)行預(yù)測(cè)識(shí)別,再與數(shù)據(jù)庫(kù)中的病害信息進(jìn)行匹配;最后在界面右側(cè)顯示出識(shí)別后的病害名稱(chēng)、特征及相應(yīng)防治策略等相關(guān)信息。
圖8 病害檢測(cè)結(jié)果Fig.8 Disease detection results
作物病害特征復(fù)雜,而現(xiàn)有作物病害程度分級(jí)模型存在精度不高、難以滿(mǎn)足精準(zhǔn)施藥要求等問(wèn)題,本研究利用卷積神經(jīng)網(wǎng)絡(luò)和遷移學(xué)習(xí)法對(duì)水稻、番茄、柑橘和蘋(píng)果4種作物的病害葉片圖像識(shí)別進(jìn)行了研究。通過(guò)構(gòu)建數(shù)據(jù)集,采用遷移學(xué)習(xí)技術(shù)與ResNet模型相結(jié)合的方法,進(jìn)行了病害識(shí)別和病害程度分級(jí)的研究,結(jié)果表明,本研究構(gòu)建的模型算法能夠有效地識(shí)別病害,對(duì)病害程度識(shí)別的平均準(zhǔn)確率為94.16%,對(duì)病害種類(lèi)識(shí)別的平均準(zhǔn)確率為92.45%。
針對(duì)數(shù)據(jù)集樣本長(zhǎng)尾分布的分布不均衡問(wèn)題,常見(jiàn)的解決方案有3種:樣本重采樣,給頻率較低的類(lèi)別以較高的采樣概率;Loss重采樣,給稀有類(lèi)別的病害以較高的損失權(quán)重;使用FocalLoss替代交叉熵?fù)p失函數(shù)。其中,F(xiàn)ocalLoss能夠自動(dòng)懲罰學(xué)習(xí)較好的樣本,使模型更關(guān)注于難例樣本的學(xué)習(xí)。本研究借鑒了解決場(chǎng)景圖生成中謂語(yǔ)估計(jì)的有偏性問(wèn)題的做法,有效提高了模型的精度,進(jìn)而提升了識(shí)別的準(zhǔn)確率。
為方便用戶(hù)快速準(zhǔn)確地識(shí)別病害,本文基于c#.net core 構(gòu)建了病害監(jiān)測(cè)服務(wù)平臺(tái),利用Python語(yǔ)言和C#語(yǔ)言相結(jié)合開(kāi)發(fā)了病害識(shí)別服務(wù)軟件,能夠準(zhǔn)確識(shí)別病害的種類(lèi)及程度,并給出相應(yīng)的防治建議。