摘要:本文深入研究了基於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.2 模型構建
- 4.3 訓練程式碼
- 5. 實驗結果與分析
- 5.1 訓練曲線
- 5.2 F1曲線圖
- 5.3 YOLOv8/v7/v6/v5對比實驗
- 6. 系統設計與實現
- 6.1 系統架構概覽
- 6.2 系統流程
- 程式碼下載連結
- 7. 結論與未來工作
➷點選跳轉至文末所有涉及的完整程式碼檔案下載頁☇
完整資源中包含資料集及訓練程式碼,環境配置與介面中文字、圖片、logo等的修改方法請見影片,專案完整檔案下載請見演示與介紹影片的簡介處給出:➷➷➷
演示與介紹影片 :https://www.bilibili.com/video/BV12E421g7W3/
YOLOv8/v7/v6/v5專案合集下載:https://mbd.pub/o/bread/mbd-ZZ2Zmp5x
YOLOv8和v5專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2ZmZ5w
YOLOv7專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2ZmZ9u
YOLOv6專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2Zmpxv
若您想獲得博文中涉及的實現完整全部資原始檔(包括測試圖片、影片,py, UI檔案,訓練資料集、訓練程式碼、介面程式碼等),這裡已打包上傳至博主的麵包多平臺,見可參考部落格與影片,已將所有涉及的檔案同時打包到裡面,點選即可執行,完整檔案截圖如下:
1. 網頁功能與效果
(1)開啟攝像頭實時檢測:本系統允許使用者透過網頁直接開啟攝像頭,實現對實時影片流中車型的檢測。系統將自動識別並分析畫面中的車型,並將檢測結果實時顯示在使用者介面上,為使用者提供即時的反饋。
(2)選擇圖片檢測:使用者可以上傳本地的圖片檔案到系統中進行遙感目標檢測。系統會分析上傳的圖片,識別出圖片中的車型,並在介面上展示帶有車型標籤和置信度的檢測結果,讓使用者能夠清晰地瞭解到每個車型狀態。
(3)選擇影片檔案檢測:系統支援使用者上傳影片檔案進行遙感目標檢測。上傳的影片將被系統逐幀分析,以識別和標記影片中每一幀的車型。使用者可以觀看帶有遙感目標檢測標記的影片,瞭解影片中車型的變化。
(4)選擇不同訓練好的模型檔案:系統整合了多個版本的YOLO模型(如YOLOv8/v7/v6/v5),使用者可以根據自己的需求選擇不同的模型進行遙感目標檢測。這一功能使得使用者能夠靈活地比較不同模型的表現,以選擇最適合當前任務的模型。
在“網頁功能與效果”章節中,我們詳盡介紹了一個先進的基於YOLOv8/v7/v6/v5的遙感目標檢測系統的Web應用介面。此係統採用了尖端的目標檢測技術,提供了一系列直觀且易於操作的功能,以增強應用效率和使用者體驗。
首先,實時攝像頭檢測功能允許使用者直接透過網頁開啟攝像頭,進行實時遙感目標檢測,系統自動分析捕獲的畫面,並標註出檢測到的車輛及其類別。此外,使用者還可以透過圖片檢測和影片檔案檢測功能,上傳本地的圖片或影片檔案,系統將分別對上傳的內容進行分析,展示識別結果。
為了滿足不同使用者的需求,本系統提供了模型選擇功能,支援多個訓練好的模型檔案(YOLOv8/v7/v6/v5),使使用者能夠根據需求選擇不同的模型進行檢測,以便比較不同模型的識別效果和處理速度。同時,檢測畫面的顯示模式具有靈活性,畫面顯示模式功能允許使用者同時顯示檢測畫面與原始畫面,或者單獨顯示檢測畫面,方便使用者直觀比較識別前後的區別。
為進一步提升使用者體驗,系統加入了目標篩選展示功能,使用者可以透過下拉框選擇標記並只顯示特定的目標,如特定車型。檢測結果透過檢測結果展示功能實時顯示在網頁的表格中,涵蓋車輛型別、數量等資訊,同時,使用者可透過引數調整功能動態調整檢測演算法的置信度閾值和IOU閾值,最佳化檢測的準確度和減少誤檢。
最後,系統提供了方便的結果匯出選項,使用者可以將檢測結果從表格匯出至CSV檔案,以便於進一步分析和記錄。對於標記的圖片、影片以及攝像頭畫面的檢測結果,使用者還可以選擇匯出為AVI格式的影像檔案,方便儲存和分享。
透過整合這些高階功能,本系統提供了一個全面、靈活的遙感目標檢測解決方案,旨在滿足專業使用者和廣大愛好者的需求,為研究人員提供了一個實用的研究和應用工具。每項功能的效果將透過截圖或動態圖進行展示,確保讀者可以直觀地理解系統的操作介面和功能效果,深化對該系統功能和效能的認識。
2. 緒論
2.1 研究背景及意義
在當前快速發展的資訊時代,遙感技術作為獲取地球表面資訊的重要手段,其在環境監測、資源管理、農業發展、城市規劃以及災害應對等多個領域發揮著至關重要的作用。隨著遙感技術的不斷進步,遙感資料的獲取變得日益便捷,但如何從海量的遙感資料中快速、準確地提取出有用資訊,成為了研究和應用中的一個核心問題。
近年來,深度學習技術在影像處理領域取得了突破性進展,特別是目標檢測演算法的發展,為解決遙感影像中的目標檢測問題提供了有效的技術手段。其中,YOLO(You Only Look Once)系列演算法以其快速、準確的特點,在實時目標檢測領域尤其受到關注。從YOLOv1到最新的YOLOv8,每一代的更新都在效能上取得了顯著的提升,包括檢測精度、速度以及模型的泛化能力等方面。
儘管YOLO系列演算法在遙感目標檢測中已經取得了一定的應用成果,但仍面臨一些挑戰,如在處理大尺寸、高解析度遙感影像時的準確率和速度問題,以及模型對小目標檢測的靈敏度不足等。此外,遙感影像的特殊性,如複雜的背景、多樣的目標型別、不同的光照和天氣條件等,也給目標檢測演算法的應用帶來了額外的挑戰。
為了應對這些挑戰,研究者們提出了多種改進策略,包括演算法結構的最佳化、新型神經網路的設計、損失函式的改進、資料增強技術的應用等。最新的研究不僅聚焦於演算法本身的改進,還包括構建更加豐富、標註更加精確的遙感資料集,以及開發更為高效的訓練和推理框架,旨在全面提升遙感目標檢測的效能。
本部落格將深入探討基於YOLOv8/v7/v6/v5的遙感檢測系統,不僅回顧了YOLO系列演算法在遙感領域的應用現狀,還分析了當前面臨的主要問題及其解決方案,進一步探討了包括YOLO在內的最新目標檢測演算法對遙感檢測領域帶來的影響。此外,本文還將介紹幾種最新的研究成果和技術進展,以期為讀者提供遙感檢測技術的全面視角。
2.2 國內外研究現狀
遙感技術的迅猭發展,特別是在高解析度遙感影像的獲取能力上的顯著提升,已經大大拓寬了遙感資料在環境監測、災害評估、城市規劃及軍事偵察等領域的應用範圍。在這些應用中,遙感目標檢測作為一項基礎而關鍵的技術,其研究和發展受到了廣泛關注。遙感目標檢測旨在從遙感影像中自動識別並定位地表特定目標,它的挑戰在於需要處理大尺寸、高複雜度的影像,並且需要在多變的環境條件下保持高準確率和魯棒性。隨著深度學習技術的快速進步,基於深度學習的目標檢測演算法,尤其是YOLO系列演算法,已經成為遙感目標檢測領域研究的熱點。YOLO演算法以其快速、準確的特點,在實時目標檢測領域展現出了顯著的優勢,而其後續版本的不斷最佳化和改進,進一步提升了在遙感影像上的適用性和效能。
在遙感目標檢測演算法方面,YOLO系列(You Only Look Once)因其高效的檢測速度和良好的效能,在遙感影像的目標檢測中得到了廣泛應用。自YOLOv1至YOLOv5,每個版本的更新都旨在提高準確性、速度和泛化能力[1]。近期,針對遙感影像的特殊性,研究者們基於YOLO框架提出了多種改進演算法,例如透過引入注意力機制、改善特徵融合策略,以及最佳化錨點設定,來增強模型對小目標和複雜背景的識別能力[2][3]。此外,Transformer模型也在遙感目標檢測中展現出潛力,特別是ViT(Vision Transformer)透過對影像進行分塊處理並應用自注意力機制,提供了一種不同於傳統CNN的視角[4]。這些進展不僅提升了遙感目標檢測的效能,也拓寬了研究的視野。
在資料集方面,與傳統的遙感資料集相比,最新的資料集更加豐富多樣,覆蓋更廣泛的地理區域、更多樣的目標型別和更復雜的場景。例如,DOTA(A Large-scale Dataset for Object Detection in Aerial Images)和xView等資料集為遙感目標檢測提供了大量高質量的標註影像[5]。這些資料集的釋出,極大地促進了遙感影像處理技術的發展和演算法的評估。
2.3 要解決的問題及其方案
2.3.1 要解決的問題
針對基於YOLOv8/v7/v6/v5的遙感目標檢測系統,我們面臨的主要問題及相應的解決方案體現在以下幾個關鍵方面:
- 模型的準確性和速度最佳化
針對遙感影像中的目標檢測需求,我們面臨的首要問題是如何提高深度學習模型的準確性和檢測速度。考慮到遙感影像通常具有較高的解析度和複雜的場景,我們需要確保所選用的目標檢測演算法能夠在保持高準確率的同時實現較快的推理速度。為此,我們將著重最佳化基於YOLOv8/v7/v6/v5的深度學習模型,透過對網路結構的調整和引數最佳化,以及針對PyTorch框架的效能最佳化,提高模型的檢測精度和處理速度。
- 環境適應性和模型泛化能力
遙感影像涵蓋了多樣的地理環境和氣候條件,因此我們需要確保我們的遙感檢測系統具有良好的環境適應性和模型泛化能力。這意味著我們的模型不僅需要在訓練時考慮到各種不同的場景和條件,還需要在實際應用中能夠穩健地處理各種複雜情況,如光照變化、天氣條件、目標尺度變化等。我們將採取資料增強技術和遷移學習等方法來增強模型的泛化能力,以應對遙感影像中的各種變化和挑戰。
-
使用者互動介面的設計與功能
為了方便使用者使用我們的遙感檢測系統,我們將重點設計直觀易用的使用者互動介面。該介面將基於Streamlit構建,實現圖片、影片和攝像頭的遙感檢測功能,並支援多個模型檔案的切換。透過精心設計的介面佈局和友好的互動方式,使用者可以方便地上傳影像或影片進行檢測,並獲取實時的檢測結果。我們將透過美化CSS樣式和深度學習演算法的整合,使使用者介面更具吸引力和功能性。
-
資料處理能力和儲存效率
考慮到遙感影像資料的巨大規模和複雜性,我們將重點關注系統的資料處理能力和儲存效率。我們將採用高效的資料處理技術和儲存方案,以確保系統能夠快速處理大規模遙感影像資料,並具備高效的資料儲存和檢索功能。同時,我們將充分考慮資料的安全性和隱私保護,採取必要的措施保障資料的安全和完整性。
-
系統的可擴充套件性和維護性
為了應對未來的需求變化和技術更新,我們將注重系統的可擴充套件性和維護性。我們將採用模組化設計和開放式架構,使系統能夠輕鬆整合新的模型和功能,並能夠靈活應對不同的應用場景和需求變化。同時,我們將建立健全的系統維護機制,及時更新和升級系統,確保系統始終保持高效穩定執行。
透過以上解決方案的設計和實施,我們期望能夠構建出一個高效準確的基於YOLOv8/v7/v6/v5的遙感檢測系統,為遙感影像分析和應用提供強有力的支援和保障。
2.3.2 解決方案
針對前文提出的遙感檢測系統所面臨的問題和挑戰,我們將採取以下方法來設計和實現基於YOLOv8/v7/v6/v5的遙感檢測系統:
-
深度學習模型的選擇和最佳化
- 模型架構選擇:我們將選擇適合實時遙感檢測的YOLOv8/v7/v6/v5作為深度學習模型的核心。這些模型在處理大尺寸、高解析度遙感影像時能夠取得較好的檢測效能和速度。
- 資料增強策略:為了提高模型的泛化能力,我們將使用多種資料增強技術,如隨機裁剪、縮放、旋轉和色彩調整等,以模擬不同環境條件下的遙感影像。
- 遷移學習技術:利用預訓練的YOLOv8/v7/v6/v5模型作為初始模型,在特定於遙感檢測的資料集上進行微調,以加速訓練過程並提高模型的檢測效能。
-
技術框架和開發工具
- PyTorch框架:作為深度學習框架,PyTorch提供了靈活的程式設計環境和強大的GPU加速能力,適合於開發和迭代深度學習模型。
- Streamlit使用者介面:基於Streamlit構建互動式Web應用介面,實現圖片、影片和實時攝像頭的遙感檢測功能,並支援不同模型檔案的切換。透過PyCharm進行開發和除錯。
- CSS美化:使用CSS對使用者介面進行美化和風格定製,提升使用者體驗。
-
功能實現和系統設計
- 多輸入源支援:設計系統以支援多種輸入源,包括靜態影像、影片流和實時攝像頭捕獲,以適應不同的遙感檢測場景。
- 模型切換功能:實現動態模型切換功能,允許使用者根據需求選擇不同的YOLOv8/v7/v6/v5模型,增加系統的靈活性和適用範圍。
-
資料處理和儲存策略
- 高效資料處理:利用PyTorch的資料載入和預處理機制,實現高效的資料處理流程,確保實時效能。
- 智慧資料儲存:設計高效的資料儲存方案,對檢測結果和歷史資料進行組織和索引,便於查詢和分析。
-
效能最佳化和系統測試
- 效能調優:透過對模型和系統進行效能分析,識別瓶頸,進行針對性的最佳化,如模型壓縮、硬體加速等。
- 全面測試:進行全面的系統測試,包括單元測試、功能測試和壓力測試,確保系統的穩定性和可靠性。
透過以上解決方案的實施,我們期望能夠開發出一個既準確又高效的基於YOLOv8/v7/v6/v5的遙感檢測系統,為遙感影像分析和應用提供強有力的支援和保障。
2.4 博文貢獻與組織結構
在本文中,我們全面探討了利用深度學習技術,尤其是YOLO系列最新版本(YOLOv8/v7/v6/v5)來實現遙感目標檢測的方法。本文的主要貢獻如下:
-
任務相關文獻綜述:我們對遙感檢測領域的相關文獻進行了綜述,系統梳理了國內外研究現狀,為後續的研究工作提供了理論基礎和參考依據。
-
資料集的處理:我們詳細介紹了對遙感影像資料集的處理方法,包括資料收集、清洗、標註等環節,確保資料集的質量和適用性。
-
YOLOv8/v7/v6/v5等演算法選擇:我們對YOLO系列演算法進行了全面比較和分析,選擇了適用於遙感檢測任務的YOLOv8/v7/v6/v5等演算法作為核心模型,並介紹了其原理和特點。
-
採用Streamlit設計了美觀友好的網頁:我們基於Streamlit框架設計了直觀美觀的網頁介面,實現了遙感影像的上傳、預測和展示功能,為使用者提供了便捷的操作體驗。
-
對比了YOLOv7/v6/v5等演算法的效果:我們進行了對比實驗,評估了不同版本的YOLO演算法在遙感檢測任務上的效果,並分析了其優缺點,為模型選擇和應用提供了參考依據。
-
完整的資料集和程式碼資源包:我們提供了完整的資料集和程式碼資源包,包括資料集的下載連結和深度學習模型的訓練與預測程式碼,方便讀者進行進一步的研究和實驗。
透過以上工作,我們為遙感檢測領域的研究和應用做出了重要貢獻,提供了全面的技術支援和資源支援,促進了該領域的發展和進步。
後續章節的組織結構如下: 緒論:介紹研究背景、目的和本文的主要貢獻;演算法原理:詳細介紹YOLOv8/v7/v6/v5等演算法的工作原理及其在遙感目標檢測中的應用;資料集處理:討論使用的資料集及其預處理、增強方法。程式碼介紹:提供模型訓練和預測的詳細程式碼說明,包括環境搭建、引數配置和執行步驟。實驗結果與分析:展示不同模型在遙感目標檢測任務上的實驗結果,並進行比較分析。系統設計與實現:介紹基於Streamlit的遙感目標檢測系統的設計與實現細節。結論與未來工作:總結本文的研究成果,並討論未來的研究方向和潛在的改進空間。
3. 資料集處理
在本部落格的遙感目標檢測系統開發中,我們使用了一個由9033張影像組成的豐富資料集,這些資料精心分配為訓練集、驗證集和測試集,分別包含8292張、609張和132張影像。這樣的分佈旨在確保模型在廣泛的資料上進行訓練,透過獨立的資料集驗證其效能,並在未見過的影像上進行測試,以評估其泛化能力。一個均衡的資料集分佈對於開發一個魯棒和準確的遙感目標檢測系統是至關重要的,它可以防止模型過擬合,並確保模型在面對現實世界的遙感任務時能夠保持良好的效能。博主使用的類別如下:
Chinese_name = {'plane': "飛機"}
在資料預處理階段,我們對影像進行了一系列的標準化步驟,確保所有輸入資料的尺寸和畫素值符合YOLOv8等深度學習模型的要求。為了增強模型的泛化能力,我們還對資料集應用了多種資料增強技術,如隨機旋轉、縮放、剪下和顏色變換等,以模擬從多角度和條件下獲取的遙感影像,使模型能夠學習和適應各種環境下的目標特徵。
在深入分析資料集的標註分佈後,我們發現在該資料集中,大多數標註集中在影像的中心區域,這可能意味著遙感影像獲取時的焦點傾向於中心,或者中心區域的目標更為密集。此外,這些標註在尺寸上顯示出一致性,多數目標較小,這對於目標檢測演算法的設計提出了特定的要求:演算法必須能夠精確地識別和定點陣圖像中的小尺寸目標。
值得注意的是,我們的資料集幾乎全部或絕大多數例項屬於單一的類別。這一點揭示了資料集的專注性和對單一任務的最佳化潛力。當目標檢測系統面對如此專一的類別分佈時,可以期待其在這個特定任務上展示出更加出色的效能,但也可能需要額外的技術,以確保模型能夠有效地泛化到多類別任務。
為了幫助讀者更好地理解並應用本文介紹的技術,我們還提供了完整的資料集和程式碼資源包。這一舉措將極大地促進學術交流和技術迭代,使得研究人員和開發者能夠直接復現實驗結果,並在此基礎上進行進一步的研究和開發。透過共享這些寶貴的資源,我們期待著遙感目標檢測技術在未來的進一步發展和改進。
4. 原理與程式碼介紹
4.1 YOLOv8演算法原理
在探討YOLOv8演算法的原理時,我們首先需要理解YOLO(You Only Look Once)系列演算法的核心理念,即在單次前向傳播過程中同時進行目標的定位和分類。這種一步到位的檢測方式使得YOLO演算法在速度和效率上有著顯著的優勢。YOLOv8作為這一系列中的最新迭代,不僅繼承了前代YOLO演算法的這些優點,而且在結構設計和效能上都有了顯著的改進,從而進一步提升了檢測的準確性和速度。
YOLOv8演算法的結構可以分為三個主要部分:Backbone(主幹網路)、Neck(連線網路)和Head(檢測頭)。在Backbone部分,YOLOv8採用了CSP(Cross Stage Partial networks)結構,這種結構有效地平衡了模型的學習能力和引數量。CSP結構透過部分跨階段連線,促進了梯度的直接傳播,這對於深層網路的學習是極為有益的。它還減少了計算量,因為它允許網路在少量的引數下進行更深層次的特徵學習。
Neck部分則是負責提取不同尺度特徵並進行融合的關鍵模組。YOLOv8的Neck部分利用了SPP(Spatial Pyramid Pooling)結構和FPN(Feature Pyramid Networks)技術。SPP能夠提取多尺度的上下文資訊,這對於檢測不同尺寸的目標至關重要。而FPN採用了一個自頂向下的結構,將高層的語義資訊傳遞到低層,從而實現了從粗到細的特徵融合。
在Head部分,YOLOv8採取了自適應標籤分配(adaptive label assignment)策略,這是一種更為靈活的標籤分配方式,允許模型根據目標的不同特性自動調整標籤。這意味著演算法能夠根據目標的大小、形狀以及其在影像中的上下文資訊,動態地選擇最合適的錨點,這種策略能夠有效地減少標籤分配誤差,提升模型的效能。
YOLOv8還引入了AutoML技術,在演算法的設計和最佳化過程中自動尋找最優的模型引數和結構。這種技術可以減輕手動調參的工作量,確保了YOLOv8在不同的檢測場景下都能達到最佳效能。此外,YOLOv8還支援雲端訓練和邊緣計算,使得演算法可以在資源受限的裝置上進行訓練和推斷,同時還可以利用雲端的強大計算能力進行大規模的訓練任務。
綜上所述,YOLOv8透過其獨特的結構設計,不僅繼承了YOLO系列的高速檢測特性,而且還透過CSP網路結構和先進的特徵融合技術,顯著提升了對於各種尺寸目標的檢測能力。這些技術的融合使得YOLOv8在目標檢測任務中,無論是在準確度還是速度上,都表現出了卓越的效能。
4.2 模型構建
在“程式碼介紹”部分,我們將深入探究為遙感目標檢測任務而設計的模型構建程式碼。這段程式碼不僅體現了深度學習模型在實際應用中的實現,還展示瞭如何將前沿的計算機視覺演算法整合進一個互動式的系統中。
首先,我們引入了cv2庫來處理影像和影片,torch是我們訓練模型的深度學習框架。QtFusion.models和ultralytics庫分別提供了Detector類和YOLO類,這些是我們構建和執行YOLOv8模型的核心元件。
import cv2
import torch
from QtFusion.models import Detector
from datasets.label_name import Chinese_name
from ultralytics import YOLO
from ultralytics.utils.torch_utils import select_device
在程式碼中,我們設定了裝置型別,並初始化了模型和影像處理的一些基本引數。這些引數包括物體的置信度閾值、非極大值抑制(NMS)的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基類。在__init__方法中,我們初始化了模型引數和一個空模型物件。load_model方法負責載入預訓練的YOLOv8模型,並將其部署到指定的計算裝置上。在preprocess方法中,我們暫時僅儲存了原始影像。在實際應用中,這裡可以新增更多的影像預處理步驟,例如縮放和歸一化。predict方法負責將處理過的影像傳遞給模型並執行推理。
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閾值,這是在實時系統中根據動態環境或使用者輸入調整模型行為的基礎。
整體而言,此程式碼展現瞭如何在實踐中構建一個深度學習模型,特別是針對遙感目標檢測任務的YOLOv8模型。從資料預處理到模型推理,再到結果的後處理,每一個步驟都經過了精心設計,以確保最終系統的高效能和準確性。
4.3 訓練程式碼
在我們的部落格中,我們將詳細介紹如何使用Python和深度學習庫來訓練一個用於車型識別和計數的YOLOv8模型。我們的程式碼示例展示了從設定環境到執行訓練過程的每個步驟。以下表格詳細介紹了YOLOv8模型訓練中使用的一些重要超引數及其設定:
超引數 | 設定 | 說明 |
---|---|---|
學習率(lr0 ) |
0.01 | 決定了模型權重調整的步長大小,在訓練初期有助於快速收斂。 |
學習率衰減(lrf ) |
0.01 | 控制訓練過程中學習率的降低速度,有助於模型在訓練後期細緻調整。 |
動量(momentum ) |
0.937 | 加速模型在正確方向上的學習,並減少震盪,加快收斂速度。 |
權重衰減(weight_decay ) |
0.0005 | 防止過擬合,透過在損失函式中新增正則項減少模型複雜度。 |
熱身訓練週期(warmup_epochs ) |
3.0 | 初始幾個週期內以較低的學習率開始訓練,逐漸增加到預定學習率。 |
批次大小(batch ) |
16 | 每次迭代訓練中輸入模型的樣本數,影響GPU記憶體使用和模型效能。 |
輸入影像大小(imgsz ) |
640 | 模型接受的輸入影像的尺寸,影響模型的識別能力和計算負擔。 |
環境設定與模型載入:這裡,我們匯入了os庫來處理檔案路徑,torch庫作為我們的主要深度學習工具,並且yaml用於處理資料集的配置檔案。ultralytics庫提供了YOLO模型的實現,而QtFusion輔助我們獲取檔案的絕對路徑。我們還確定了訓練將使用的裝置——如果可用,將使用GPU加速訓練;否則,使用CPU。
import os
import torch
import yaml
from ultralytics import YOLO # 用於載入YOLO模型
from QtFusion.path import abs_path # 用於獲取檔案的絕對路徑
在確定使用的裝置時,我們優先選擇了GPU("cuda:0"),如果不可用,則回退到CPU。GPU的平行計算能力可以顯著加快模型的訓練速度,是深度學習訓練中的寶貴資源。
device = "0" if torch.cuda.is_available() else "cpu"
資料集準備:在這一部分,我們首先設定了訓練所需的工作程序數量和批次大小。然後我們定義了資料集名稱,並構建了資料集配置檔案的路徑。這些檔案包含了訓練、驗證和測試資料的詳細資訊,對訓練過程至關重要。
workers = 1 # 工作程序數
batch = 8 # 每批處理的影像數量
data_name = "RemoteSensing"
data_path = abs_path('datasets/RemoteSensing/sensing.yaml', path_type='current') # 資料集的yaml的絕對路徑
unix_style_path = data_path.replace(os.sep, '/')
我們讀取並解析了YAML配置檔案,以確保其中的路徑正確地指向了資料集的位置。這個步驟是自動化訓練流程中常見的一個環節,目的是使配置檔案與實際檔案系統保持一致。
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模型。接著,我們呼叫了模型的train方法來開始訓練過程,指定了資料集、裝置、工作程序數、影像大小、訓練週期(epochs)和批次大小(batch)。我們還為訓練任務定義了一個名稱,這有助於後續識別和追蹤訓練過程。
model = YOLO(abs_path('./weights/yolov5nu.pt', path_type='current'), task='detect') # 載入預訓練的YOLOv8模型
# model = YOLO('./weights/yolov5.yaml', task='detect').load('./weights/yolov5nu.pt') # 載入預訓練的YOLOv8模型
# Training.
results = model.train( # 開始訓練模型
data=data_path, # 指定訓練資料的配置檔案路徑
device=device, # 自動選擇進行訓練
workers=workers, # 指定使用2個工作程序載入資料
imgsz=640, # 指定輸入影像的大小為640x640
epochs=120, # 指定訓練100個epoch
batch=batch, # 指定每個批次的大小為8
name='train_v5_' + data_name # 指定訓練任務的名稱
)
model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect') # 載入預訓練的YOLOv8模型
results2 = model.train( # 開始訓練模型
data=data_path, # 指定訓練資料的配置檔案路徑
device=device, # 自動選擇進行訓練
workers=workers, # 指定使用2個工作程序載入資料
imgsz=640, # 指定輸入影像的大小為640x640
epochs=120, # 指定訓練100個epoch
batch=batch, # 指定每個批次的大小為8
name='train_v8_' + data_name # 指定訓練任務的名稱
)
此程式碼塊展示了使用YOLOv8進行遙感目標檢測任務的標準訓練流程。它充分展示了現代深度學習專案的典型模式——自動化、模組化、可配置。透過該介紹,我們希望讀者可以理解如何將這些概念和技術應用到實際的車輛檢測場景中,並根據自己的資料集和需求進行相應的調整。
5. 實驗結果與分析
5.1 訓練曲線
在深度學習中,監測模型在訓練過程中的效能是至關重要的。損失函式影像為我們提供了一種直觀的方式來觀察並評估模型的學習進度。透過分析圖中所示的YOLOv8模型訓練時的損失函式和效能指標,我們能夠洞察模型訓練的有效性及其潛在的問題。
首先,訓練集和驗證集上的箱形損失(box_loss)和類別損失(cls_loss)隨著訓練次數的增加呈下降趨勢,顯示出模型在識別目標的位置和分類上的表現隨著時間的推移而穩步提升。特別是在初始階段,損失下降得非常快,這表明模型在捕捉基本特徵方面非常有效。對於目標檢測系統來說,這是一個積極的訊號,因為精確的框定和分類是系統效能的基礎。
隨後,我們看到定向邊界框損失(dfI_loss),它衡量了模型預測的邊界框與實際標註的邊界框的一致性。這個指標的快速下降表明模型在學習目標的準確位置方面取得了顯著進步,並且驗證集上的損失趨勢與訓練集非常一致,意味著模型在新看到的資料上具有良好的泛化能力。
接著,我們分析精確度(precision)和召回率(recall)兩個關鍵的效能指標。精確度保持在一個非常高的水平,接近98%,這意味著模型預測的正類別例項中,幾乎所有都是真正的正類別。而召回率也同樣維持在高水平,接近95%,表明模型能夠檢測到絕大多數的正類別目標。這兩個指標的高值表明我們的模型在避免漏檢和誤檢方面表現出色。
最後,我們觀察平均精度均值(mAP)的兩個不同尺度,分別是mAP50和mAP50-95。mAP50是在IoU(交併比)閾值為50%時的mAP值,而mAP50-95是在IoU從50%到95%的不同閾值上的mAP的平均值。mAP50非常高,幾乎達到了99%,表明在較為寬鬆的IoU閾值下,模型幾乎能夠完美地檢測出所有目標。而mAP50-95雖然有所下降,但仍然維持在較高水平,展示了在更嚴格的IoU標準下,模型也能保持較好的檢測效能。
5.2 F1曲線圖
在評估目標檢測模型的效能時,精確度-召回率(Precision-Recall,PR)曲線是一個重要的工具。它展示了模型在不同置信度閾值下的表現,可以幫助我們理解模型在區分正類和負類上的效果。對於車型識別這樣的任務,高精度的模型能夠確保正確的車輛被檢測出來,而高召回率則意味著模型捕捉到了儘可能多的真正車輛。
如上圖所示,F1分數與置信度閾值之間的曲線為我們提供了模型效能的重要視角。該曲線快速上升至F1分數的峰值,表明在較低的置信度閾值下,模型就能夠達到較高的精確度和召回率的平衡。在圖中可以看到,在大約0.423的置信度閾值時,F1分數達到了峰值0.97,這一結果表明模型對於目標的檢測既準確又完整。對於遙感目標檢測系統而言,這樣的效能表明系統在實際應用中可以高度依賴,因為它能夠以較高的置信度檢測到目標,而不會因為過高的置信度閾值而錯過大量的真實目標。
不過,隨著置信度閾值的繼續提高,F1分數開始下降,這意味著當模型要求更高的置信度以確認其預測時,它可能會錯過一些正確的預測,這會降低召回率。在實際應用中,這可能導致漏檢,特別是在那些對遙感監測準確性要求極高的任務中,比如災害響應或安全監控,漏檢可能會帶來嚴重後果。因此,在實際應用中選擇一個合理的置信度閾值,能夠確保模型既不會漏檢也不會產生過多的誤報,是一個需要精細調整的決策。
總的來說,這些訓練過程中的指標和損失函式影像反映了YOLOv8演算法在處理遙感目標檢測任務時的高效性和準確性。模型的損失快速下降、精確度和召回率維持在高水平,以及在不同IoU閾值上的良好mAP表現,都預示著模型的有效性和實用性。這些結果驗證了YOLOv8在遙感目標檢測中的應用潛力,併為未來的研究和實際應用奠定了堅實的基礎。
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 作為衡量模型效能的重要指標,尤其在處理類別分佈不均的資料集時顯得尤為關鍵。它透過結合精確率與召回率,提供了一個單一的度量標準,能夠全面評價模型的效能。精確率衡量的是模型在所有被標記為正例中真正屬於正例的比例,而召回率則關注於模型能夠識別出的真正正例佔所有實際正例的比例。F1-Score透過兩者的調和平均,確保了只有當精確率和召回率同時高時,模型的效能評估才會高,從而確保了模型對於正例的預測既準確又完整。
- mAP(Mean Average Precision):在目標檢測任務中,Mean Average Precision(mAP)是評估模型效能的重要標準。它不僅反映了模型對單個類別的識別精度,而且還考慮了所有類別的平均表現,因此提供了一個全域性的效能度量。在計算mAP時,模型對於每個類別的預測被單獨考慮,然後計算每個類別的平均精度(AP),最後這些AP值的平均數形成了mAP。
名稱 | YOLOv5nu | YOLOv6n | YOLOv7-tiny | YOLOv8n |
---|---|---|---|---|
mAP | 0.986 | 0.980 | 0.989 | 0.986 |
F1-Score | 0.97 | 0.96 | 0.98 | 0.97 |
(3)實驗結果分析:
在我們的遙感目標檢測系統研究中,對比了YOLO系列中的四個不同版本的效能:YOLOv5nu、YOLOv6n、YOLOv7-tiny、YOLOv8n。透過在同一資料集上進行嚴格的實驗,並使用F1-Score和mAP這兩個關鍵的度量指標,我們對每個模型的效能進行了細緻的分析。
根據實驗結果,我們可以看到YOLOv7-tiny在mAP上取得了最高分數0.989,這表明該版本在目標檢測任務上的整體精度非常高。緊隨其後的是YOLOv5nu和YOLOv8n,均獲得了0.986的mAP得分,而YOLOv6n則稍低一些,為0.980。這一細微的差距可能反映了不同演算法架構和最佳化策略的微小變化,以及它們對特定資料集的適應性。
F1-Score的情況類似,其中YOLOv7-tiny以0.98的得分領先,展示了其優秀的檢測效能。YOLOv5nu和YOLOv8n同以0.97的F1分數排在第二位,而YOLOv6n則以0.96的F1分數略顯遜色。高F1分數是模型優秀效能的標誌,它表明模型在精確識別正類別目標(精確度)和檢測出大多數正類別目標(召回率)方面都做得很好。
透過對這些效能指標的詳細對比,我們可以得出結論:YOLOv7-tiny在這一系列的實驗中表現最為突出,這可能得益於其網路結構或者是在目標檢測方面的特定最佳化。然而,YOLOv5nu和YOLOv8n也表現出相似的高水平效能,這表明這些版本在實際應用中同樣是可靠的選擇。儘管YOLOv6n的得分略低,但它的效能依然強勁,對於需要快速和輕量級檢測模型的應用來說可能是一個理想的選擇。
綜上所述,不同版本的YOLO模型在遙感目標檢測任務上的效能都非常優秀,但在選擇合適的模型時應考慮到特定任務的需求和約束。這些對比結果為我們提供了寶貴的見解,有助於在未來的研究和實際應用中做出更為明智的決策。
6. 系統設計與實現
6.1 系統架構概覽
在設計基於YOLOv8/v7/v6/v5的遙感目標檢測系統時,我們採用了模組化和高度可配置的架構設計,確保系統既能高效執行任務,又能靈活適應不同的應用場景和需求。以下是系統架構的關鍵組成部分及其功能:
- 模型載入與初始化(YOLOv8v5Detector類)
在我們的系統中,YOLOv8v5Detector
類負責載入預訓練的YOLO模型和權重,以及模型的初始化。透過這個類,我們能夠根據具體需求載入不同版本的YOLO模型(如YOLOv8、v7、v6、v5),併為後續的遙感目標檢測任務做好準備。
- 影像處理與預測(frame_process方法)
frame_process
方法是我們處理攝像頭或檔案輸入的核心函式。該方法首先調整輸入影像的大小以符合模型的輸入要求,然後對影像進行預處理,並使用YOLOv8v5Detector
類的predict
方法對處理後的影像進行預測。此外,該方法還負責處理模型的預測結果,包括繪製邊界框、計算置信度等。
- 結果展示與記錄(Detection_UI類和LogTable類)
在Detection_UI
類中,我們設計了一套完整的使用者介面(UI),不僅支援實時影片流的顯示,還能展示檢測到的車型、置信度、檢測位置以及檢測用時等資訊。此外,LogTable
類用於記錄每次檢測的詳細結果,支援將檢測記錄儲存為CSV檔案,便於後續的分析和報告。
- 系統配置與互動(setup_sidebar方法)
透過setup_sidebar
方法,我們在Streamlit應用的側邊欄中新增了多個配置選項,包括模型選擇、置信度閾值設定、IOU閾值設定等,使使用者能夠根據自己的需求定製檢測引數。這種設計使得系統不僅對開發者友好,也能讓非專業使用者輕鬆地進行高階配置。
- 攝像頭與檔案處理(process_camera_or_file方法)
對於輸入源的處理,process_camera_or_file
方法提供了一個統一的介面來處理來自攝像頭的實時影片流或者使用者上傳的影片/圖片檔案。該方法自動根據使用者的選擇呼叫相應的處理邏輯,並實時更新UI以顯示檢測結果。
- 使用者互動與控制
系統設計了多種使用者互動方式,包括但不限於開始/停止檢測的控制、顯示模式的選擇、目標過濾等功能,大大提高了系統的可用性和靈活性。
透過上述設計,我們的基於YOLOv8/v7/v6/v5的遙感目標檢測系統不僅能夠實現高精度的車型檢測和計數,還提供了豐富的使用者互動功能和靈活的配置選項,適用於各種複雜的應用場景。
6.2 系統流程
在介紹基於YOLOv8/v7/v6/v5的遙感目標檢測系統的流程時,我們將按照系統執行的邏輯順序,詳細闡述從啟動到結果輸出的整個過程。以下是系統流程的逐步分析:
- 系統初始化
- 載入模型:系統啟動時,首先初始化
YOLOv8v5Detector
類,載入指定版本的YOLO模型及其權重檔案。 - 配置UI:透過
Detection_UI
類的建構函式,設定頁面配置(如標題、圖示等),並呼叫setup_page
方法和setup_sidebar
方法來初始化頁面佈局和側邊欄配置。
- 使用者配置
- 模型與引數選擇:使用者透過側邊欄選擇模型型別、置信度閾值、IOU閾值等引數。
- 輸入源選擇:使用者還可以選擇檢測的輸入源是攝像頭還是檔案(圖片或影片),並透過檔案上傳器上傳檔案。
- 輸入源處理
- 攝像頭處理:如果選擇了攝像頭作為輸入源,系統會實時捕獲攝像頭畫面,並呼叫
process_camera_or_file
方法處理影片流。 - 檔案處理:如果上傳了檔案,系統則讀取檔案內容,並同樣呼叫
process_camera_or_file
方法進行處理。
- 影像處理與預測
- 對於每一幀影像或影片幀,系統首先調整其尺寸,然後使用
frame_process
方法進行預處理和模型預測。 - 預測完成後,系統根據檢測結果(如車輛的位置、類別和置信度)繪製邊界框,並顯示在UI上。
- 結果展示與記錄
- 實時展示:檢測結果實時顯示在頁面的影像或影片流中,包括邊界框、類別和置信度。
- 結果記錄:所有檢測結果透過
LogTable
類記錄下來,並可透過側邊欄的“匯出結果”按鈕匯出為CSV檔案。
- 使用者互動
- 使用者可以透過側邊欄或頁面按鈕實時調整顯示模式、停止檢測等。
- 透過
selectbox
控制元件,使用者還可以篩選特定型別的檢測結果進行顯示。
- 系統結束
- 使用者可以隨時停止攝像頭捕獲或檔案處理,並匯出檢測日誌。
- 系統確保所有資源被正確釋放,如關閉攝像頭連線、儲存日誌檔案等。
以上步驟概述了基於YOLOv8/v7/v6/v5的遙感目標檢測系統的整體流程,從使用者配置開始,到影像處理與預測,最後到結果展示與記錄,每一步都精心設計以確保高效、準確的檢測效能和良好的使用者體驗。
程式碼下載連結
如果您希望獲取部落格中提及的完整資源包,包含測試圖片、影片、Python檔案(*.py)、網頁配置檔案、訓練資料集、程式碼及介面設計等,可訪問博主在麵包多平臺的上傳內容。相關的部落格和影片資料提供了所有必要檔案的下載連結,以便一鍵執行。完整資源的預覽如下圖所示:
資源包中涵蓋了你需要的訓練測試資料集、訓練測試程式碼、UI介面程式碼等完整資源,完整專案檔案的下載連結可在下面的影片簡介中找到➷➷➷
演示與介紹影片 :https://www.bilibili.com/video/BV12E421g7W3/
YOLOv8/v7/v6/v5專案合集下載:https://mbd.pub/o/bread/mbd-ZZ2Zmp5x
YOLOv8和v5專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2ZmZ5w
YOLOv7專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2ZmZ9u
YOLOv6專案完整資源下載:https://mbd.pub/o/bread/mbd-ZZ2Zmpxv
完整安裝執行教程:
這個專案的執行需要用到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應用介面,為使用者提供了一個便捷的遙感影像分析工具,從而在遙感資料解析和地理資訊系統(GIS)領域發揮了重要作用。
經過一系列實驗驗證,本系統在遙感影像的目標識別準確性和處理速度上都達到了高標準。此外,本文還詳細提供了遙感資料的處理流程、模型的訓練和預測程式碼,以及基於Streamlit的系統設計和實現細節,為後續的研究者和開發者提供了豐富的參考資料。儘管系統已經取得了顯著成效,遙感檢測作為一個高度複雜和多變的任務,仍然存在許多挑戰和改進空間。在未來的工作中,我們計劃從以下幾個方向進行深入探索:
- 模型最佳化:繼續探索更加深入的網路結構和最佳化策略,例如利用神經網路架構搜尋(NAS)技術,以進一步提升遙感檢測模型的效能和效率。
- 多源資料融合:考慮結合衛星資料、無人機影像等其他遙感資料來源,採用多源資料融合技術提高遙感檢測的精度和魯棒性。
- 跨領域適應性:研究在不同地理環境、不同季節條件下的遙感檢測技術,透過領域適應技術提高模型在多樣化環境中的泛化能力。
- 使用者互動體驗:進一步最佳化系統的使用者介面和互動設計,提供更加人性化和智慧化的使用者體驗,以滿足不同使用者的需求。
- 實際應用擴充:探索遙感檢測技術在城市規劃、農業監測、環境保護等更多實際應用場景中的潛在價值,以實現其更廣泛的社會和經濟效益。
總而言之,隨著深度學習技術的不斷進步和遙感資料獲取能力的持續提升,基於YOLOv8/v7/v6/v5的遙感檢測系統預期將在遙感資料分析、地球監測等領域發揮越來越重要的作用。
Redmon, J., et al. "YOLOv3: An Incremental Improvement." arXiv preprint arXiv:1804.02767 (2018). ↩︎
Li, K., et al. "Improving YOLOv4 for Vehicle Detection in Aerial Images." Remote Sensing (2020). ↩︎
Zhang, H., et al. "Attention Mechanism for Object Detection in Aerial Images." IEEE Access (2019). ↩︎
Dosovitskiy, A., et al. "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale." arXiv preprint arXiv:2010.11929 (2020). ↩︎
Xia, G.-S., et al. "DOTA: A Large-scale Dataset for Object Detection in Aerial Images." CVPR (2018). ↩︎