陶國(guó)柱 廖義奎 董力量
(廣西民族大學(xué)電子信息學(xué)院,廣西 南寧 530006)
農(nóng)作物生長(zhǎng)周期易遭受到病害的侵襲,而我國(guó)是農(nóng)業(yè)病害多發(fā)重發(fā)的國(guó)家,農(nóng)作物每年遭受病害侵蝕經(jīng)濟(jì)損失程度巨大,根據(jù)聯(lián)合國(guó)農(nóng)糧組織估計(jì),全世界范圍內(nèi)每年農(nóng)作物病蟲(chóng)害自然損失率在37%以上。由此可見(jiàn),病蟲(chóng)害的防治對(duì)我國(guó)的農(nóng)業(yè)發(fā)展具有至關(guān)重要的作用。病蟲(chóng)害種類(lèi)繁多,而傳統(tǒng)的病蟲(chóng)害檢測(cè)方法依靠人工憑借經(jīng)驗(yàn)判斷種類(lèi),難以準(zhǔn)確診斷。改變傳統(tǒng)的病蟲(chóng)害檢測(cè)方式,能更有效的滿足病蟲(chóng)害的防治需求。近年來(lái),智能檢測(cè)技術(shù)不斷應(yīng)用于農(nóng)業(yè)上。劉洋等提出一種輕量級(jí) CNN 的植物病害識(shí)別方法,并將其移植到 Android 手機(jī)端,并在識(shí)別精度、運(yùn)算速度和網(wǎng)絡(luò)尺寸之間取得不錯(cuò)的效果。孫俊等通過(guò)改進(jìn)卷積神經(jīng)網(wǎng)絡(luò)的初始化參數(shù)和嘗試不同類(lèi)型的激活函數(shù)對(duì)多種植物葉片病蟲(chóng)害進(jìn)行識(shí)別,平均測(cè)試識(shí)別準(zhǔn)確率達(dá)到 99.56%。魏麗冉等在Lab彩色空間模型下的a、b分量上進(jìn)行葉片分割并提取特征,然后采用基于核函數(shù)的支持向量機(jī)多分類(lèi)方法對(duì)病害進(jìn)行檢測(cè)識(shí)別并分類(lèi),識(shí)別率最高達(dá)到89.5%。趙立新等基于遷移學(xué)習(xí)的棉花葉部病蟲(chóng)害識(shí)別,通過(guò)改進(jìn) AlexNet模型的遷移學(xué)習(xí),源領(lǐng)域?qū)W習(xí)到的知識(shí)遷移到目標(biāo)領(lǐng)域,數(shù)據(jù)增強(qiáng)技術(shù)能有效緩解過(guò)擬合,能取得不錯(cuò)的效果。Sumita Mishra等將通過(guò)預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)模型部署到專(zhuān)門(mén)的CNN硬件模塊中,使玉米葉疾病的識(shí)別模型準(zhǔn)確率達(dá)到了88.46%。劉君等針對(duì)背景環(huán)境的要求較高,同時(shí)不能實(shí)現(xiàn)病蟲(chóng)害的定位的問(wèn)題,提出基于YOLO卷積神經(jīng)網(wǎng)絡(luò)的番茄病蟲(chóng)害檢測(cè)算法并建立數(shù)據(jù)庫(kù),對(duì)8類(lèi)番茄病蟲(chóng)害的檢測(cè)平均精度高達(dá)85.09%。本研究采用的是YOLOv4目標(biāo)識(shí)別算法對(duì)番茄病害進(jìn)行識(shí)別與定位,YOLOv4是YOLOv3的改進(jìn)版,在結(jié)合YOLOv3的基礎(chǔ)上提出一系列新的方法。YOLOv4在YOLOv3的基礎(chǔ)上,在FPS不下降的情況下,mAP達(dá)到了44,提高非常明顯。通過(guò)調(diào)整原始 YOLOv4 網(wǎng)絡(luò)參數(shù)來(lái)適應(yīng)番茄病害檢測(cè)任務(wù),研究?jī)?yōu)化改進(jìn)模型效果,相對(duì)于深度學(xué)習(xí)病害圖像識(shí)別來(lái)說(shuō),YOLOv4目標(biāo)檢測(cè)算法對(duì)病害的檢測(cè)效果有較大提升,并能對(duì)發(fā)病位置進(jìn)行精確定位,同時(shí)還擁有不錯(cuò)的速度和精度。
YOLOv4是在YOLOv3基礎(chǔ)上進(jìn)行了改進(jìn),主要改進(jìn)的地方有將YOLOv3的主干特征提取網(wǎng)絡(luò)DarkNet53改為CSPDarkNet53,其結(jié)構(gòu)圖如表1所示,加入SPP、PAN特征金字塔,使用mish激活函數(shù)代替LeakyReLU,使用CutMix數(shù)據(jù)增強(qiáng)和馬賽克(Mosaic)數(shù)據(jù)增強(qiáng)。YOLOv4相比于YOLOv3檢測(cè)速度更快,精度更高,對(duì)小目標(biāo)檢測(cè)更敏感。在FPS一樣的情況下YOLOv4比YOLOv3的AP大概高出了31.25%。
表1 CSPDarkNet網(wǎng)絡(luò)結(jié)構(gòu)圖
CSPDarkNet一共有5大殘差塊,每個(gè)殘差塊分別包含小的殘差塊為1、2、8、8、4。在每組Residual block加上一個(gè)Cross Stage Partial結(jié)構(gòu)。并且CSP-DarkNet中也取消了Bottleneck的結(jié)構(gòu),減少了參數(shù)使其更容易訓(xùn)練。相比于普通的殘差卷積塊具有加強(qiáng)CNN的學(xué)習(xí)能力、消除計(jì)算瓶頸、降低內(nèi)存成本的優(yōu)點(diǎn)。SPP傳統(tǒng)的CNN結(jié)構(gòu)中,由于全連接層的特征數(shù)是固定的,所以輸入的圖片大小是不變的。而SPP使用多個(gè)不同大小的窗口對(duì)特征圖進(jìn)行pooling,然后將分別得到的結(jié)果進(jìn)行合并就會(huì)得到固定長(zhǎng)度的輸出。
本實(shí)驗(yàn)提出的YOLOv4病害檢測(cè)算法首先對(duì)病害圖像進(jìn)行預(yù)處理,圖片仍然保持原來(lái)的顏色3通道以便保留更多的原始病害信息,將病害圖像resize到416×416像素大小盡量保證其病害像素值在合理范圍內(nèi),然后通過(guò)特征提取主干網(wǎng)絡(luò)對(duì)病害進(jìn)行特征提取,將提取到的特征圖進(jìn)行網(wǎng)格劃分。最后將提取三個(gè)大小為52×52、26×26、13×13的特征層進(jìn)行預(yù)測(cè)。不同大小的網(wǎng)格可以感受不同大小的病害信息,13×13的網(wǎng)格用來(lái)感受大目標(biāo),而52×52的網(wǎng)格感受小目標(biāo),能逐步提取更高更豐富的病害語(yǔ)義特征信息,方便檢測(cè)到不同大小的病害病斑,本實(shí)驗(yàn)算法流程如圖1。對(duì)于每個(gè)相應(yīng)的網(wǎng)格都有一定數(shù)量的anchors,然后微調(diào)每個(gè)anchors形成預(yù)測(cè)框。對(duì)于每個(gè)預(yù)測(cè)框模型需要預(yù)測(cè)輸出P0=(tx,ty,tw,th,Pobj,P1,P2,...,PC) 其中Pobj是anchors是否包含病害的概率,P1,P2,...,PC則是錨框包含的病害屬于每個(gè)類(lèi)別的概率。tx,ty,tw,th則是預(yù)測(cè)框需要調(diào)整病害發(fā)病的位置。對(duì)于一個(gè)預(yù)測(cè)框,網(wǎng)絡(luò)需要輸出(5+C)個(gè)實(shí)數(shù)來(lái)表征它是否有病害、發(fā)病位置和形狀尺寸以及屬于那個(gè)病害類(lèi)別的概率。由于我們?cè)诿總€(gè)anchors都生成了K個(gè)預(yù)測(cè)框,則所有預(yù)測(cè)框一共需要網(wǎng)絡(luò)輸出的預(yù)測(cè)值數(shù)目是:
m,n為劃分的網(wǎng)格數(shù)。接下來(lái)將病害表征輸出和預(yù)測(cè)框關(guān)聯(lián)起來(lái),也就是要建立起損失函數(shù)跟網(wǎng)絡(luò)輸出之間的關(guān)系。CIOU將檢測(cè)物體和每個(gè)錨框之間的距離、重疊率、尺度以及懲罰項(xiàng)都考慮進(jìn)去,使得預(yù)測(cè)框波動(dòng)更小,不會(huì)像IOU和GIOU一樣出現(xiàn)訓(xùn)練過(guò)程中發(fā)散等問(wèn)題。而懲罰因子a,v把預(yù)測(cè)框長(zhǎng)寬比擬合目標(biāo)框的長(zhǎng)寬比考慮進(jìn)去。
a與v的公式如下:
總損失函數(shù)LOSS為計(jì)算xy和wh上的LOSSciou、計(jì)算置信度的LOSSobj、計(jì)算預(yù)測(cè)種類(lèi)的LOSSclass三者之和。
LOSSobj表示obj中是否包含病蟲(chóng)害情況預(yù)測(cè):
LOSSclass表示對(duì)病蟲(chóng)害類(lèi)別的預(yù)測(cè):
考慮到在真實(shí)自然環(huán)境下病害的發(fā)生概率并沒(méi)有那么高,由此可知大多數(shù)網(wǎng)格anchors置信度都為0,為了解決正負(fù)樣本不平衡的問(wèn)題,將正樣本,即有病害的樣本IOU閾值設(shè)置為0.5,該目的是為了平衡正負(fù)樣本。大于這個(gè)閾值的樣本都會(huì)被算為正樣本,大于閾值但是置信度為0的樣本obj被標(biāo)記為-1,不會(huì)被計(jì)算在LOSS內(nèi)。因此,加大其中存在病害目標(biāo)的網(wǎng)格的權(quán)重,將權(quán)重更改為λciou=5,λnoobj=0.5。
圖1 病害檢測(cè)算法流程圖
本文從Plantvillge開(kāi)源數(shù)據(jù)集中選取不同種病害番茄圖像各500張,共計(jì)2000張,因農(nóng)業(yè)領(lǐng)域數(shù)據(jù)圖片較少不好獲取,且病害的種類(lèi)發(fā)病與天氣及種植環(huán)境等多種因素相關(guān),通過(guò)篩選網(wǎng)上權(quán)威網(wǎng)站獲取部分由各種植戶上傳的自然光下拍攝的番茄早疫病415張、晚疫病413張、白粉病426張、細(xì)菌性斑點(diǎn)病417張、葉霉病423張、病毒葉435張。針對(duì)數(shù)據(jù)集中圖片相對(duì)較少而產(chǎn)生的樣本失衡的問(wèn)題,本文利用隨機(jī)的裁剪、旋轉(zhuǎn)、色彩變換、抑制噪聲等方法對(duì)部分?jǐn)?shù)據(jù)進(jìn)行樣本增強(qiáng),將病害數(shù)據(jù)集擴(kuò)展到5574 張,這使得樣本多樣性增加,提高了樣本質(zhì)量,同時(shí)有效緩解訓(xùn)練過(guò)程中的過(guò)擬合現(xiàn)象。按照9:1的比例劃分訓(xùn)練集和測(cè)試集。利用 LabelImg 軟件進(jìn)行了病害信息的人工標(biāo)注,生成包含病蟲(chóng)害目標(biāo)的種類(lèi)和位置的 xml文件,并將其轉(zhuǎn)換成訓(xùn)練使用的 Label 文件,從而為試驗(yàn)做好數(shù)據(jù)準(zhǔn)備。樣本數(shù)據(jù)如表2所示。
表2 番茄病害數(shù)據(jù)統(tǒng)計(jì)
本實(shí)驗(yàn)系統(tǒng)為win7,CPU為i7-9400,顯卡GPU Nvidia GTX1080,8GB內(nèi)存,程序使用python編寫(xiě),調(diào)用Keras、OpenCV等庫(kù)并在Pycharm上運(yùn)行。
在深度學(xué)習(xí)中為了能更準(zhǔn)確衡量模型對(duì)病害檢測(cè)的檢測(cè)性能,本文選用Precision(精準(zhǔn)度,P)和Recall(召回率,R)兩者結(jié)合作為模型的評(píng)價(jià)指標(biāo)。具體計(jì)算如式(9)(10)所示,其中:TP表示分類(lèi)器認(rèn)為是病害樣本并且分對(duì)的例子,即被正確檢測(cè)到的病害樣本數(shù);TN 表示分類(lèi)器認(rèn)為是正確樣本但分錯(cuò)的例子,即沒(méi)有框選的病害的部分;FN 是分類(lèi)器認(rèn)為不是病害樣本且分錯(cuò)了的例子,即沒(méi)有檢測(cè)到病害數(shù);FP是分類(lèi)器認(rèn)為不是病害樣本但分對(duì)了的例子,即檢測(cè)到了病害的其他區(qū)域。
圖2 各算法對(duì)病害的總體檢測(cè)情況
分別取召回率R和精確率P的值作為橫坐標(biāo)和縱坐標(biāo),繪制一條 P-R 曲線,如圖2,精準(zhǔn)度 P 表示模型分類(lèi)器認(rèn)為是正類(lèi)并且確實(shí)是正類(lèi)的部分占所有分類(lèi)器認(rèn)為是正類(lèi)的比例;而召回率 R 表示模型分類(lèi)器認(rèn)為是正類(lèi)并且確實(shí)是正類(lèi)的部分占所有確實(shí)是正類(lèi)的比例,可以反映網(wǎng)絡(luò)模型的整體性能。本試驗(yàn)的番茄病害檢測(cè)結(jié)果通過(guò)Precision與Recall曲線來(lái)描述。其中,Precision和Recall定義如下。
Precision=正確檢測(cè)病害樣本數(shù)/(正確檢測(cè)病害樣本數(shù)+錯(cuò)誤檢測(cè)病害樣本數(shù))
Recall=正確檢測(cè)病害樣本數(shù)/(正確檢測(cè)病害樣本數(shù)+沒(méi)有檢測(cè)到的病害樣本數(shù))
表3 各算法對(duì)病害的平均檢測(cè)精度 %
圖3 本實(shí)驗(yàn)算法對(duì)各病害檢測(cè)效果
表4 各算法對(duì)病害檢測(cè)速度
對(duì)各算法對(duì)6種病害的檢測(cè)精度統(tǒng)計(jì)如表3所示,檢測(cè)效果如圖3所示,與其他算法相比,本算法對(duì)番茄白粉病、番茄病毒病、番茄晚疫病、番茄細(xì)菌性斑點(diǎn)病、番茄葉霉病、番茄早疫病的檢測(cè)精度分別為84.8%、86.5%、88.5%、84.6%、82.3%、90.7%。平均精度達(dá)86.23%,在提升病害檢測(cè)精度的同時(shí)也擁有不錯(cuò)的檢測(cè)速度,F(xiàn)PS達(dá)75,能夠應(yīng)用于實(shí)時(shí)病害檢測(cè)中。
本文利用 YOLOv4 卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)對(duì)番茄病害識(shí)別與定位檢測(cè),并與兩個(gè)主流深度學(xué)習(xí)目標(biāo)檢測(cè)算法做了對(duì)比,通過(guò)試驗(yàn)測(cè)試,基于的 YOLOv4 網(wǎng)絡(luò)的番茄定位識(shí)別模型平均精確度達(dá)到 86.23%,相對(duì)于Faster-Rcnn、SSD兩種網(wǎng)絡(luò),平均精確度分別提高11.71%、5.41% ,本試驗(yàn)方法較前人的方法在病害檢測(cè)準(zhǔn)確率上有較大提升,同時(shí)能實(shí)現(xiàn)圖像中病害位置的精準(zhǔn)定位,能夠?qū)Σ『?shí)行實(shí)時(shí)監(jiān)測(cè),說(shuō)明該方法具有一定的實(shí)用價(jià)值。