陶國柱 廖義奎 董力量
(廣西民族大學電子信息學院,廣西 南寧 530006)
農作物生長周期易遭受到病害的侵襲,而我國是農業(yè)病害多發(fā)重發(fā)的國家,農作物每年遭受病害侵蝕經(jīng)濟損失程度巨大,根據(jù)聯(lián)合國農糧組織估計,全世界范圍內每年農作物病蟲害自然損失率在37%以上。由此可見,病蟲害的防治對我國的農業(yè)發(fā)展具有至關重要的作用。病蟲害種類繁多,而傳統(tǒng)的病蟲害檢測方法依靠人工憑借經(jīng)驗判斷種類,難以準確診斷。改變傳統(tǒng)的病蟲害檢測方式,能更有效的滿足病蟲害的防治需求。近年來,智能檢測技術不斷應用于農業(yè)上。劉洋等提出一種輕量級 CNN 的植物病害識別方法,并將其移植到 Android 手機端,并在識別精度、運算速度和網(wǎng)絡尺寸之間取得不錯的效果。孫俊等通過改進卷積神經(jīng)網(wǎng)絡的初始化參數(shù)和嘗試不同類型的激活函數(shù)對多種植物葉片病蟲害進行識別,平均測試識別準確率達到 99.56%。魏麗冉等在Lab彩色空間模型下的a、b分量上進行葉片分割并提取特征,然后采用基于核函數(shù)的支持向量機多分類方法對病害進行檢測識別并分類,識別率最高達到89.5%。趙立新等基于遷移學習的棉花葉部病蟲害識別,通過改進 AlexNet模型的遷移學習,源領域學習到的知識遷移到目標領域,數(shù)據(jù)增強技術能有效緩解過擬合,能取得不錯的效果。Sumita Mishra等將通過預訓練的卷積神經(jīng)網(wǎng)絡模型部署到專門的CNN硬件模塊中,使玉米葉疾病的識別模型準確率達到了88.46%。劉君等針對背景環(huán)境的要求較高,同時不能實現(xiàn)病蟲害的定位的問題,提出基于YOLO卷積神經(jīng)網(wǎng)絡的番茄病蟲害檢測算法并建立數(shù)據(jù)庫,對8類番茄病蟲害的檢測平均精度高達85.09%。本研究采用的是YOLOv4目標識別算法對番茄病害進行識別與定位,YOLOv4是YOLOv3的改進版,在結合YOLOv3的基礎上提出一系列新的方法。YOLOv4在YOLOv3的基礎上,在FPS不下降的情況下,mAP達到了44,提高非常明顯。通過調整原始 YOLOv4 網(wǎng)絡參數(shù)來適應番茄病害檢測任務,研究優(yōu)化改進模型效果,相對于深度學習病害圖像識別來說,YOLOv4目標檢測算法對病害的檢測效果有較大提升,并能對發(fā)病位置進行精確定位,同時還擁有不錯的速度和精度。
YOLOv4是在YOLOv3基礎上進行了改進,主要改進的地方有將YOLOv3的主干特征提取網(wǎng)絡DarkNet53改為CSPDarkNet53,其結構圖如表1所示,加入SPP、PAN特征金字塔,使用mish激活函數(shù)代替LeakyReLU,使用CutMix數(shù)據(jù)增強和馬賽克(Mosaic)數(shù)據(jù)增強。YOLOv4相比于YOLOv3檢測速度更快,精度更高,對小目標檢測更敏感。在FPS一樣的情況下YOLOv4比YOLOv3的AP大概高出了31.25%。

表1 CSPDarkNet網(wǎng)絡結構圖
CSPDarkNet一共有5大殘差塊,每個殘差塊分別包含小的殘差塊為1、2、8、8、4。在每組Residual block加上一個Cross Stage Partial結構。并且CSP-DarkNet中也取消了Bottleneck的結構,減少了參數(shù)使其更容易訓練。相比于普通的殘差卷積塊具有加強CNN的學習能力、消除計算瓶頸、降低內存成本的優(yōu)點。SPP傳統(tǒng)的CNN結構中,由于全連接層的特征數(shù)是固定的,所以輸入的圖片大小是不變的。而SPP使用多個不同大小的窗口對特征圖進行pooling,然后將分別得到的結果進行合并就會得到固定長度的輸出。
本實驗提出的YOLOv4病害檢測算法首先對病害圖像進行預處理,圖片仍然保持原來的顏色3通道以便保留更多的原始病害信息,將病害圖像resize到416×416像素大小盡量保證其病害像素值在合理范圍內,然后通過特征提取主干網(wǎng)絡對病害進行特征提取,將提取到的特征圖進行網(wǎng)格劃分。最后將提取三個大小為52×52、26×26、13×13的特征層進行預測。不同大小的網(wǎng)格可以感受不同大小的病害信息,13×13的網(wǎng)格用來感受大目標,而52×52的網(wǎng)格感受小目標,能逐步提取更高更豐富的病害語義特征信息,方便檢測到不同大小的病害病斑,本實驗算法流程如圖1。對于每個相應的網(wǎng)格都有一定數(shù)量的anchors,然后微調每個anchors形成預測框。對于每個預測框模型需要預測輸出P0=(tx,ty,tw,th,Pobj,P1,P2,...,PC) 其中Pobj是anchors是否包含病害的概率,P1,P2,...,PC則是錨框包含的病害屬于每個類別的概率。tx,ty,tw,th則是預測框需要調整病害發(fā)病的位置。對于一個預測框,網(wǎng)絡需要輸出(5+C)個實數(shù)來表征它是否有病害、發(fā)病位置和形狀尺寸以及屬于那個病害類別的概率。由于我們在每個anchors都生成了K個預測框,則所有預測框一共需要網(wǎng)絡輸出的預測值數(shù)目是:

m,n為劃分的網(wǎng)格數(shù)。接下來將病害表征輸出和預測框關聯(lián)起來,也就是要建立起損失函數(shù)跟網(wǎng)絡輸出之間的關系。CIOU將檢測物體和每個錨框之間的距離、重疊率、尺度以及懲罰項都考慮進去,使得預測框波動更小,不會像IOU和GIOU一樣出現(xiàn)訓練過程中發(fā)散等問題。而懲罰因子a,v把預測框長寬比擬合目標框的長寬比考慮進去。

a與v的公式如下:


總損失函數(shù)LOSS為計算xy和wh上的LOSSciou、計算置信度的LOSSobj、計算預測種類的LOSSclass三者之和。

LOSSobj表示obj中是否包含病蟲害情況預測:

LOSSclass表示對病蟲害類別的預測:

考慮到在真實自然環(huán)境下病害的發(fā)生概率并沒有那么高,由此可知大多數(shù)網(wǎng)格anchors置信度都為0,為了解決正負樣本不平衡的問題,將正樣本,即有病害的樣本IOU閾值設置為0.5,該目的是為了平衡正負樣本。大于這個閾值的樣本都會被算為正樣本,大于閾值但是置信度為0的樣本obj被標記為-1,不會被計算在LOSS內。因此,加大其中存在病害目標的網(wǎng)格的權重,將權重更改為λciou=5,λnoobj=0.5。

圖1 病害檢測算法流程圖
本文從Plantvillge開源數(shù)據(jù)集中選取不同種病害番茄圖像各500張,共計2000張,因農業(yè)領域數(shù)據(jù)圖片較少不好獲取,且病害的種類發(fā)病與天氣及種植環(huán)境等多種因素相關,通過篩選網(wǎng)上權威網(wǎng)站獲取部分由各種植戶上傳的自然光下拍攝的番茄早疫病415張、晚疫病413張、白粉病426張、細菌性斑點病417張、葉霉病423張、病毒葉435張。針對數(shù)據(jù)集中圖片相對較少而產生的樣本失衡的問題,本文利用隨機的裁剪、旋轉、色彩變換、抑制噪聲等方法對部分數(shù)據(jù)進行樣本增強,將病害數(shù)據(jù)集擴展到5574 張,這使得樣本多樣性增加,提高了樣本質量,同時有效緩解訓練過程中的過擬合現(xiàn)象。按照9:1的比例劃分訓練集和測試集。利用 LabelImg 軟件進行了病害信息的人工標注,生成包含病蟲害目標的種類和位置的 xml文件,并將其轉換成訓練使用的 Label 文件,從而為試驗做好數(shù)據(jù)準備。樣本數(shù)據(jù)如表2所示。

表2 番茄病害數(shù)據(jù)統(tǒng)計
本實驗系統(tǒng)為win7,CPU為i7-9400,顯卡GPU Nvidia GTX1080,8GB內存,程序使用python編寫,調用Keras、OpenCV等庫并在Pycharm上運行。
在深度學習中為了能更準確衡量模型對病害檢測的檢測性能,本文選用Precision(精準度,P)和Recall(召回率,R)兩者結合作為模型的評價指標。具體計算如式(9)(10)所示,其中:TP表示分類器認為是病害樣本并且分對的例子,即被正確檢測到的病害樣本數(shù);TN 表示分類器認為是正確樣本但分錯的例子,即沒有框選的病害的部分;FN 是分類器認為不是病害樣本且分錯了的例子,即沒有檢測到病害數(shù);FP是分類器認為不是病害樣本但分對了的例子,即檢測到了病害的其他區(qū)域。


圖2 各算法對病害的總體檢測情況
分別取召回率R和精確率P的值作為橫坐標和縱坐標,繪制一條 P-R 曲線,如圖2,精準度 P 表示模型分類器認為是正類并且確實是正類的部分占所有分類器認為是正類的比例;而召回率 R 表示模型分類器認為是正類并且確實是正類的部分占所有確實是正類的比例,可以反映網(wǎng)絡模型的整體性能。本試驗的番茄病害檢測結果通過Precision與Recall曲線來描述。其中,Precision和Recall定義如下。
Precision=正確檢測病害樣本數(shù)/(正確檢測病害樣本數(shù)+錯誤檢測病害樣本數(shù))
Recall=正確檢測病害樣本數(shù)/(正確檢測病害樣本數(shù)+沒有檢測到的病害樣本數(shù))

表3 各算法對病害的平均檢測精度 %

圖3 本實驗算法對各病害檢測效果

表4 各算法對病害檢測速度
對各算法對6種病害的檢測精度統(tǒng)計如表3所示,檢測效果如圖3所示,與其他算法相比,本算法對番茄白粉病、番茄病毒病、番茄晚疫病、番茄細菌性斑點病、番茄葉霉病、番茄早疫病的檢測精度分別為84.8%、86.5%、88.5%、84.6%、82.3%、90.7%。平均精度達86.23%,在提升病害檢測精度的同時也擁有不錯的檢測速度,F(xiàn)PS達75,能夠應用于實時病害檢測中。
本文利用 YOLOv4 卷積神經(jīng)網(wǎng)絡實現(xiàn)對番茄病害識別與定位檢測,并與兩個主流深度學習目標檢測算法做了對比,通過試驗測試,基于的 YOLOv4 網(wǎng)絡的番茄定位識別模型平均精確度達到 86.23%,相對于Faster-Rcnn、SSD兩種網(wǎng)絡,平均精確度分別提高11.71%、5.41% ,本試驗方法較前人的方法在病害檢測準確率上有較大提升,同時能實現(xiàn)圖像中病害位置的精準定位,能夠對病害實行實時監(jiān)測,說明該方法具有一定的實用價值。