張建華 趙洪凱 姜雷 韓應欣 姜嬌陽 張海濤
(扎蘭屯職業學院信息工程系,內蒙古 扎蘭屯 162650)
民以食為天,農業是國民經濟的基礎,糧食生產是基礎的基礎。糧食事關國計民生,糧食穩則人心穩、社會穩,糧食安全是國家安全的重要基礎。玉米是我國產量最大的糧食作物。根據國家統計局數據公布2019年度我國的糧食產量是66384.00萬t,其中玉米產量是26077.00萬t,占比39.28%[1]。內蒙古地區作為我國第3大玉米產地,其玉米產量占全區糧食產量的74%[2],可見內蒙古地區玉米產量在全國糧食產量中重要地位。而呼倫貝爾市的糧食產量中玉米更是占據了絕對的主導地位[3]。
玉米在我國的糧食生產中占有主導作用,是因為玉米不僅是我國主要糧食作物同時也是非常重要的工業原料,在工業生產中也有廣泛應用,如可以用于制造乙醇、氨基酸等各種化工原料。因此無論是從糧食安全角度還是從工業生產的角度,穩定玉米的產量都有重要意義。然而,玉米病蟲害對其整個生長周期影響是巨大的,已成為影響我國玉米產量的主要原因[4,5]。
傳統發現病蟲害的方法是人工方法,通過農業技術人員來發現和判別病害嚴重程度,該方法存在耗時、費力的缺點。更可靠的方法是依靠實驗室判別,雖然準確率很高,但是需要經過菌種培養過程,周期漫長,不適合及時診斷。因此,找到一種簡單有效的判別玉米病蟲害方法,對輔助玉米種植、提高產量具有重要研究價值。
從目前國內外植物病蟲害識別研究來看,智能化的診斷方式正在逐步取代傳統人工方式,近年來人工智能識別技術在植物病蟲害的識別、診斷方面取得了顯著進步。對常見的植物病蟲害,人工智能技術已經具備較好的識別效果[6]。但是目前的病害檢測結果還基本停留在實驗室探索階段,識別效果還有待進一步的大田驗證。在移動終端普及的今天,要想在手機等移動設備上實現病變有效檢測還有較長的路要走。
本研究計劃通過對扎蘭屯地區玉米葉片病蟲害樣本采集、自動識別的研究,找到一種基于深度卷積神經網絡的輕便的玉米葉片病蟲害識別方法。使用TensorFlowlite工具把模型部署至Android平臺,開發出能夠識別玉米葉部病蟲害的APP。為扎蘭屯地區玉米葉部病蟲害的快速識別、積極防治提供科學的方法和依據,對減少人工投入、促進扎蘭屯地區農業的發展有重要意義。
玉米葉片病蟲害識別的模型訓練主要包括樣本采集、樣本分類、樣本裁剪、模型訓練、模型優化等幾個步驟。
使用機器視覺和圖像分類的作物病蟲害分類算法中,需要大量的樣本數據進行模型訓練。數據集在人工智能、機器學習領域占有重要地位[7],是機器具有“智能”的重要前提條件。在玉米葉片病蟲害的研究領域,也有了幾種公開可用的數據集,以下對3種典型的玉米葉部數據集加以簡要介紹。
田間玉米圖像數據集[8]是Wiesner-Hanks等在2015年建立的。該數據集是玉米北方葉枯病(NLB)的單一數據集。Plant Village數據集[9]是一個經常被使用的、公開的植物病蟲害數據集,該數據集的數據記錄中包含54309幅農作物圖像。大田作物病害識別研究圖像數據集[10]由中科院合肥智能機械研究所陳雷等建立。該數據集包括我國主要3種農作物的15種病蟲害樣本,樣本數量有17624張。
公共數據集可以用來進行模型的研究,但并不能滿足本研究的全部條件,原因有2方面:在扎蘭屯地區的病變種類公共數據集并不一定有,這樣就缺少了實用性的條件;某些病變的樣本比較少,訓練出來的模型不夠準確。鑒于以上原因本研究需要采集大量的樣本,建立自己的數據集。
1.2.1 數據采集
經過多處實地勘察,最終選擇呼倫貝爾市農業科學研究所的玉米種植基地作為采樣的基地。該基地有實驗地113.33hm2有余,種植有多個品種的玉米50hm2,距離扎蘭屯市區約50km,交通比較方便,便于多品種樣本的采集。
7月末時玉米接近成熟,到了采樣時期。根據基地玉米的發病情況,選擇玉米大斑病(真菌病)、雙斑螢葉甲病變(玉米蟲害)以及玉米葉斑病[11](真菌病)3種主要病變進行樣本的采集。為了使采樣盡可能接近將來手機APP使用拍照條件,采用一臺尼康D3100入門級單反相機,配18~55mm鏡頭,另外安排2人采用手機進行樣本拍攝。
樣本拍攝時使用自然光照、垂直葉片拍攝的方式,單反相機采用固定較小光圈模式,手機采用自動模式。經過4次采集,共采集原始樣本4516份,其中正常葉片500張。
1.2.2 數據處理
在進行采樣前,通過網上學習及專家指導,對這3種玉米葉部病變有了基本識別能力。采樣后,依據對病變的認知把病變樣本分成3類;請扎蘭屯職業學院農學方面專家對分類好的圖片進行審核,篩選掉不屬于這3種病變的樣本,有效保證原始數據的正確性。
為統一圖片形狀、去掉不必要的背景區域,進行樣本圖片的裁剪工作。由于拍攝的樣本圖片形狀都是矩形的,為了將來訓練需要,把圖片裁剪成正方形狀。在樣本圖片的裁剪過程中主要考慮以下因素:盡可能貼近將來手機拍照的真實場景,突出病變區域;盡量保留玉米葉子的基本特征,即葉子的邊緣和葉脈,實際裁剪中至少保留葉子一面的邊緣及葉脈;盡量不帶上其它玉米葉,尤其是玉米葉的葉脈部分;要考慮樣本圖片的多樣性,在病變葉的方向上以及病變的位置上多樣化一些。
裁剪后的樣本情況:玉米大斑病1172例、玉米葉斑病1529例、雙斑螢葉甲病1159例,正常樣本775例。整樣本圖片大小為256×256像素,用來進行模型訓練。
為了快速驗證數據采集及樣本裁剪的效果,特使用Keras[12]進行模型搭建。
1.3.1 模型訓練的軟、硬件條件
模型訓練采用Intel(R)Core(TM)i5-3210MCPU 2.50GHz,8GBRAM,無支持GPU加速的顯卡的筆記本電腦。軟件條件是Windows1064位操作系統,深度學習框架是TensorFlow2.0[13]+keras,python3.7,開發環境是JupyterNotebook[14]。
1.3.2 訓練模型及結果
本研究綜合考慮Batch、Epoch、數據增強[15]、卷積核數量[16]等因素,經過反復對比試驗,在超參數中Batch的大小為24、訓練次數為100輪,有數據增強的情況下,在訓練集和測試集上的正確率分別到達97.2%和95.1%,達到了本研究所需要的正確率指標。本模型輸入層的大小是256像素×256像素×3通道,輸出的結果是包含4個元素的張量,分別代表玉米大斑病、雙斑螢葉甲病及正常樣本的概率。模型各層簡要說明如表1所示,模型的結構圖1所示,模型的正確率及損失率曲線如圖2所示。

表1 模型各層簡要說明

圖1 玉米葉部病蟲害識別網絡結構

圖2 模型正確率及損失率曲線
為了了解本模型算法對哪些樣本的識別錯誤率比較高,識別錯誤的原因又是什么,即網絡是如何認錯的,以便對本研究做進一步的改進,故使用CAM(Class Activation Mapping)技術對本模型識別結果進行分析。
CAM是一個能夠可視化CNN的工具[17],通過CAM后再生成的熱力圖可以直觀地看出為了達到正確分類的目的,CNN更側重于哪塊區域,圖像上的哪一部分對于最后的分類結果影響最大。本文使用的方法是梯度類別響應圖(Grad-CAM),不需要對原模型進行修改,避免了重新訓練模型的過程。CAM過程:挑選出模型在測試集上所有分類錯誤的圖片,再根據原始圖像和該圖像的熱圖對比分析,找出分類錯誤的原因。
測試集識別錯誤情況如表2所示,測試集錯誤識別為其它分類情況如表3所示。

表2 測試集識別錯誤數量情況表

表3 測試集錯誤識別為其它分類情況表
通過表2和表3,再結合CAM熱圖,對模型識別效果分析如下。
識別效果最好的是雙斑熒葉甲和葉斑病,識別效果最不理想反而是正常葉片,其次是大斑病葉片。
正常葉片分別被誤認為雙斑熒葉甲葉片和大斑病葉片,大斑病分別被誤認為雙斑熒葉甲葉片和葉斑病葉片。正常葉片識別錯誤熱圖如圖3所示,大斑病葉片識別錯誤熱圖如圖4所示。

圖3 正常葉片識別錯誤熱圖

圖4 大斑病葉片識別錯誤熱圖
正常葉片識別錯誤率高的原因分析:訓練用樣本數量偏少,只有575例,和其它3種病變樣本在數量上差距明顯;正常樣本的葉片以外區域的特征相比較葉片本身特征更加突出一些,尤其是邊緣以外的亮點會被模型認為是雙斑熒葉甲病,如圖3a、圖3e;而正常葉片的葉脈被部分會被誤認為大斑病的長條狀病斑,如圖3c。
大斑病葉片識別錯誤率高的原因分析:大斑病的病變本身形狀比較長,在正方形裁剪時存在裁剪不完整的情況,如圖4c就是裁剪不完整;葉片邊緣高亮區域的影響,如圖4e;1種葉片上包含2種病變的干擾問題,如圖4g就屬于此類問題。
雙斑熒葉甲病變和葉斑病識別率高的原因分析:病變區域不大,病變邊緣清晰,特征比較明顯,便于裁剪后保留完整病變區域;形狀顏色比較統一,便于模型在訓練數據量不大的情況下提高識別的準確率。
針對以上模型識別結果的原因分析,在后續的樣本采集和圖片裁剪的過程中除了要加大樣本的采集數量外,還要有意識的避免干擾的發生,采集的過程中注意突出病變主體,盡量避免葉片邊緣存在高亮區域,裁剪的時候盡量保持病斑的完整性。
目前APP開發有2種方法可以選擇,基于客戶端/服務端的在線模式;完全的終端模式即離線模式。前者要實現病蟲害識別需要連接遠程服務器上事先設計好的病蟲害識別程序對樣本圖片進行判斷,再返回給終端識別結果。后者為病蟲害圖片采集、預測、顯示都在終端進行。前者對終端性能無特殊要求,后者則對終端有一定的性能要求。目前手機功能強大,性能優異,一些大型的APP都能流暢運行。但是考慮到有些偏遠地區或其它環境因素造成手機網絡信號可能欠佳,因此本病害識別系統采用離線模式。玉米葉部病變識別APP開發過程如圖5所示。

圖5 玉米葉部病變識別APP的開發流程
使用TensorFlowlite[18]提供的tf.lite.TFLiteConverter. from_keras_model類將本研究的Keras模型(模型文件擴展名為.h5)轉換為TensorFlow Lite模型格式(模型文件擴展名為.tflite)。
在部署到Android設備的過程中,需要用到模型的輸入和輸出層的名字,可以使用使用TensorFlowlite提供的tf.lite.Interpreter類獲取這2個層的名字。
本文采用了Android studio 4.1.1[19]作為集成開發環境。把轉換后的.tflite模型文件拷貝到app/src/main/assets文件夾,再建立文本文件label_list.txt,用來做正確分類的對應標簽。assets目錄及類別標簽如圖6所示。

圖6 assets目錄及類別標簽
主要函數的基本介紹如下。編寫一個名字為TFLiteClassificationUtil的工具類[20]。有關TensorflowLite模型預測的相關基本操作都在該類里完成,如圖片預處理、加載模型、預測結果等。TFLiteClassificationUtil工具類的方法有以下5個。
2.2.1 構造方法TFLiteClassificationUtil()
在該類的構造方法中,通過參數傳遞過來的模型路徑來加載模型。在方法的加載過程中初始化基本配置信息,如GPU的相關配置。TensorFlow lite提供了tensorflow-lite-support庫,可以通過其中的ImageProcessor方法就能方便的編寫一個預處理函數,在預測之前使用這個函數對圖像進行預處理,要注意的是此處的圖像預處理方式要和在訓練的時候圖像預處理一樣的。否則就會出現在電腦上準確率很高,在手機上準確率很低的問題。
2.2.2 重載方法predictImage()
因為本文采用了選擇現有圖片和實時拍照2種預測病害的方法,為了兼容這2種圖片預測方式,創建了2個重載方法,根據傳遞的參數不同來選擇使用方法,但都是通過調用predict()方法進行預測的。
2.2.3 圖像預處理方法loadImage()
該方法首先獲得輸入圖像的長度(h)和寬度(w)值,根據w和h中較小的值對圖像進行正方形居中裁剪;調用圖像縮放方法對圖像進行縮放,返回符合模型要求的圖像尺寸,返回的圖像大小是256像素×256像素。
2.2.4 獲取概率最大的標簽方法getMaxResult()
這個方法比較簡單,通過循環比較找到最大概率值,并返回其下標。通過下標就可以獲取概率最大的預測值標簽。
2.2.5 執行預測方法predict()
通過該方法得到輸入圖像的預測概率值,再查找標簽文件找到對應分類標簽并返回預測概率、標簽值、預測時間等信息。
玉米葉部病變識別APP開發完成,可以進行基本功能的測試。因為冬季沒有實際玉米葉片可供測試,因此測試主要采用選擇圖片的形式進行,對于實時識別的效果只能采用對著筆記本屏幕采集樣本圖片的形式進行。測試用例采用經過重新裁剪的樣本和部分原始樣本,并增加縮放、旋轉的變換,4種樣本每種選取20個。表4顯示了選擇圖片方式的預測情況。
由表4的預測結果顯示,選擇圖片的方式對4種樣本的識別準確率分別為95%、95%、100%和85%。識別準確率最好的是葉斑病達到100%,識別效果不佳是正常葉片只有85%。可以看出對3種病變識別的準確率都是很高的,對正常葉片的識別率偏低,基本與模型預測的結果相一致。另外,從識別正確時的平均概率來看,正常葉片也比較低。造成正常葉片識別率偏低原因應該是該類樣本數量不足。從預測時間來看,平均預測時間在100ms以內,速度還是很快的。

表4 選擇圖片方式預測情況表
對照屏幕實時識別的方式沒有辦法進行大面積的測試,只是選擇少部分樣本進行了簡單的測試,結果顯示模型對3種病變識別準確率也能達到80%以上,預測時間200ms以下。這種測試方式對正常葉片的識別準確率更低,只能達到50%上下。可能的原因是正常葉片特征相對3種病變不夠明顯,容易受到屏幕光線反光的影響。
經過以上的功能測試,本APP基本能夠滿足病變識別要求,達到了本研究的目的。等到2022年暑期可以去玉米大田里進行實地的測試,觀察在真實生產環境下該APP是否能滿足其功能需要。
本文以內蒙古地區玉米葉片的3種病蟲害為研究對象,通過數據采集、數據處理、卷積神經網絡模型訓練優化、Android手機APP開發等過程,完成了一種用于玉米葉部病蟲害檢測的APP。從而實現了對Android平臺終端拍攝的玉米葉片病蟲害圖片進行識別診斷。
本文給出的基于卷積神經網絡的玉米葉部病蟲害檢測模型及APP,其創新點主要有以下幾點:本研究與內蒙古地區玉米的生產實際相結合,將卷積網應用到當地玉米葉部病蟲害的檢測領域,并且在當地進行的樣本采集,對促進內蒙古地區玉米葉部病害的檢測智能化走向實際應用具有較大的意義;采用了輕量化的模型設計思路,在較小規模的網絡上,通過引入批標準化層、優化超參數,實現了較好的預測正確率和預測速度;開發了基于Android系統的APP,經過測試,選擇圖片識別準確率達到95%以上,實時預測也能達到較好的準確率,實現了離線預測。
本研究的不足之處有2點:由于本文僅針對3種玉米葉部病蟲害共計4500余張圖片進行分類,存在樣本數量不足、可預測病變數量不多的問題,要想走向應用,還有大量的工作要做;對于玉米葉部同時發生2種以上病變的情況,本模型還不能處理,解決這個問題很有實際意義,這類病變的檢測也是今后的研究工作之一。
本研究的未來與展望:擴大樣本采集數量,在未來2a進行更多樣本采集工作,擴充現有數據集;加強對圖像分類、識別新領域、新技術的研究,尤其要在多病變識別方面加強探索,把人工智能的前沿成果應用到本項目的后續開發中;積極推進本研究的實用化進程,為服務地方經濟做出積極探索;擴充到其它農作物,如大豆。