明德廷,李娟,王興宇
(江西農業大學計算機與信息工程學院,江西 南昌 330045)
江西省氣候溫暖濕潤,每年季風氣候帶來充沛的雨量,很適宜水稻的栽種;同時地形多以平原、丘陵、山地為主,其中鄱陽湖平原、吉泰盆地、贛撫平原和贛西地區都以種植水稻為主[1],也是江西省的重要糧食生產基地,占全省耕地面積的六成以上。據報道,江西糧食產量從2012 年開始連續9 年穩定在430 億斤以上。
影響水稻產量的因素很多,其中水稻病蟲害的影響尤為突出[2],其中危害最為嚴重是紋枯病、稻瘟病、稻縱卷葉螟、稻飛虱、水稻螟蟲等[3]。
本文使用基于深度學習的目標檢測算法在構建的數據集上進行識別,使用PyQt框架將訓練好的YOLO v5 模型嵌入到應用程序中,實現了一個可以對害蟲進行檢測與識別并提供相應防治建議的系統。Py-Qt是一個將Python編程語言與Qt庫融合,用于創建圖形用戶界面應用程序的工具包。
目標檢測是在圖像或者視頻中精確找到特定物體所在位置并標注出物體類別的一個多任務算法。YOLO 是“You Only Look Once”的首字母縮寫,YOLO v5 是一種將圖像劃分為網格系統的對象檢測算法。在圖像的不同位置上進行著均勻的不同尺度和比例的密集采樣,然后再利用提取特征并進行分類。YOLO v5 模型分為四個部分:輸入端、Backbone、Neck 以及Prediction[4]。
為了加快模型的訓練速度和精度以及模型收斂速度,YOLO v5 采用基于Mosaic 數據增強功能,即將四張圖像按照隨機裁剪和隨機排列的方式進行拼接組成一張圖像,還可隨機縮放。
YOLO v5提出了一種自適應圖片縮放方法:根據原始圖像與網絡要求圖像大小計算縮放比例,計算縮放后的圖像大小,添加最少的黑邊。既解決了輸入圖像大小不一問題,也減少了過多噪聲對實驗的影響。
本文使用的數據集是基于IP102 數據集建立的,因為IP102 數據集包含的害蟲種類多達102 種,且背景復雜,更符合目標檢測在農田害蟲檢測與識別領域的實際環境。
為了選擇適合本文數據集的最佳模型,對本文數據集進行全面的分析。通過各類害蟲數量的分析、數據集真實目標框的大小分布,數據集真實目標框中心點的位置分布;綜合以上幾點分析,該數據集存在以下特點:1)各類害蟲數據分布較為平衡;2)數據集中的害蟲大多分布在圖像中心;3)屬于大目標檢測。基于這些特點,本文選擇YOLO v5 模型進行訓練,因為其網絡結構較小,網絡參數更少,節約內存空間的同時提高了檢測速度,適用于大目標檢測。
數據集可以通過線上標注,完成后以VOC格式保存。所有樣本會按照一定的比例對標簽文件和害蟲圖像進行分類,測試集、驗證集、訓練集的比例為2∶2∶6。
在正確讀取圖像文件和標簽文件后,按照比例在整個數據集中隨機選擇樣本作為訓練驗證集,其余的樣本就是測試集,其作用主要用來檢測訓練后的測試模型效果,然后按照選定的比例隨機地從訓練驗證集中選擇樣本用作訓練集,剩余即為驗證集。
為了評估目標檢測模型的分類和定位效果,常用混淆矩陣、準確度(Accuracy)、精確度(Precision)、召回率(Recall)、平均精度(AP)以及F1分數等評價指標對模型進行評價。
為了縮短網絡的訓練時間,加快網絡收斂速度,使用YOLO v5s預訓練權重進行訓練,使用Python 3.6。訓練模型開始訓練時設定學習率衰減因子為20%,學習率為1%,訓練輪數設置為150 epochs(向前和向后傳播中所有批次的單次訓練迭代),在配置好相應的預訓練環境、創建配置文件、修改模型配置文件后,使用YOLO v5s模型訓練自己的數據集。
結果表明,在前100 epochs內,精度和召回率隨著epochs的增加快速增長,在100 epochs后,增長速度明顯變緩并趨于平衡,說明將訓練輪數設置為150 epochs是合理的,因為該設置不僅使得模型收斂達到了最佳效果,而且減少了模型由于更多無用訓練輪數帶來的資源消耗。YOLO v5s 模型最終在測試集的精度達到0.833,召回率達到0.809,可以認為模型達到了預期檢測效果。
本文將YOLO v5算法嵌入病蟲害診斷模塊中,其使用流程為:用戶登錄成功后進入病蟲害檢測界面,新用戶點擊注冊按鈕進入注冊界面,注冊完成后進入登錄界面,登錄成功則進入檢測界面。
用戶在檢測界面點擊“選擇weights”按鈕完成訓練權重文件的選擇,點擊“初始化模型”按鈕加載模型完成初始化后,根據自己的需求對選擇的害蟲數據文件進行檢測并在檢測界面顯示檢測結果以及相應的防治措施。
為了響應系統是否存在用戶信息,建立一張用戶信息表以鍵值對形式存儲用戶信息,可以給每個用戶分配不同的權限,執行相應的功能,以完成不同的任務。
當農作物發生了病蟲害時使用農藥一種有效手段,但也是一種迫不得已的手段,有時效果不一定很好,從環保和經濟效益上也不劃算。所以在發生病蟲害之前做好預測工作是很重要的,如果對預測預報的重要性認識不足,就可能錯過病蟲害防治的最佳時期。
水稻病蟲害的預測預報主要經歷了四個階段:經驗預測、實驗預測、統計預測和信息預測[5]。
本系統綜合使用已有的一些技術和方法,獲取了水稻病蟲害的相關認知構建一個病蟲害知識庫,然后使用相關算法在此知識庫上建立模擬模型,進行挖掘推理以及模式識別,從而獲得病蟲害發生與流行規律。
病蟲害預測預報其實也是一個專家系統,即把水稻病蟲害方面專家的系統性知識獲取過來,進行整理存儲在數據庫中,采取推理和匹配技術,并輔以人機交互界面,提供給用戶使用,達到人類專家的水平完成水稻病蟲害的識別。用戶在系統中輸入農作物目前的現狀、病蟲害的癥狀以及天氣情況等,同時按照系統要求輸入相關參數值,就可以得出何種病蟲害及處理措施。
專家知識的獲取途徑少難度較大,主要通過獲取公開發布的資料,再進行整理。本系統收集了1995—2013 年之間江西省各地區水稻主要病蟲害的發生情況。系統的知識庫主要由苗期病害庫,成株期葉部病害庫,成株期葉鞘病害庫,主要水稻蟲害庫組成。
在對收集的數據分析后,可從中提取一些關鍵信息,比如病蟲害發生的時間節點、每次發生的數量、危害程度等。根據提取的數據可以下列方法為病蟲害的發生提供預測預報。
1)時間序列分析
時間序列分析是指對某個數據x 進行觀察測量時,在某一時刻t 的測量值x(t),如果在一系列的時間節點t1,t2,...,tn上就可以得到一組觀測值x(t1),x(t2),...,x(tn),我們再對這些數據序列進行分析研究。通常時間序列值具有一定的規律性比如符合某些概率分布規律,通過這些數值統計分析方法總結出某些規律,并用它進行病蟲害的預測預報。
在本系統中x(t)是指t年蟲害發生的情況,那么連續若干年病蟲害發生的情況即為一個序列集合x(t1),x(t2),...,x(tn),然后在此序列集合上分別采用增長曲線預測、二次曲線趨勢預測、指數平滑等方法做一個趨勢預測,再把各種預測結果發生的概率值作為系數,進行加權平均所得的值即為最終的預測結果,可以作為病蟲害的長期預測[3]。
①增長曲線預測
增長曲線用于描述某事物在其發展過程中增長或下降的快慢,本系統使用了修正指數曲線,它是在一般指數曲線的基礎上增加一個常數[3],其一般形式為:
=K+abt,其中K>0,a≠0,b≠1
未知常數K、a、b的求解方法:將基于時間節點的數值序列分為三部分,分別計算出原數值序列(Yt)的三個局部總和,以及趨勢值?t的三個局部總和;令這兩個值相等即可求得常數K、a、b的值。
②二次曲線趨勢預測
當現象發展的趨勢呈現拋物線形態時,可用二次曲線趨勢來預測。其一般方程為:
曲線中的三個未知常數a、b、C,可以根據最小二乘法或者選點法求得。
③指數平滑法
指數平滑法原理是任一期的指數平滑值都是本期實際觀察值與前一期指數平滑值的加權平均。基本公式是:
其中Yt是當前時間的觀測值,Ft是上一個時間的預測值,α是指數平滑因子[6]。
2)逐步判別分析
當分析氣候因素與病蟲害嚴重程度的關系時使用逐步判別分析法,其判別準則為貝葉斯判別函數,基本思想是按照變量是否重要逐步引入變量,每當判別式要引入新的最重要的變量時,都需要分析之前引入的變量的重要性,如果新變量的引入使之前的變量的重要性變得不再顯著了,就可以停止迭代,結束篩選[7]。
根據逐步判別分析迭代的結果,就可以確定與病蟲害嚴重程度相關性高的氣候因素,再綜合考慮本地區的歷史數據,建立一個高可信度判別函數。由于不同地區氣候因素不一樣,所以判別函數也不相同。確定判別函數后就可以根據本地區的氣候因素進行預測了。預測的結果可能需要修正,因為病蟲害與水稻的品種、施肥多少也有關系。
3)歷期預測法
歷期預測法主要是以某種害蟲歷史時期發生發育的情況作為分析判斷的基礎,再對此害蟲當前幾個蟲態發生的發育進度,比如害蟲數量、發育百分比率等情況來確定它們分別達到始盛期、高峰期和盛末期的時間,然后再參考各蟲態的平均歷期數據,就可以預測出其后一蟲態發生的日期。
通過比較與分析,本預測預報系統若為病蟲害作長期預測,可以使用時間序列分析法,而且可以使用多種時間序列進行趨勢預測,并將所有結果加權平均,即為最終結果;若要進行中長期預測,可以使用逐步判別法;若要作短期預測則可使用歷期預測法。
本系統采用Python開發技術,實現基于互聯網的水稻病蟲害診斷與預測,如圖1 所示,是本系統的軟件模塊結構圖,二級功能模塊分別是信息管理、病蟲害診斷、病蟲害預測、病蟲害論壇、系統管理等[8]。

圖1 系統模塊結構圖
每個功能模塊具體實現的功能如下:
信息管理模塊:各級用戶登錄后,可以將本地區的病蟲害相關信息錄入的數據庫中,同時也可以將本地區的氣候等信息錄入的相應數據庫中。
系統管理模塊:主要分兩大功能,一個是添加用戶,主要是系統管理員功能,所有新用戶的添加都由系統管理員來操作;第二個是用戶信息管理,即每個用戶來管理和維護自己的基本信息以及密碼的修改。
病蟲害論壇模塊:所有用戶可以在此發布信息,查看信息,回復信息等,主要用于用戶之間信息交流。
病蟲害診斷模塊:主要由兩部分組成,一個是用戶上傳病蟲害的圖像和視頻功能;另外一個是病蟲害診斷功能[9]。
病蟲害預測模塊:各用戶可以查看和管理相應病蟲害預測的相關信息,由于用戶的權限不同,普通用戶只能查看預測信息,而管理員用戶還可以修改,這樣可以有效地防止共享信息遭到損壞,可維護信息的一致性和有效性。在此級功能模塊下又分了相應的三級功能模塊。
首先,系統采用YOLO v5算法實現病蟲害診斷功能,YOLO v5s 模型最終在病蟲害的識別精度達到83.3%,可以認為模型達到了預期檢測效果,在水稻栽培過程中對病蟲害的防治具有一定指導作用。其次,病蟲害的預測模塊通過不同的預測方法可以為病蟲害作長期預測、中長期預測以及短期預測,以適應不同的需求。最后,系統還可以根據不同地區的生態環境不同,采用不同的預測模型,這樣可以提高準確度。總之,該系統對水稻病蟲害防治具有一定的現實指導意義,能提高防治水平和效益,減少過度農藥防治帶來的環境污染。