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