基于深度學(xué)習(xí)的農(nóng)作物葉片病害檢測系統(tǒng)(UI界面+YOLOv5+訓(xùn)練數(shù)據(jù)集)
摘要:農(nóng)作物葉片病害檢測系統(tǒng)用于智能檢測常見農(nóng)作物葉片病害情況,自動(dòng)化標(biāo)注、記錄和保存病害位置和類型,輔助作物病害防治以增加產(chǎn)值。本文詳細(xì)介紹基于YOLOv5深度學(xué)習(xí)模型的農(nóng)作物葉片病害檢測系統(tǒng),在介紹算法原理的同時(shí),給出Python的實(shí)現(xiàn)代碼、PyQt的UI界面以及訓(xùn)練數(shù)據(jù)集。在界面中可以選擇各種圖片、視頻進(jìn)行檢測識(shí)別;可對圖像中存在的多個(gè)目標(biāo)進(jìn)行識(shí)別分類,可識(shí)別多種農(nóng)作物葉片病害類型。博文提供了完整的Python代碼和使用教程,適合新入門的朋友參考,完整代碼資源文件請轉(zhuǎn)至文末的下載鏈接。

完整代碼下載:https://mbd.pub/o/bread/ZJaXlptr
參考視頻演示:https://www.bilibili.com/video/BV1iT411r7ym/
離線依賴庫下載鏈接:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

前言
????????農(nóng)作物病害主要發(fā)生在植物葉片,可以通過葉片病害特征判斷出植物感染病害類型。盡早地檢測出植物病害,能夠極大程度上減少產(chǎn)量損失、經(jīng)濟(jì)損失。然而,人工檢測需要耗費(fèi)大量時(shí)間和人力成本,檢測結(jié)果受人為主觀意識(shí)影響,且依賴專業(yè)知識(shí)。其次,專門從事病害識(shí)別的人才緊缺,且難以滿足市場需求,因此,需要用一種高效、快速的人工智能檢測方法解決這一難題。
????????這里使用基于YOLOv5的植物病害檢測算法,利用收集到的農(nóng)作物葉片病害數(shù)據(jù)集進(jìn)行訓(xùn)練,驗(yàn)證模型有效性后用于UI系統(tǒng)的預(yù)測輸出。農(nóng)作物葉片病害檢測系統(tǒng)主要用于常見農(nóng)作物葉片病害的智能檢測,利用相機(jī)采集的作物圖像,基于深度學(xué)習(xí)技術(shù)識(shí)別包括蘋果黑星病、繡葉、玉米灰葉斑病等30種常見的病害類型,輸出病害處的標(biāo)記框和對應(yīng)類別,以輔助自動(dòng)化農(nóng)作物病害防治;軟件提供登錄注冊功能,可進(jìn)行用戶管理;軟件能有效識(shí)別相機(jī)采集的圖片、視頻等文件形式,檢測葉片表面病害情況,并記錄識(shí)別結(jié)果在界面表格中方便查看;可開啟攝像頭實(shí)時(shí)監(jiān)測和統(tǒng)計(jì)實(shí)際農(nóng)作物葉片,以檢測其病害情況,系統(tǒng)支持結(jié)果記錄、展示和保存。
????????開發(fā)前在網(wǎng)上查找了一些相關(guān)的腳本,似乎大多關(guān)注于YOLOv5-YOLOv8等算法的配置修改(換個(gè)數(shù)據(jù)集訓(xùn)練),不失為不錯(cuò)的練習(xí)教程,但幾乎沒有人將其開發(fā)成一個(gè)可以展示的完整軟件,并不方便選擇文件和實(shí)時(shí)檢測。對此這里給出博主設(shè)計(jì)的界面,使用PyQt5設(shè)計(jì)和美化UI,功能也可以滿足圖片、視頻和攝像頭的識(shí)別檢測,希望大家可以喜歡,初始界面如下圖:

????????檢測類別時(shí)的界面截圖(點(diǎn)擊圖片可放大)如下圖,可識(shí)別畫面中存在的多個(gè)類別,也可開啟攝像頭或視頻檢測:

???????? 詳細(xì)的功能演示效果參見博主的B站視頻或下一節(jié)的動(dòng)圖演示,覺得不錯(cuò)的朋友敬請點(diǎn)贊、關(guān)注加收藏!系統(tǒng)UI界面的設(shè)計(jì)工作量較大,界面美化更需仔細(xì)雕琢,大家有任何建議或意見和可在下方評論交流。
1.?效果演示
????????軟件好不好用,顏值和功能都是重要指標(biāo),首先我們還是通過動(dòng)圖看一下識(shí)別葉片病害的效果,系統(tǒng)主要實(shí)現(xiàn)的功能是對圖片、視頻和攝像頭畫面中的農(nóng)作物病害進(jìn)行檢測,檢測的結(jié)果可視化顯示在界面和圖像中,另外提供多處病害的顯示選擇功能,演示效果如下。
(一)用戶注冊登錄界面
????????這里設(shè)計(jì)了一個(gè)登錄界面,可以注冊賬號(hào)和密碼,然后進(jìn)行登錄。界面還是參考了當(dāng)前流行的UI設(shè)計(jì),左側(cè)是一個(gè)動(dòng)圖,右側(cè)輸入賬號(hào)、密碼、驗(yàn)證碼等等。

(二)選擇圖片識(shí)別
????????系統(tǒng)允許選擇圖片文件進(jìn)行識(shí)別,點(diǎn)擊圖片選擇按鈕圖標(biāo)選擇圖片后,顯示所有農(nóng)作物識(shí)別的結(jié)果,可通過下拉選框查看單個(gè)葉片病害的識(shí)別結(jié)果。本功能的界面展示如下圖所示:

(三)視頻識(shí)別效果展示
????????很多時(shí)候我們需要識(shí)別一段視頻畫面中的病害情況,這里設(shè)計(jì)了視頻選擇功能。點(diǎn)擊視頻按鈕可選擇待檢測的視頻,系統(tǒng)會(huì)自動(dòng)解析視頻逐幀識(shí)別農(nóng)作物,并將結(jié)果記錄在右下角表格中,效果如下圖所示:

(四)攝像頭檢測效果展示
????????在真實(shí)場景中,我們往往利用設(shè)備攝像頭獲取實(shí)時(shí)畫面,同時(shí)需要對畫面中的農(nóng)作物進(jìn)行識(shí)別,因此本文考慮到此項(xiàng)功能。如下圖所示,點(diǎn)擊攝像頭按鈕后系統(tǒng)進(jìn)入準(zhǔn)備狀態(tài),系統(tǒng)顯示實(shí)時(shí)畫面并開始檢測畫面中的農(nóng)作物,識(shí)別結(jié)果展示如下圖:

2.?農(nóng)作物葉片病害檢測
(一)系統(tǒng)介紹
????????日常生活中常見果蔬的種類繁多,其葉片病害的類別就更多了,如何準(zhǔn)確地自動(dòng)化識(shí)別病害以提升作物產(chǎn)量,減少經(jīng)濟(jì)損失是當(dāng)前一個(gè)重要問題。對于現(xiàn)有的植物病害檢測方法還不能準(zhǔn)確且快速地檢測植物葉片中病害區(qū)域問題,博主這里采用技術(shù)已經(jīng)成熟的基于YOLOv5的深度學(xué)習(xí)方法,用于檢測馬鈴薯、番茄葉片等常見病害。通過數(shù)據(jù)增強(qiáng)和圖像標(biāo)注技術(shù)構(gòu)建馬鈴薯、玉米、番茄葉片病害數(shù)據(jù)集,利用YOLOv5主干網(wǎng)絡(luò)對病害特征的提取能力,實(shí)現(xiàn)葉片病害檢測和識(shí)別。通過調(diào)閱資料和訓(xùn)練測試代碼,博主覺得YOLOv5不失為一種為蘋果、番茄葉片病害檢測的高性能解決方案,能夠以較高的準(zhǔn)確率對植物葉片病害進(jìn)行分類與定位。當(dāng)然現(xiàn)在YOLOv6、YOLOv7、YOLOv8等算法也在不斷提出和改進(jìn),等其代碼版本成熟后博主也會(huì)再設(shè)計(jì)本系統(tǒng)的算法,敬請期待。
(二)網(wǎng)絡(luò)結(jié)構(gòu)
???????? Yolov5網(wǎng)絡(luò)結(jié)構(gòu)是由Input、Backbone、Neck、Prediction組成。Yolov5的Input部分是網(wǎng)絡(luò)的輸入端,采用Mosaic數(shù)據(jù)增強(qiáng)方式,對輸入數(shù)據(jù)隨機(jī)裁剪,然后進(jìn)行拼接。Backbone是Yolov5提取特征的網(wǎng)絡(luò)部分,特征提取能力直接影響整個(gè)網(wǎng)絡(luò)性能。Yolov5的Backbone相比于之前Yolov4提出了新的Focus結(jié)構(gòu)。Focus結(jié)構(gòu)是將圖片進(jìn)行切片操作,將W(寬)、H(高)信息轉(zhuǎn)移到了通道空間中,使得在沒有丟失任何信息的情況下,進(jìn)行了2倍下采樣操作。

(四)數(shù)據(jù)集及訓(xùn)練
????????這里我們使用的農(nóng)作物葉片數(shù)據(jù)集,每張圖片除包括類別標(biāo)簽外,還有一個(gè)標(biāo)注的物體邊框(Bounding Box),涉及的病害種類如下所示:
????????農(nóng)作物葉片病害數(shù)據(jù)集中,訓(xùn)練集含有2330張圖片,測試集包含239張圖片,部分?jǐn)?shù)據(jù)及標(biāo)注如下圖所示。

? ? ? ? 每張圖像均使用LabelImg工具進(jìn)行標(biāo)注,提供了圖像中農(nóng)作物葉片的bounding box,農(nóng)作物葉片的關(guān)鍵part信息,以及農(nóng)作物葉片病害的屬性信息,數(shù)據(jù)集部分圖片如下圖所示。

????????本項(xiàng)目文件的根目錄包含的內(nèi)容如下圖所示,其中train.py用于訓(xùn)練自己的數(shù)據(jù)集。我們訓(xùn)練和測試自己的數(shù)據(jù)集基本就是利用到這些代碼。在數(shù)據(jù)集和配置文件等準(zhǔn)備完成的基礎(chǔ)上,我們運(yùn)行train.py腳本進(jìn)行訓(xùn)練。

????????在深度學(xué)習(xí)中,我們通常通過損失函數(shù)下降的曲線來觀察模型訓(xùn)練的情況。而YOLOv5訓(xùn)練時(shí)主要包含三個(gè)方面的損失:矩形框損失(box_loss)、置信度損失(obj_loss)和分類損失(cls_loss),在訓(xùn)練結(jié)束后,我們也可以在logs目錄下找到生成對若干訓(xùn)練過程統(tǒng)計(jì)圖。下圖為博主訓(xùn)練農(nóng)作物葉片識(shí)別的模型訓(xùn)練曲線圖。

? ? ? ? 以下是訓(xùn)練過程中終端輸出的結(jié)果,整個(gè)訓(xùn)練經(jīng)歷300個(gè)Epoch,最終保存最佳模型在logs文件夾中。

????????一般我們會(huì)接觸到兩個(gè)指標(biāo),分別是召回率recall和精度precision,兩個(gè)指標(biāo)p和r都是簡單地從一個(gè)角度來判斷模型的好壞,均是介于0到1之間的數(shù)值,其中接近于1表示模型的性能越好,接近于0表示模型的性能越差,為了綜合評價(jià)目標(biāo)檢測的性能,一般采用均值平均密度map來進(jìn)一步評估模型的好壞。我們通過設(shè)定不同的置信度的閾值,可以得到在模型在不同的閾值下所計(jì)算出的p值和r值,一般情況下,p值和r值是負(fù)相關(guān)的,繪制出來可以得到如下圖所示的曲線,其中曲線的面積我們稱AP,目標(biāo)檢測模型中每種目標(biāo)可計(jì)算出一個(gè)AP值,對所有的AP值求平均則可以得到模型的mAP值。

????????以PR-curve為例,可以看到我們的模型在驗(yàn)證集上的均值平均準(zhǔn)確率為0.628。從訓(xùn)練結(jié)果和數(shù)據(jù)集進(jìn)行分析,其干擾樣本多,容易造成誤檢, 其中有很多植物葉片是非常接近的,由于拍攝角度和光照等,實(shí)際檢測很難區(qū)分(比如:番茄葉、馬鈴薯葉等),容易造成模型誤檢。
3.?農(nóng)作物葉片檢測識(shí)別
????????在訓(xùn)練完成后得到最佳模型,接下來我們將幀圖像輸入到這個(gè)網(wǎng)絡(luò)進(jìn)行預(yù)測,從而得到預(yù)測結(jié)果,預(yù)測方法(predict.py)部分的代碼如下所示:
????????得到預(yù)測結(jié)果我們便可以將幀圖像中的目標(biāo)框出,然后在圖片上用opencv繪圖操作,輸出農(nóng)作物葉片的類別及農(nóng)作物葉片的預(yù)測分?jǐn)?shù)。以下是讀取農(nóng)作物葉片圖片并進(jìn)行檢測的腳本,首先將圖片數(shù)據(jù)進(jìn)行預(yù)處理后送predict進(jìn)行檢測,然后計(jì)算標(biāo)記框的位置并在圖中標(biāo)注出來。
????????執(zhí)行得到的結(jié)果如下圖所示,圖中農(nóng)作物葉片的種類和置信度值都標(biāo)注出來了,預(yù)測速度較快。基于此模型我們可以將其設(shè)計(jì)成一個(gè)帶有界面的系統(tǒng),在界面上選擇圖片、視頻或攝像頭然后調(diào)用模型進(jìn)行檢測。

????????博主對整個(gè)系統(tǒng)進(jìn)行了詳細(xì)測試,最終開發(fā)出一版流暢得到清新界面,就是博文演示部分的展示,完整的UI界面、測試圖片視頻、代碼文件,以及Python離線依賴包(方便安裝運(yùn)行,也可自行配置環(huán)境),均已打包上傳,感興趣的朋友可以通過下載鏈接獲取。

下載鏈接
????若您想獲得博文中涉及的實(shí)現(xiàn)完整全部程序文件(包括測試圖片、視頻,py, UI文件等,如下圖),這里已打包上傳至博主的面包多平臺(tái),見可參考博客與視頻,已將所有涉及的文件同時(shí)打包到里面,點(diǎn)擊即可運(yùn)行,完整文件截圖如下:

????在文件夾下的資源顯示如下,下面的鏈接中也給出了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟件后,復(fù)制離線依賴包至項(xiàng)目目錄下進(jìn)行安裝,離線依賴的使用詳細(xì)演示也可見本人B站視頻:win11從頭安裝軟件和配置環(huán)境運(yùn)行深度學(xué)習(xí)項(xiàng)目、Win10中使用pycharm和anaconda進(jìn)行python環(huán)境配置教程。

注意:該代碼采用Pycharm+Python3.8開發(fā),經(jīng)過測試能成功運(yùn)行,運(yùn)行界面的主程序?yàn)閞unMain.py和LoginUI.py,測試圖片腳本可運(yùn)行testPicture.py,測試視頻腳本可運(yùn)行testVideo.py。為確保程序順利運(yùn)行,請按照requirements.txt配置Python依賴包的版本。Python版本:3.8,請勿使用其他版本,詳見requirements.txt文件;
完整資源中包含數(shù)據(jù)集及訓(xùn)練代碼,環(huán)境配置與界面中文字、圖片、logo等的修改方法請見視頻,項(xiàng)目完整文件下載請見參考博客文章里面,或參考視頻的簡介處給出:???
參考博客文章:https://zhuanlan.zhihu.com/p/500394132
參考視頻演示:https://www.bilibili.com/video/BV1iT411r7ym/
離線依賴庫下載鏈接:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

界面中文字、圖標(biāo)和背景圖修改方法:
在Qt Designer中可以徹底修改界面的各個(gè)控件及設(shè)置,然后將ui文件轉(zhuǎn)換為py文件即可調(diào)用和顯示界面。如果只需要修改界面中的文字、圖標(biāo)和背景圖的,可以直接在ConfigUI.config文件中修改,步驟如下:
(1)打開UI_rec/tools/ConfigUI.config文件,若亂碼請選擇GBK編碼打開。
(2)如需修改界面文字,只要選中要改的字符替換成自己的就好。
(3)如需修改背景、圖標(biāo)等,只需修改圖片的路徑。例如,原文件中的背景圖設(shè)置如下:
可修改為自己的名為background2.png圖片(位置在UI_rec/icons/文件夾中),可將該項(xiàng)設(shè)置如下即可修改背景圖:
結(jié)束語
????????由于博主能力有限,博文中提及的方法即使經(jīng)過試驗(yàn),也難免會(huì)有疏漏之處。希望您能熱心指出其中的錯(cuò)誤,以便下次修改時(shí)能以一個(gè)更完美更嚴(yán)謹(jǐn)?shù)臉幼?,呈現(xiàn)在大家面前。同時(shí)如果有更好的實(shí)現(xiàn)方法也請您不吝賜教。