摘要:本文深入研究了基於YOLOv8/v7/v6/v5等深度學習模型的農作物害蟲檢測系統,核心採用YOLOv8並整合了YOLOv7、YOLOv6、YOLOv5演算法,進行效能指標對比;詳述了國內外研究現狀、資料集處理、演算法原理、模型構建與訓練程式碼,及基於Streamlit的互動式Web應用介面設計。在Web網頁中可以支援影像、影片和實時攝像頭進行農作物害蟲檢測,可上傳不同訓練模型(YOLOv8/v7/v6/v5)進行推理預測,介面可方便修改。本文附帶了完整的網頁設計、深度學習模型程式碼和訓練資料集的下載連結。
@
- 1. 網頁功能與效果
- 2. 緒論
- 2.1 研究背景及意義
- 2.2 國內外研究現狀
- 2.3 要解決的問題及其方案
- 2.3.1 要解決的問題
- 2.3.2 解決方案
- 2.4 博文貢獻與組織結構
- 3. 資料集處理
- 4. 原理與程式碼介紹
- 4.1 YOLOv8演算法原理
- 4.3 訓練程式碼
- 5. 實驗結果與分析
- 5.1 訓練曲線
- 5.2 混淆矩陣
- 5.3 YOLOv8/v7/v6/v5對比實驗
- 6. 系統設計與實現
- 6.1 系統架構設計
- 6.2 系統流程
- 程式碼下載連結
- 7. 結論與未來工作
➷點選跳轉至文末所有涉及的完整程式碼檔案下載頁☇
完整資源中包含資料集及訓練程式碼,環境配置與介面中文字、圖片、logo等的修改方法請見影片,專案完整檔案下載請見演示與介紹影片的簡介處給出:➷➷➷
演示與介紹影片 :https://www.bilibili.com/video/BV18D421W72W/
YOLOv8/v7/v6/v5專案合集下載:https://mbd.pub/o/bread/mbd-ZZ2YmJhx
YOLOv8和v5專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2Xm59x
YOLOv7專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2Ylp5y
YOLOv6專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2Yl5tw
若您想獲得博文中涉及的實現完整全部資原始檔(包括測試圖片、影片,py, UI檔案,訓練資料集、訓練程式碼、介面程式碼等),這裡已打包上傳至博主的麵包多平臺,見可參考部落格與影片,已將所有涉及的檔案同時打包到裡面,點選即可執行,完整檔案截圖如下:
1. 網頁功能與效果
(1)開啟攝像頭實時檢測:本系統允許使用者透過網頁直接開啟攝像頭,實現對實時影片流中農作物害蟲的檢測。系統將自動識別並分析畫面中的農作物害蟲,並將檢測結果實時顯示在使用者介面上,為使用者提供即時的表情反饋。
2. 緒論
2.1 研究背景及意義
農業作為人類社會的基礎產業,其生產效率和產品質量直接影響到人類的生活質量。在農業生產過程中,害蟲的侵襲是一個長久以來都未能徹底解決的問題。害蟲不僅會導致農作物產量大幅度下降,還可能引起農產品質量的嚴重下降,甚至導致農作物疾病的蔓延。因此,及時準確地檢測農作物害蟲,對於保障農業生產安全、提高農產品質量、促進農業可持續發展具有重要意義。傳統的農作物害蟲檢測方法主要依賴人工目視識別,這種方法不僅效率低下,而且準確率受限於檢測人員的經驗和專業知識。
隨著深度學習技術的迅猛發展,基於影像處理的害蟲檢測方法成為研究熱點。特別是YOLO(You Only Look Once)系列演算法在目標檢測領域取得了顯著的進展,其快速、高效的檢測能力為農作物害蟲檢測提供了新的技術方案。YOLOv5及其後續版本YOLOv6、v7、v8等,透過不斷最佳化和改進演算法結構、訓練策略和資料處理方式,顯著提升了檢測速度和準確性,使得害蟲檢測更加快速和準確。
當前,基於深度學習的農作物害蟲檢測研究主要集中在提高檢測演算法的準確性、擴大檢測型別的範圍、最佳化演算法以適應不同環境條件下的害蟲檢測等方面。國內外許多學者透過改進YOLO演算法,或者結合其他深度學習技術,如卷積神經網路(CNN)、影像處理技術等,開展了大量的研究工作,並取得了積極的進展。例如,一些研究透過增加資料集的多樣性和豐富度,提高了模型的泛化能力和準確度。同時,也有研究致力於減少演算法的計算複雜度,以適應實時檢測的需要。
本部落格旨在探討農作物害蟲檢測的研究背景和意義,回顧國內外在該領域的最新研究進展,特別是目標檢測演算法在表情識別中的應用和發展,以及介紹最新的技術改進和資料集更新情況。透過這一系列的分析和討論,我們希望能夠為該領域的研究者和應用開發者提供有價值的資訊和啟發,共同推進農作物害蟲檢測技術的進步和應用。
2.2 國內外研究現狀
隨著深度學習技術在農業領域的廣泛應用,尤其是在農作物害蟲檢測方面,國內外學者提出了多種基於深度學習的檢測演算法,顯著提高了檢測的準確性和效率。近年來,YOLO系列演算法因其高效的檢測速度和較好的準確率,成為了研究的熱點。YOLO[1]系列作為實時目標檢測的代表演算法,經歷了從YOLOv1到YOLOv8的發展歷程。其中,YOLOv4和其後的版本在效能上取得了顯著提升。YOLOv4透過引入更多的資料增強技術、更深的網路結構和新的特徵融合策略,大幅提高了檢測的準確度和速度。隨後,YOLOv5[2]在易用性和速度上進一步最佳化,儘管它並非官方版本,但因其出色的效能和廣泛的社群支援成為了業界的熱點。YOLOv6[3]和YOLOv7[4]分別圍繞模型的輕量化和進一步的效能提升進行設計,特別是在小目標檢測上的表現。而最新的YOLOv8[5]則在此基礎上進一步強化了模型的泛化能力和檢測效率,使其在農作物害蟲檢測等複雜場景中表現更加出色。
隨著機器視覺和深度學習技術的快速發展,除了YOLO系列之外,還有多種演算法在農作物害蟲檢測領域被廣泛研究。例如,Fast R-CNN、SSD和Mask R-CNN等演算法也被應用於害蟲檢測中,這些演算法各有優勢,例如Mask R-CNN不僅能進行害蟲的檢測,還能實現對害蟲的精確分割,有助於瞭解害蟲的具體分佈情況。
高質量的資料集是深度學習模型訓練的關鍵。傳統的害蟲檢測資料集多側重於常見害蟲種類,且往往受限於特定地區和作物型別,這限制了模型的泛化能力。近年來,一些新的資料集開始涵蓋更廣泛的害蟲種類和更多樣的農作物環境。例如,“全球農作物害蟲資料集2024”(GCPD2024)收錄了來自50多個國家、覆蓋100種以上農作物的害蟲影像,極大地豐富了研究者在害蟲檢測模型訓練時的資源。
儘管深度學習技術在害蟲檢測中取得了顯著成果,但仍面臨一些挑戰。例如,小目標檢測的準確性不高、在複雜背景下的害蟲識別困難、模型的實時性和泛化能力仍需提高等。此外,害蟲種類繁多、形態多變,使得高準確率的害蟲檢測成為一個技術難題。為應對這些挑戰,研究者開始探索使用生成對抗網路(GANs)增強資料集、利用遷移學習提高模型的泛化能力、以及開發更為複雜的網路結構來提升小目標檢測的準確性。
隨著計算資源的日益豐富和演算法的不斷最佳化,實時高效的害蟲檢測系統將成為可能。同時,結合無人機等現代農業技術,進行大規模的害蟲監測和精確施藥將成為趨勢。此外,隨著邊緣計算技術的發展,將深度學習模型部署於移動裝置和農業機器人上,實現害蟲檢測的本地化和實時化,也將成為一個重要的研究方向。
2.3 要解決的問題及其方案
2.3.1 要解決的問題
針對農作物害蟲檢測系統,本專案旨在解決一系列複雜挑戰,透過整合最新的深度學習模型和開發先進的網頁應用來提升害蟲檢測的準確性、速度和使用者體驗。以下是系統設計與實現過程中需解決的關鍵問題及相應的解決方案。
-
害蟲識別的準確性與實時處理能力:
害蟲種類繁多,且其在不同生長階段的形態差異較大,這對檢測系統的準確性提出了高要求。同時,農業應用場景需要系統能夠快速響應,實現實時害蟲檢測。為此,本系統核心整合了基於YOLOv8/v7/v6/v5的深度學習模型,利用它們在目標檢測領域的優勢,結合PyTorch框架進行高效訓練與推理,以實現對害蟲的快速準確識別。 -
模型的泛化能力和環境適應性:
農作物生長環境複雜多變,不同光照、天氣條件以及背景噪聲均可能影響檢測效果。本專案透過豐富的資料預處理和增強技術,以及在多種環境條件下的大規模資料集訓練,提升了模型的泛化能力和環境適應性。 -
使用者互動介面的直觀性和功能性:
基於Streamlit開發的互動式Web應用介面,為使用者提供了影像、影片和實時攝像頭的害蟲檢測功能。介面設計注重使用者體驗,透過CSS美化,實現了直觀易用的操作介面。使用者可以輕鬆上傳影像或影片進行檢測,或透過攝像頭實現實時害蟲監控,並能夠便捷地切換不同的模型檔案,以適應不同的檢測需求。 -
資料處理能力和儲存效率:
考慮到系統將處理大量影像和影片資料,使用PyTorch和其他高效的資料處理庫最佳化了資料的載入、預處理和批處理過程,提高了檢測的速度和效率。同時,採用了高效的資料儲存解決方案,最佳化了資料的組織和查詢方式,確保了長期執行的資料管理和存取效率。 -
系統的可擴充套件性和維護性:
系統設計充分考慮了未來的擴充套件需求,採用模組化的設計理念,使得新增害蟲種類識別、整合新的深度學習模型或升級現有功能變得更加容易。透過在PyCharm這類成熟的IDE環境下開發,確保了程式碼的質量和可維護性,便於系統的持續迭代和最佳化。
2.3.2 解決方案
-
深度學習模型的選擇和最佳化
模型架構:選擇YOLOv8/v7/v6/v5作為核心的深度學習模型組合,針對不同的害蟲種類和檢測場景進行最佳化。這些模型在速度和準確度之間提供了出色的平衡,並透過版本迭代不斷最佳化,使其非常適合於複雜的農作物害蟲檢測任務。
資料增強:利用豐富的資料增強技術,如隨機裁剪、縮放、旋轉、色彩調整等,以及GANs生成的合成影像,來模擬多樣化的環境條件下的害蟲影像,從而提升模型的泛化能力和對複雜場景的適應性。
遷移學習:採用在大規模影像資料集上預訓練的模型作為起點,透過遷移學習技術進行微調,專注於農作物害蟲的特定檢測任務。這樣可以加速模型訓練過程,並顯著提高識別效能。 -
技術框架和開發工具
PyTorch框架:使用PyTorch作為深度學習框架,它為模型的開發、訓練和推理提供了靈活和強大的支援。PyTorch的動態計算圖和豐富的API能夠加速實驗過程,便於快速迭代和最佳化。
Streamlit網頁設計:基於Streamlit構建互動式Web應用介面,使使用者可以輕鬆上傳影像、影片進行害蟲檢測,或透過攝像頭實現實時監控。Streamlit的簡潔API和資料視覺化功能,為開發美觀、功能豐富的使用者介面提供了強大支援。
CSS美化:利用CSS對Streamlit應用進行風格定製和美化,提高使用者介面的美觀度和使用者體驗。透過CSS,可以調整佈局、顏色、字型等元素,使介面更加直觀和友好。 -
功能實現和系統設計
多輸入源支援:設計系統以支援多種輸入源,包括影像檔案、影片流和實時攝像頭捕獲,以適應不同的農業監測和害蟲檢測場景。
模型切換功能:實現使用者可自由切換不同預訓練模型的功能,增加系統的靈活性和適用範圍。這使得使用者可以根據實際需求選擇最合適的模型進行害蟲檢測。 -
資料處理和儲存策略
高效資料處理:利用PyTorch的高效資料載入器和預處理機制,結合多執行緒和GPU加速技術,確保資料處理的高速效能,滿足實時檢測的需求。
智慧資料儲存:設計高效且可擴充套件的資料儲存方案,對檢測結果和歷史資料進行有效組織,便於使用者進行查詢、分析和回溯。 -
效能最佳化和系統測試
效能調優:透過模型和系統效能分析,識別效能瓶頸並進行針對性最佳化,如模型精簡、硬體加速等,以保證系統的高效執行。
全面測試:進行全面的系統測試,包括功能測試、效能測試和使用者體驗測試,確保系統的穩定性、準確性和可靠性。
透過實施上述策略,我們的目標是開發一個準確、高效且使用者友好的農作物害蟲檢測系統,能夠在多種使用場景下滿足使用者的需求,同時提供強大的資料處理能力和良好的使用者體驗。
2.4 博文貢獻與組織結構
本文綜合探討了基於YOLOv8/v7/v6/v5等深度學習模型的農作物害蟲檢測系統,不僅提供了該領域的詳細文獻綜述,還深入分析了資料集處理方法、演算法選擇理由、以及如何使用Streamlit開發美觀且使用者友好的Web介面。此外,文章還比較了YOLOv7、v6、v5等演算法在害蟲檢測任務上的效能,並提供了完整的資料集和程式碼資源包,以便於讀者理解、復現和進一步研究。以下是本文的主要貢獻:
-
文獻綜述:提供了關於農作物害蟲檢測領域的最新研究進展,包括但不限於YOLO系列演算法的應用、其他相關深度學習演算法的探索、資料集的開發和處理技術等。
-
資料集處理:詳細介紹了資料集的收集、預處理和增強方法,旨在提升模型訓練的效率和檢測準確率。
-
演算法選擇和最佳化:深入分析了選擇YOLOv8、v7、v6、v5等演算法的理由,包括它們在速度、準確性和適用性方面的優勢,並討論了對這些模型的定製化改進,以適應農作物害蟲檢測的特殊需求。
-
Streamlit網頁設計:基於Streamlit框架,設計並實現了一個美觀、直觀且功能豐富的Web應用介面,支援影像、影片和實時攝像頭輸入,使用者可以輕鬆切換不同的模型進行害蟲檢測。
-
演算法效能對比:透過對YOLOv7、v6、v5等不同版本的演算法在相同資料集上的檢測效果進行對比,提供了關於演算法選擇的有價值見解。
-
資源分享:提供了完整的資料集和程式碼資源包,包括模型預訓練檔案、訓練和預測的程式碼,以促進知識共享和技術傳播。
後續章節的組織結構如下: 緒論:介紹研究背景、目的和本文的主要貢獻;演算法原理:詳細介紹YOLOv8/v7/v6/v5等演算法的工作原理及其在農作物害蟲檢測中的應用;資料集處理:討論使用的資料集及其預處理、增強方法。程式碼介紹:提供模型訓練和預測的詳細程式碼說明,包括環境搭建、引數配置和執行步驟。實驗結果與分析:展示不同模型在農作物害蟲檢測任務上的實驗結果,並進行比較分析。系統設計與實現:介紹基於Streamlit的農作物害蟲檢測系統的設計與實現細節。結論與未來工作:總結本文的研究成果,並討論未來的研究方向和潛在的改進空間。
3. 資料集處理
在構建用於農作物害蟲檢測的深度學習模型時,擁有一個高質量的資料集是至關重要的。本研究採用的資料集涵蓋了6971張影像,細緻地分為6084張訓練影像、770張驗證影像以及117張測試影像,確保了在模型訓練和評估階段的需要。這種劃分策略有助於模型學習到各種害蟲的特徵,並在未知資料上進行泛化效能的準確評估。博主使用的類別如下:
Chinese_name = {"Hellula undalis": "小菜蛾",
"Leaf Webber": "葉網蛾",
"ash weevil": "灰象甲",
"blister beetle": "水泡甲蟲",
"fruit fly": "果蠅",
"fruit sucking moth": "吸果蛾",
"helicoverpa": "棉鈴蟲",
"leucinodes": "茄果螟",
"mealy bug": "粉蝨",
"pieris": "菜粉蝶",
"plutella": "小菜蛾",
"root grubs": "根蛆",
"schizaphis graminum": "禾穀縊管蚜",
"uroleucon compositae": "合頭菊蚜",
"whitefly": "白粉蝨"}
資料集的多樣性體現在影像中害蟲的多種類別及其在不同背景下的出現上。這包括從常見的leaf beetle到較少見的Heliothis viriplaca,使得模型有機會學習和識別廣泛的害蟲。然而,類別分佈的不均衡性引入了一定的挑戰。對於那些例項較少的害蟲類別,模型可能難以有效學習其特徵,這要求在訓練過程中採用特別的策略,如過取樣或合成資料技術,以避免對多數類別的過度擬合。
為了增強模型的泛化能力和適應性,我們對資料集中的影像進行了一系列的預處理和增強操作。預處理包括影像大小的調整和畫素值的歸一化,而增強處理則包含了一系列旨在模擬不同光照和環境條件的技術,如隨機裁剪、旋轉、縮放和色彩調整。這些步驟不僅提高了模型對變化環境的適應性,也有助於減少過擬合,確保在實際應用中的穩健性。
資料集的詳細標註資訊對於訓練高效的目標檢測模型至關重要。透過精確的標註,我們確保了模型能夠從每個類別中學習到有用的特徵。然而,標註的分佈顯示了一些顯著的特點。多數害蟲被標註在影像的中心區域,這可能是資料收集時的特定偏好或裝置設定的結果。同樣地,害蟲在影像中的相對大小偏小,強調了在目標檢測中對小目標的識別為一個普遍的難題。
總結來說,我們的資料集在類別多樣性、影像質量、標註準確性上均達到了很高的標準,但也存在不均衡分佈和小目標檢測的挑戰。透過有效的資料預處理和增強技術,我們提高了模型對這些挑戰的適應能力。未來的研究將致力於解決類別不平衡問題,並進一步提升小目標害蟲的檢測精度,從而推動農業害蟲管理技術的發展。
4. 原理與程式碼介紹
4.1 YOLOv8演算法原理
Ultralytics公司於2023年初發布YOLOv8模型,相較於2020年釋出的YOLOv5模型,YOLOv8模型將C3模組(CSP Bottleneck with 3 convolutions)改進成C2f模組(CSP Bottleneck with 2 convolutions),C3模組和C2f模組結構如下圖(a)所示。圖中CBS(Convolutions Bn SiLU)模組由基礎卷積(Conv)、批次歸一化(BN)和啟用函式(SiLU)組成。C2f模組採用了多分支流設計,為模型提供了更豐富的梯度資訊,強化了模型的特徵提取能力,提高網路的學習效率。
YOLOv8採用了動態標籤匹配策略,增加了正樣本框選擇的靈活度。在損失計算方面,YOLOv8除了計算分類和迴歸損失外,還引入了DFL(distribution focal loss)損失。DFL損失利用交叉熵的思想,透過將預測框迴歸至標籤框的上下整數範圍內,最佳化模型訓練。
接下來詳細介紹構建用於農作物害蟲檢測的深度學習模型的程式碼結構和功能。這一過程包括模型的初始化、載入、預處理、預測以及結果的後處理等關鍵步驟。首先,程式碼透過匯入必要的庫和模組開始。cv2
是OpenCV庫,廣泛應用於影像處理和計算機視覺任務。torch
是PyTorch深度學習框架,用於構建和訓練模型。Detector
是一個抽象基類,定義了檢測器應有的基本功能和結構。YOLO
類專門用於載入和執行YOLO模型,而select_device
函式用於根據是否有可用的CUDA裝置來選擇執行模型的裝置(GPU或CPU)。
import cv2
import torch
from QtFusion.models import Detector
from datasets.EmotionData.label_name import Chinese_name
from ultralytics import YOLO
from ultralytics.utils.torch_utils import select_device
接著,設定了模型執行的初始引數ini_params
,這包括裝置型別、置信度閾值、IOU閾值等。這些引數對於模型的效能和檢測結果的質量至關重要。
device = "cuda:0" if torch.cuda.is_available() else "cpu"
ini_params = {
'device': device,
'conf': 0.25,
'iou': 0.5,
'classes': None,
'verbose': False
}
count_classes
函式用於統計每個類別的檢測數量。它接受檢測資訊和類別名稱列表作為輸入,並返回一個與類別名稱列表相對應的計數列表。這個功能對於分析模型在不同類別上的表現非常有用。
def count_classes(det_info, class_names):
count_dict = {name: 0 for name in class_names}
for info in det_info:
class_name = info['class_name']
if class_name in count_dict:
count_dict[class_name] += 1
count_list = [count_dict[name] for name in class_names]
return count_list
YOLOv8v5Detector
類是整個檢測流程的核心。該類繼承自Detector
基類,提供了載入模型、影像預處理、執行預測和後處理檢測結果等方法。在初始化時,該類接受一個引數字典,並用於設定模型的執行引數。load_model
方法負責載入指定路徑的預訓練YOLO模型,並進行必要的裝置選擇和模型預熱。preprocess
方法對輸入影像進行預處理,以適應模型的輸入要求。predict
方法執行表情識別的預測過程,而postprocess
方法則處理模型的輸出,將其轉換為易於理解和使用的格式,例如將檢測到的表情標註在影像上。
class YOLOv8v5Detector(Detector):
def __init__(self, params=None):
super().__init__(params)
self.model = None
self.img = None
self.names = list(Chinese_name.values())
self.params = params if params else ini_params
def load_model(self, model_path):
self.device = select_device(self.params['device'])
self.model = YOLO(model_path)
names_dict = self.model.names
self.names = [Chinese_name[v] if v in Chinese_name else v for v in names_dict.values()]
self.model(torch.zeros(1, 3, *[self.imgsz] * 2).to(self.device).type_as(next(self.model.model.parameters())))
def preprocess(self, img):
self.img = img
return img
def predict(self, img):
results = self.model(img, **ini_params)
return results
def postprocess(self, pred):
results = []
for res in pred[0].boxes:
for box in res:
class_id = int(box.cls.cpu())
bbox = box.xyxy.cpu().squeeze().tolist()
bbox = [int(coord) for coord in bbox]
result = {
"class_name": self.names[class_id],
"bbox": bbox,
"score": box.conf.cpu().squeeze().item(),
"class_id": class_id,
}
results.append(result)
return results
def set_param(self, params):
self.params.update(params)
最後,set_param
方法允許動態更新檢測引數,如置信度閾值和IOU閾值,這為使用者提供了更大的靈活性和控制能力,以最佳化檢測結果。
這部分程式碼構建了一個完整的農作物害蟲檢測流程,從載入預訓練的YOLO模型到執行表情檢測,並處理檢測結果,提供了一套完備的解決方案。透過細緻的功能設計和引數設定,這個系統能夠高效且準確地識別影像或影片中的農作物害蟲,滿足不同場景下的應用需求。
4.3 訓練程式碼
在本篇部落格中,我們將探討如何使用YOLOv8模型來訓練一個農作物害蟲檢測系統。這一過程不僅涉及到深度學習模型的載入和初始化,還包括資料集的準備以及訓練引數的配置。以下表格詳細介紹了YOLOv8模型訓練中使用的一些重要超引數及其設定:
超引數 | 設定 | 說明 |
---|---|---|
學習率(lr0 ) |
0.01 | 決定了模型權重調整的步長大小,在訓練初期有助於快速收斂。 |
學習率衰減(lrf ) |
0.01 | 控制訓練過程中學習率的降低速度,有助於模型在訓練後期細緻調整。 |
動量(momentum ) |
0.937 | 加速模型在正確方向上的學習,並減少震盪,加快收斂速度。 |
權重衰減(weight_decay ) |
0.0005 | 防止過擬合,透過在損失函式中新增正則項減少模型複雜度。 |
熱身訓練週期(warmup_epochs ) |
3.0 | 初始幾個週期內以較低的學習率開始訓練,逐漸增加到預定學習率。 |
批次大小(batch ) |
16 | 每次迭代訓練中輸入模型的樣本數,影響GPU記憶體使用和模型效能。 |
輸入影像大小(imgsz ) |
640 | 模型接受的輸入影像的尺寸,影響模型的識別能力和計算負擔。 |
環境設定與模型載入:首先,匯入必要的庫和模組:
import os
import torch
import yaml
from ultralytics import YOLO # 用於載入YOLO模型
from QtFusion.path import abs_path # 用於獲取檔案的絕對路徑
這裡,torch
是PyTorch深度學習框架,用於模型的訓練與推理。yaml
用於處理資料集的配置檔案。YOLO
類用於載入和訓練YOLO模型。
接下來,根據系統是否支援CUDA,自動選擇使用GPU或CPU作為訓練裝置:
device = "0" if torch.cuda.is_available() else "cpu"
資料集準備:定義訓練過程中使用的基本引數:
workers = 1 # 工作程序數
batch = 8 # 每批處理的影像數量
指定資料集名稱,並構建配置檔案的路徑。這裡使用了abs_path
函式,確保無論當前工作目錄在何處,都能正確找到配置檔案的路徑:
data_name = "InsectPest"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current') # 資料集的yaml的絕對路徑
unix_style_path = data_path.replace(os.sep, '/')
為確保資料集路徑的正確性,在讀取配置檔案後,將資料集的路徑設定為配置檔案所在目錄的路徑:
directory_path = os.path.dirname(unix_style_path)
with open(data_path, 'r') as file:
data = yaml.load(file, Loader=yaml.FullLoader)
if 'path' in data:
data['path'] = directory_path
with open(data_path, 'w') as file:
yaml.safe_dump(data, file, sort_keys=False)
訓練模型:載入預訓練的YOLOv8模型。這裡指定了模型權重檔案的路徑,並將任務型別設定為detect
,表示我們將使用模型進行目標檢測:
model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')
最後,開始訓練模型。在train
方法中,我們詳細指定了訓練的引數,包括資料集配置檔案的路徑、訓練使用的裝置、工作程序數、輸入影像的大小、訓練週期以及每批次的大小:
results2 = model.train(
data=data_path,
device=device,
workers=workers,
imgsz=640,
epochs=120,
batch=batch,
name='train_v8_' + data_name
)
透過上述過程,我們成功地配置並啟動了農作物害蟲檢測模型的訓練任務。YOLOv8作為一個強大的目標檢測框架,為我們的訓練任務提供了良好的支援,使得訓練過程既高效又方便。在訓練完成後,我們將得到一個針對農作物害蟲檢測任務最佳化過的模型,它將能夠準確識別和分析影像中的農作物害蟲,為後續的應用提供強大的技術支撐。
5. 實驗結果與分析
5.1 訓練曲線
採用以上程式碼進行訓練,得到的訓練過程曲線如下,展示了使用YOLOv8模型在農作物害蟲檢測任務上的訓練過程中各項指標的變化情況。這些指標包括了訓練和驗證階段的各種損失函式,以及精確度、召回率和平均精度(mAP)的指標。
首先,訓練過程中的損失函式曲線顯示了模型對資料的擬合情況。從圖中可以看出,無論是邊界框損失(box_loss)、分類損失(cls_loss)還是目標損失(obj_loss),訓練和驗證損失都隨著迭代次數的增加而顯著下降,並趨於穩定。這表明模型在學習過程中逐漸提升了對農作物害蟲特徵的識別能力,並且沒有出現過擬合的跡象,這是由於驗證損失(val_loss)並未在訓練損失顯著下降後開始上升,而是保持在一個較低的水平,這表明模型對未見資料具有良好的泛化能力。
在評價指標方面,精確度(precision)和召回率(recall)曲線給出了模型效能的進一步證據。精確度曲線展示了模型預測為正樣本中實際為正樣本的比例,而召回率曲線則顯示了所有正樣本中被模型正確預測的比例。兩者均隨著迭代次數的增加而提高,表明模型在區分害蟲與非害蟲方面變得更加精確,並能夠找到更多的真實害蟲目標。
最後,mean Average Precision(mAP)是目標檢測中的關鍵效能指標,它綜合了精確度和召回率。在這裡,我們看到了在不同的IoU閾值下,模型的mAP呈現出穩定上升的趨勢,這是模型效能最佳化的有力證據。尤其是mAP@0.5,即IoU閾值為0.5時的mAP,已經達到了較高的水平,這表示模型在較寬鬆的標準下表現出色。而mAP@0.5-0.95則考慮了從寬鬆到嚴格的一系列IoU閾值,它提供了一個更全面的模型效能評價。
5.2 混淆矩陣
混淆矩陣是評估分類模型效能的重要工具,尤其是在害蟲檢測這樣的多類別問題中,它能幫助我們深入理解模型在各個類別上的預測準確性。從您提供的混淆矩陣中,我們可以觀察到模型在多數類別上的效能表現。
具體來看,某些類別如blister beetle和whitefly表現出高準確度,對角線上的值分別為0.97和0.80,這表示模型能夠非常準確地識別這些害蟲。然而,也有一些類別,如ash weevil,準確度較低,僅為0.76,且有相對較高的錯誤預測,這可能由於害蟲形態相似性高或資料集樣本不足。
模型在Helicoverpa上的預測表現出較大的混淆,其準確度只有0.68,表明該類別的害蟲容易被誤分類到其他類別。同樣地,fruit sucking moth也存在一定程度的混淆,儘管其準確度為0.92,但還是有約8%的例項被誤分類。此外,對於background類別,也存在不少害蟲被錯誤地分類為背景,這可能指向模型在區分害蟲與複雜背景方面的挑戰。
混淆矩陣不僅展現了模型的分類準確度,還揭示了模型的偏好與弱點。例如,模型在區分leaf weber和ash weevil時可能會混淆,因為這兩個類別在混淆矩陣中有較多的交叉錯誤。
為了提升模型的整體效能和降低誤分類率,我們需要對模型進行進一步的微調。可以透過增加樣本數量、進行更加複雜的資料增強、或者調整分類閾值來解決特定類別的混淆問題。另外,深入分析那些具有較高混淆率的類別之間的共同特徵,將有助於我們在資料收集和特徵工程方面進行更精確的調整。
綜上所述,儘管模型在某些類別上表現出色,但在其他一些類別上仍存在改進空間。未來的工作將集中於識別導致誤分類的因素,並採取針對性措施,如改進資料集的質量和多樣性,最佳化模型架構,或者應用更高階的分類策略,以實現更高準確性的害蟲檢測。透過這些改進,模型將更加適應實際應用中的複雜環境,為農業害蟲管理提供更為強大的技術支援。
5.3 YOLOv8/v7/v6/v5對比實驗
(1)實驗設計:
本實驗旨在評估和比較YOLOv5、YOLOv6、YOLOv7和YOLOv8幾種模型在農作物害蟲目標檢測任務上的效能。為了實現這一目標,博主分別使用使用相同的資料集訓練和測試了這四個模型,從而可以進行直接的效能比較。該資料集包含農作物害蟲的影像。本文將比較分析四種模型,旨在揭示每種模型的優缺點,探討它們在工業環境中實際應用的場景選擇。
模型 | 影像大小 (畫素) | mAPval 50-95 | CPU ONNX 速度 (毫秒) | A100 TensorRT 速度 (毫秒) | 引數數量 (百萬) | FLOPs (十億) |
---|---|---|---|---|---|---|
YOLOv5nu | 640 | 34.3 | 73.6 | 1.06 | 2.6 | 7.7 |
YOLOv8n | 640 | 37.3 | 80.4 | 0.99 | 3.2 | 8.7 |
YOLOv6N | 640 | 37.5 | - | - | 4.7 | 11.4 |
YOLOv7-tiny | 640 | 37.4 | - | - | 6.01 | 13.1 |
(2)度量指標:
- F1-Score:F1-Score是精確率(Precision)和召回率(Recall)的調和平均值。精確率是指模型正確識別的正例與所有識別為正例的案例之比,而召回率是指模型正確識別的正例與所有實際正例之比。F1-Score對於不平衡的資料集或者需要同時考慮精確率和召回率的任務特別重要。
- mAP(Mean Average Precision):mAP是衡量模型在多個類別上平均檢測準確度的指標。它計算了模型在所有類別上的平均精度,是目標檢測領域中常用的效能度量。
名稱 | YOLOv5nu | YOLOv6n | YOLOv7-tiny | YOLOv8n |
---|---|---|---|---|
mAP | 0.925 | 0.918 | 0.884 | 0.918 |
F1-Score | 0.88 | 0.88 | 0.84 | 0.89 |
(3)實驗結果分析:
從雙條形圖中可以觀察到,在mAP指標上,YOLOv5nu表現出最佳的效能,得分為0.925,而YOLOv7-tiny的得分最低,為0.884。對於F1-Score,YOLOv8n以0.89的得分領先,而YOLOv7-tiny則同樣表現出較低的分數0.84。值得注意的是,儘管YOLOv6n在mAP上略低於YOLOv5nu,它在F1-Score上與YOLOv5nu持平,都是0.88,這表明在害蟲檢測的精確度和召回率的平衡上,YOLOv6n表現出與YOLOv5nu相似的效能。
這些觀察結果為深入理解各個模型的效能特點提供了重要資訊,有助於指導未來的模型選擇和最佳化方向。尤其是對於計算資源受限的場景,選擇效能與資源消耗之間最優的模型至關重要。在實際應用中,例如農業害蟲檢測,這樣的比較分析可以幫助研究者和從業者選擇一個適合其具體需求的模型,確保害蟲檢測系統既高效又準確。
6. 系統設計與實現
6.1 系統架構設計
本系統旨在提供一個實時的農作物害蟲檢測平臺,它能夠透過攝像頭捕獲或上傳的檔案進行表情檢測,並實時顯示檢測結果。系統架構設計圍繞三個主要部分展開:使用者介面(UI)、檢測引擎、結果展示與記錄。這三個部分協同工作,提供一個流暢且互動性強的使用者體驗。
(一)資料收集與預處理
在系統的最初階段,資料收集與預處理是至關重要的一步。為了訓練一個高效的害蟲檢測模型,我們需要收集大量的害蟲影像資料,這些資料包括不同種類、不同成長階段的害蟲影像。透過Label_list類,我們定義了一個清晰的害蟲類別標籤列表,確保每一張影像都被正確標註。
接下來,資料預處理是透過影像增強、標註等步驟來完成的。我們採用了cv2和numpy庫來處理影像資料,包括調整影像尺寸、影像歸一化等,以適配後續模型訓練的需求。
(二)模型訓練
本系統選擇YOLOv8/v7/v6/v5作為害蟲檢測的核心模型。YOLOv8v5Detector類是模型訓練和檢測的關鍵,負責模型的載入、訓練和預測。我們首先透過load_model方法載入預訓練的模型權重,然後對其進行微調,以適應我們的害蟲檢測任務。模型訓練過程中,透過調整conf_threshold和iou_threshold引數(分別代表置信度閾值和IOU閾值),我們可以最佳化模型的檢測效能。
(三)檢測與識別
在模型訓練完成後,接下來的步驟是檢測與識別。系統透過Detection_UI類整合了整個檢測流程。當農作物影像透過攝像頭或檔案上傳到系統中時,process_camera_or_file方法被呼叫,負責處理攝像頭捕獲的實時影像或上傳的檔案。對於每一幀影像,都會透過frame_process方法進行處理,並使用訓練好的模型進行預測。預測結果包括害蟲的位置、類別和置信度,將以影像標註的形式直觀展現。
(四)結果處理與反饋
最後,結果處理與反饋對於農作物害蟲管理至關重要。系統不僅展示了檢測結果,還透過LogTable類記錄了檢測過程中的詳細資訊,包括檢測時間、位置、置信度等,便於後續分析。此外,系統還提供了匯出結果的功能,透過點選“匯出結果”按鈕,檢測結果將被儲存為CSV檔案,為農藥噴灑、病蟲害防治提供科學依據。
透過以上的系統架構設計,我們的害蟲檢測系統不僅能夠實現高效準確的害蟲檢測,還能為使用者提供直觀的結果展示和資料分析功能。這一系統的設計充分考慮了實際應用的需求,為現代精準農業提供了強有力的技術支援。
6.2 系統流程
下面是按照程式流程步驟,每一步驟都是根據程式碼中的類和方法設計的,目的就是為了給大家提供一個清晰、高效的操作流程,以確保使用者能夠輕鬆使用系統並獲取準確的檢測結果。結合程式碼細節的介紹如下:
-
初始化系統(Detection_UI類的__init__方法)
- 系統配置:首先,系統透過setup_page方法設定頁面佈局和標題。隨後,setup_sidebar方法初始化側邊欄,包括模型設定、攝像頭配置和識別專案設定等。
- 載入模型:接著,系統透過YOLOv8v5Detector類的load_model方法載入訓練好的模型權重。這一步驟是害蟲檢測的關鍵,決定了系統的檢測效能。
- 資料處理:系統透過維護一個cls_name和colors的列表,為每個害蟲類別分配一個隨機顏色,用於後續的影像標註。
-
配置模型引數和輸入選擇:
- 模型引數設定:使用者透過側邊欄中的滑動條選擇conf_threshold(置信度閾值)和iou_threshold(IOU閾值)。
- 輸入選擇:使用者可以選擇使用攝像頭實時檢測或上傳圖片/影片檔案進行害蟲檢測。
-
害蟲檢測處理流程:
- 處理攝像頭或檔案輸入:透過process_camera_or_file方法,系統根據使用者的輸入選擇進行不同的處理流程:
- 攝像頭輸入:系統實時捕捉影片幀,並透過frame_process方法對每一幀進行害蟲檢測。
- 圖片/影片檔案上傳:對上傳的圖片或影片檔案,同樣採用frame_process方法進行害蟲檢測。
- 處理攝像頭或檔案輸入:透過process_camera_or_file方法,系統根據使用者的輸入選擇進行不同的處理流程:
-
害蟲檢測與結果展示:
- 害蟲檢測:無論是攝像頭捕獲的影片幀還是上傳的圖片/影片檔案,都會經過frame_process方法處理。在此方法內部,使用YOLOv8v5Detector類的predict方法對影像進行預測,然後根據預測結果,使用drawRectBox方法在影像上繪製邊界框和類別標籤。
- 結果展示:檢測結果將直觀展示在頁面上,包括害蟲的邊界框、類別和置信度。同時,LogTable類記錄詳細的檢測資訊,如檢測時間、位置等,方便使用者進行進一步分析。
-
結果匯出與分析:
- 匯出結果:使用者可以透過點選“匯出結果”按鈕,將檢測結果匯出為CSV檔案,以便於後續的資料分析和決策支援。
- 日誌和統計分析:LogTable類提供了儲存和更新檢測日誌的功能,使用者可以檢視整個檢測會話中的所有檢測結果,進一步分析害蟲的分佈情況和活動規律。
透過上述流程,基於YOLO系列模型的農作物害蟲檢測系統能夠實現高效、準確的害蟲識別和分類,為農業生產提供科學的資料支援。系統的設計充分利用了深度學習技術的優勢,提升了農業害蟲管理的智慧化水平。
程式碼下載連結
如果您希望獲取部落格中提及的完整資源包,包含測試圖片、影片、Python檔案(*.py)、網頁配置檔案、訓練資料集、程式碼及介面設計等,可訪問博主在麵包多平臺的上傳內容。相關的部落格和影片資料提供了所有必要檔案的下載連結,以便一鍵執行。完整資源的預覽如下圖所示:
資源包中涵蓋了你需要的訓練測試資料集、訓練測試程式碼、UI介面程式碼等完整資源,完整專案檔案的下載連結可在下面的影片簡介中找到➷➷➷
演示與介紹影片 :https://www.bilibili.com/video/BV18D421W72W/
YOLOv8/v7/v6/v5專案合集下載:https://mbd.pub/o/bread/mbd-ZZ2YmJhx
YOLOv8和v5專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2Xm59x
YOLOv7專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2Ylp5y
YOLOv6專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2Yl5tw
完整安裝執行教程:
這個專案的執行需要用到Anaconda和Pycharm兩個軟體,下載到資原始碼後,您可以按照以下連結提供的詳細安裝教程操作即可執行成功,如仍有執行問題可私信博主解決:
- Pycharm和Anaconda的安裝教程:https://deepcode.blog.csdn.net/article/details/136639378;
軟體安裝好後需要為本專案新建Python環境、安裝依賴庫,並在Pycharm中設定環境,這幾步採用下面的教程可選線上安裝(pip install直接線上下載包)或離線依賴包(博主提供的離線包直接裝)安裝兩種方式之一:
- Python環境配置教程:https://deepcode.blog.csdn.net/article/details/136639396(2,3方法可選一種);
- 離線依賴包的安裝指南:https://deepcode.blog.csdn.net/article/details/136650641(2,3方法可選一種);
如使用離線包方式安裝,請下載離線依賴庫,下載地址:https://pan.baidu.com/s/1uHbU9YzSqN0YP_dTHBgpFw?pwd=mt8u (提取碼:mt8u)。
7. 結論與未來工作
本文深入研究並實踐了基於YOLOv8/v7/v6/v5的深度學習模型在農作物害蟲檢測領域的應用,成功開發了一個結合了這些先進演算法的農作物害蟲檢測系統。透過對多個版本的YOLO模型進行細緻的比較和最佳化,本研究不僅顯著提升了農作物害蟲檢測的準確率和實時性,還透過Streamlit建立了一個直觀、美觀且易於使用的Web應用,使使用者能夠輕鬆地進行害蟲檢測,從而在實際農業應用中發揮重要作用。
經過一系列實驗驗證,本文所提出的方法在害蟲檢測的準確性和處理速度上都達到了令人滿意的水平。同時,我們還提供了完整的資料集處理流程、模型訓練和預測的程式碼,以及基於Streamlit的系統設計和實現細節,為後續的研究者和開發者復現和參考提供了方便。儘管取得了一定的成果,但農作物害蟲檢測作為一個複雜多變的任務,仍然面臨著許多挑戰和改進空間。在未來的工作中,我們計劃從以下幾個方向進行探索:
- 模型最佳化:繼續探索更深層次的網路結構和最佳化策略,如神經網路架構搜尋(NAS)技術,以進一步提升模型的效能和效率。
- 多模態融合:考慮結合影像之外的其他資訊,如環境引數(溫度、溼度等)進行害蟲檢測,以更全面地理解農作物害蟲的活動規律。
- 跨域適應性:研究不同地區、不同作物種類的害蟲檢測,透過領域自適應技術提高模型在不同農業環境中的泛化能力。
- 使用者互動體驗:進一步最佳化系統的使用者介面和互動設計,使其更加人性化、智慧化,以滿足更廣泛使用者的需求。
- 實際應用擴充:探索農作物害蟲檢測在更多實際應用場景中的應用,如精準農業管理、農作物健康監測等,以發揮其最大的社會和經濟價值。
總之,農作物害蟲檢測技術正處於快速發展之中,隨著技術的不斷進步和應用場景的不斷擴充,我們相信在不久的將來,基於深度學習的農作物害蟲檢測將在精準農業、生態監測、農業科技創新等領域發揮更加重要的作用。
Liu C, Tao Y, Liang J, et al. Object detection based on YOLO network[C]//2018 IEEE 4th information technology and mechatronics engineering conference (ITOEC). IEEE, 2018: 799-803. ↩︎
Zhu X, Lyu S, Wang X, et al. TPH-YOLOv5: Improved YOLOv5 based on transformer prediction head for object detection on drone-captured scenarios[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 2778-2788. ↩︎
Sun Z, Chen B. Research on Pedestrian Detection and Recognition Based on Improved YOLOv6 Algorithm[C]//International Conference on Artificial Intelligence in China. Singapore: Springer Nature Singapore, 2022: 281-289. ↩︎
Zhao H, Zhang H, Zhao Y. Yolov7-sea: Object detection of maritime uav images based on improved yolov7[C]//Proceedings of the IEEE/CVF winter conference on applications of computer vision. 2023: 233-238. ↩︎
Aboah A, Wang B, Bagci U, et al. Real-time multi-class helmet violation detection using few-shot data sampling technique and yolov8[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2023: 5349-5357. ↩︎