摘要:開發和研究體育賽事目標檢測系統對于增強體育分析和觀賞體驗至關重要。本篇博客詳細講述了如何運用深度學習技術構建一個體育賽事目標檢測系統,并提供了完整的實現代碼。系統基于先進的YOLOv8算法,對比了YOLOv7、YOLOv6、YOLOv5的性能,包括mAP、F1 Score等性能指標的分析。文章深入解析了YOLOv8算法的原理,提供了相應的Python代碼和訓練數據集,以及一個基于PySide6的用戶友好UI界面。該系統能夠精確地檢測和分類體育賽事圖像中的目標,如運動員、球類、標志等,支持從圖片、文件夾、視頻或實時攝像頭輸入檢測,具備熱力圖分析、標記框、類別統計、可調參數(Conf、IOU)和結果可視化等功能。此外,還設計了基于SQLite的用戶注冊登錄管理界面,支持通過按鈕切換不同模型和自定義UI界面。本文旨在為深度學習入門者提供一份實用的指導和參考,文章末尾提供了代碼和數據集的下載鏈接,便于讀者下載和應用。本文結構如下:
文章目錄
- 前言
- 1. 數據集介紹
- 2. 系統界面效果
- 3. YOLOv8算法原理
- 4. 代碼簡介
- 4.1 模型預測
- 4.2 模型訓練
- 4.3 YOLOv5、YOLOv6、YOLOv7和YOLOv8對比
- 4.4 代碼實現
- 5. 體育賽事目標檢測系統實現
- 5.1 系統設計思路
- 5.2 登錄與賬戶管理
- 下載鏈接
- 6. 總結與展望
- 結束語
?點擊跳轉至文末所有涉及的完整代碼文件下載頁?
基于YOLOv8/v7/v6/v5的體育賽事目標檢測演示與介紹(深度學習模型+PySide6界面+訓練代碼)
前言
????????體育賽事目標檢測技術在計算機視覺領域扮演著至關重要的角色,旨在通過深入分析體育賽事的圖像或視頻數據,實現對運動員、球類及其他關鍵運動元素的高精度識別和定位。該研究領域不僅包括先進目標檢測算法的研發與細致優化,還涉及構建專門針對體育賽事的大規模數據集并進行精準標注工作。此外,這一技術的應用范圍廣泛,不僅限于增強體育比賽的觀看體驗,還包括提供賽事分析、運動員表現評估和策略優化等多維度支持。在設計這類系統時,通常需要考慮算法的實時性、準確度及在復雜環境下的魯棒性,以確保在動態且多變的體育賽事場景中獲得可靠的檢測結果。
????????早期的方法主要依賴于基本的顏色和形狀識別技術,但這些初級方法在處理復雜的體育賽事場景時表現出了明顯的局限性。例如,它們在背景噪聲較高或光照條件變化時的適應性較差,導致檢測準確率不穩定。隨著尺度不變特征變換(Scale-Invariant Feature Transform, SIFT)和方向梯度直方圖(Histogram of Oriented Gradients, HOG)等先進的特征提取技術的發展,體育賽事目標檢測的精度得到了顯著提升。這些方法通過從圖像中提取更加復雜和魯棒的特征,提高了對動態運動場景和各種環境條件下目標的檢測能力。然而,這些技術在實現上依然面臨諸多挑戰,尤其是在特征工程的復雜性和對快速運動場景的適應性方面。由于它們需要手動設計和選擇特征,這限制了算法的通用性和靈活性,同時在處理高速動作和復雜背景時的性能仍有提升空間。
????????深度學習技術的飛速發展,尤其是卷積神經網絡(Convolutional Neural Networks, CNNs)的廣泛應用,標志著體育賽事目標檢測領域的一個重大突破。這種先進的技術架構使得算法能夠自動學習并提取圖像中的復雜特征,從而顯著提升目標檢測的精度和效率。深度學習方法特別適合于處理高度動態和復雜的體育賽事場景,因為它們能夠更加準確地識別和追蹤快速移動的運動目標。例如,Ren et al.1提出的Faster R-CNN算法通過引入區域建議網絡(Region Proposal Network)有效地解決了目標檢測中的候選框生成問題。Faster R-CNN等深度學習模型的出現,使得體育賽事目標檢測不再依賴于復雜的特征工程和手動特征選擇。相反,它們能夠自動學習圖像中的特征表示,從而更有效地處理運動員和其他動態目標的檢測。這一進步為體育賽事分析、運動員追蹤、戰術評估等應用提供了強大的技術支持。
????????為了提高體育賽事目標檢測的魯棒性,研究者們開始探索多模態信息的融合。除了圖像信息,還考慮運動目標的運動軌跡、姿態信息等。這種綜合利用多源信息的方法有望進一步提高體育賽事目標檢測系統的性能。Girdhar et al.2通過融合視頻序列和三維姿態信息,實現了對運動目標更準確的檢測.Antol et al.3創建了基于籃球比賽的數據集,為研究者提供了豐富的實驗材料,有助于評估不同算法在真實場景中的性能。在體育賽事中,實時性是一個重要的挑戰,特別是在視頻流處理方面。研究者們在努力提高算法的檢測精度的同時,也需要考慮算法的實時性能。一些針對實時目標檢測的方法,如YOLO4,在體育賽事領域也得到了廣泛應用。
????????實時性能是體育賽事目標檢測的關鍵需求之一,特別是在直播或即時分析中。多目標跟蹤涉及到在連續的幀中跟蹤多個對象,例如多個球員和球。遮擋處理則關注于當目標被其他對象遮擋時的識別問題。
????????本博客所做的工作是基于YOLOv8和YOLOv5算法構建一個體育賽事目標檢測系統,展示系統的界面效果,詳細闡述其算法原理,提供代碼實現,以及分享該系統的實現過程。希望本博客的分享能給予讀者一定的啟示,推動更多的相關研究。本文的主要貢獻如下:
- 用最先進的YOLOv8算法進行體育賽事目標檢測:本文不僅介紹了YOLOv8算法在體育賽事目標檢測領域的應用,還通過與YOLOv7、YOLOv6、YOLOv5等早期版本的對比分析,突出了YOLOv8在效率和精確度上的顯著優勢。這一部分為體育賽事目標檢測技術的研究和實踐提供了新的視角和方法。
- 使用PySide6實現體育賽事檢測系統:本文中,我將介紹如何使用Python的PySide6庫來實現一個具有良好用戶界面的體育賽事檢測系統。通過該系統,用戶可以更直觀、更方便地進行體育賽事檢測,這將有助于推廣YOLOv8算法的應用,并推動體育賽事檢測技術的實用化。
- 具有登錄管理功能:我將在系統中設計一個登錄管理功能,用戶需要通過登錄才能使用該系統。這將使得系統更加安全,也為后續增加更多個性化功能提供了可能性。
- 對YOLOv8模型的探究:在應用YOLOv8算法進行體育賽事目標檢測與識別的同時,我將對該算法的性能進行深入研究,包括對模型的精準度、召回率等關鍵指標的評估,以及對模型在不同環境和條件下的表現的分析等。這將有助于更深入地理解YOLOv8算法,并為進一步優化和改進該算法提供了基礎。
1. 數據集介紹
????????體育賽事目標檢測數據集的部分截圖如下所示,其中訓練集2541張圖片,驗證集364張圖片、測試集包括167張圖片,共計3072張圖片構成。體育賽事目標檢測數據集采用了自動定向、水平翻轉的操作,提高模型對圖像變化的魯棒性。自動定向可以確保所有圖像都有一致的方向,從而減少模型訓練時的混淆。水平翻轉有助于提高模型對于圖像水平對稱變換的不變性,使得模型在實際應用中能更好地識別翻轉或旋轉后的目標。
????????下圖顯示了三個類別,球(ball)、腳(foot)、人(person)——在數據集中的實例數量,可以看出數據分布為均勻。目標往往出現在圖像的中心區域,這對于目標檢測算法來說是一個有利的特點,因為算法可能不需要在圖像邊緣尋找目標。在使用數據集訓練目標檢測模型時,了解數據的分布特征有助于進行適當的數據預處理和增強,以提高模型的泛化能力和準確性。
????????博主使用的類別代碼如下,對“球(ball)”、“腳(foot)”和“人(person)”進行標注,是博主出于對體育賽事核心元素的考量:
Chinese_name = {'ball': "球", "foot": "腳", "person": "人"}
????????首先,“球”作為賽事的中心物體,其位置和運動軌跡對理解比賽進程和分析運動員表現至關重要。其次,“腳”在許多體育項目中是關鍵的身體部位,尤其在足球、籃球等球類運動中,腳的動作和位置常是決定比賽走向的關鍵,對其進行精準標注可以深入分析運動技術和評估運動員表現。最后,“人”的標注覆蓋了運動員的整體動態,包括位置、姿態和運動軌跡,這對理解比賽布局和運動員間互動極為重要。綜合這些標注,不僅有助于從多個維度分析體育賽事,還為基于計算機視覺的體育分析提供了豐富而精確的數據支撐,從而增強賽事的觀看體驗并提供有效的數據分析基礎。
2. 系統界面效果
????????系統以PySide6作為GUI庫,提供了一套直觀且友好的用戶界面。下面,我將詳細介紹各個主要界面的功能和設計。
(1)系統提供了基于SQLite的注冊登錄管理功能。用戶在首次使用時需要通過注冊界面進行注冊,輸入用戶名和密碼后,系統會將這些信息存儲在SQLite數據庫中。注冊成功后,用戶可以通過登錄界面輸入用戶名和密碼進行登錄。
(2)系統允許選擇圖片文件進行識別,點擊圖片選擇按鈕圖標選擇圖片后,顯示所有識別的結果,可通過下拉選框查看單個結果,以便具體判斷某一特定目標。本功能的界面展示如下圖所示:
(3)在主界面上,系統提供了支持圖片、視頻、實時攝像頭和批量文件輸入的功能。用戶可以通過點擊相應的按鈕,選擇要進行體育賽事目標檢測的圖片或視頻,或者啟動攝像頭進行實時檢測。在進行體育賽事目標檢測時,系統會實時顯示檢測結果,并將檢測記錄存儲在數據庫中。
(4)此外,系統還提供了一鍵更換YOLOv8或YOLOv5模型的功能。用戶可以通過點擊界面上的"更換模型"按鈕,選擇不同的YOLOv8模型進行檢測。與此同時,系統附帶的數據集也可以用于重新訓練模型,以滿足用戶在不同場景下的檢測需求。
(5)為了提供更個性化的使用體驗,這里系統支持界面修改,用戶可以自定義圖標、文字等界面元素。例如,用戶可以根據自己的喜好,選擇不同風格的圖標,也可以修改界面的文字描述。
3. YOLOv8算法原理
????????YOLOv8(You Only Look Once version 8)代表了目標檢測技術的最新進展,繼承并超越了其前身YOLOv5的強大功能。作為一種高效的目標檢測框架,YOLOv8在多個方面實現了顯著的改進和創新,包括但不限于目標檢測、圖像分類和實例分割任務。由Ultralytics開發的YOLOv8在繼承了YOLOv5強大性能的基礎上,進行了若干關鍵的架構優化。這些優化旨在提高模型的準確性、速度和可擴展性,以適應更加多樣化和復雜的應用場景。YOLOv8不僅在算法層面進行了創新,還在開發者體驗方面做了優化,包括更加直觀的接口設計和改進的訓練過程,這使得它更易于使用和定制。
????????YOLOv8在目標檢測技術領域的主要特點和改進主要集中在以下幾個方面:
- 預訓練模型:YOLOv8提供了一系列高效的預訓練模型,這些模型在多種數據集上經過訓練和驗證,確保了其在不同場景下的適應性和靈活性。預訓練模型的使用降低了新項目的啟動成本,使研究者和開發者能夠輕松進行遷移學習,快速調整模型以適應特定的應用需求。
- 多個骨干網:YOLOv8引入了對多種骨干網絡的支持,包括但不限于EfficientNet、ResNet和CSPDarknet。這些骨干網絡各有優勢,如EfficientNet的高效性能,ResNet的深度學習特性,以及CSPDarknet的平衡性能。這種多樣性使用戶能夠根據自己的需求和資源,選擇最適合其特定用例的骨干網絡。
- 自適應訓練:YOLOv8采用了先進的自適應訓練技術,這不僅優化了學習率的調整過程,還平衡了訓練過程中的損失函數。通過這種方法,YOLOv8能夠在訓練過程中自動調整其參數,以適應不同的數據特性和訓練條件。這種自適應機制顯著提高了模型的泛化能力和在復雜環境中的性能。
YOLOv8的架構和特性包括:
(1)無錨點檢測:錨框是一組具有特定高度和寬度的預定義框,用于檢測具有所需比例和縱橫比的對象類。它們是根據訓練數據集中對象的大小選擇的,并在檢測期間在圖像上平鋪。YOLOV8采用了無錨點檢測,使其更加靈活和高效,因為YOLOv8不需要手動指定錨盒,錨盒可能難以選擇,并且可能導致以前的 YOLO 模型(如 v1 和 v2)的結果欠佳。
(2)新的卷積:隨著 C2f 的引入,系統的主干網發生了變化,取代了 C3。莖中的第一個 6x6 卷積被切換為 3x3 卷積。在 C2f 中,瓶頸(兩個 3x3 卷積與殘差連接的組合)的輸出被組合在一起,而在 C3 中,僅使用最后一個瓶頸的輸出。此外,YOLOv8刪除了兩個卷積(YOLOv5 配置中的 #10 和 #14)。
我們設X為輸入特征圖,則瓶頸結構可以表示為:
Y = Conv 3 × 3 ( Conv 3 × 3 ( X ) ) + X Y = \text{Conv}_{3 \times 3}(\text{Conv}_{3 \times 3}(X)) + X Y=Conv3×3?(Conv3×3?(X))+X
其中, Conv 3 × 3 \text{Conv}_{3 \times 3} Conv3×3?表示3x3卷積操作。
(3)自注意力機制:YOLOv8 將自注意力機制整合到網絡的頭部。這一新特征使模型能夠動態地聚焦于圖像的不同區域,根據各種特征與檢測任務的相關性調整其重要性。這增強了適應性,并有助于整體提高性能。設F為特征圖,自注意力機制可以表示為:
A = softmax ( W q F × ( W k F ) T ) F ′ = W v ( A × F ) A = \text{softmax}(W_q F \times (W_k F)^T) F' = W_v (A \times F) A=softmax(Wq?F×(Wk?F)T)F′=Wv?(A×F)
其中, W q , W k , W v W_q, W_k, W_v Wq?,Wk?,Wv? 是可學習的權重矩陣, A A A是注意力權重矩陣, F ′ F' F′ 是注意力加權后的特征圖。
4. 代碼簡介
????????在本節中,我們將詳細介紹如何使用YOLOv8進行體育賽事目標檢測的代碼實現。代碼主要分為兩部分:模型預測和模型訓練。
4.1 模型預測
????????在模型預測部分,首先導入導入OpenCV庫:OpenCV(Open Source Computer Vision Library)是一個廣泛使用的開源計算機視覺和機器學習軟件庫。它提供了大量的視覺處理函數,非常適合用于讀取和處理圖像。在本場景中,OpenCV用于加載和預處理待檢測的圖像文件。接下來的代碼是YOLO模型的加載和應用,首先從自定義的YOLOv8Model模塊中導入YOLOv8Detector類,這個類封裝了YOLOv8模型的加載和目標檢測功能。
import cv2
from QtFusion.path import abs_path
from ultralytics import YOLO
from YOLOv8Model import YOLOv8Detector # 從YOLOv8Model模塊中導入YOLOv8Detector類,用于加載YOLOv8模型并進行目標檢測
????????加載預訓練的YOLO模型:代碼中創建了YOLOv8Detector的實例,并使用預訓練的模型權重進行加載。這些權重文件通常是在大量圖像上訓練得到的,可以有效地提升模型在特定任務(如體育賽事目標檢測)上的表現。
model = YOLOv8Detector() # 創建YOLOv8Detector對象
model.load_model(abs_path("weights/sports-yolov8n.pt", path_type="current")) # 加載預訓練的YOLOv8模型
????????讀取圖像文件:使用OpenCV的imread函數讀取待檢測的圖像文件。該函數將圖像作為一個數組加載進內存,便于后續的處理和分析。
im2 = cv2.imread("test_media/Sports_SIXU_A00048.jpg")
????????使用模型進行預測:最后,代碼調用YOLOv8Detector實例的predict方法對加載的圖像進行目標檢測,此方法返回檢測結果和圖像。
pred, superimposed_img = model.predict(pre_img)
4.2 模型訓練
????????在模型訓練部分,首先導入YOLO模型,并加載了預訓練的YOLOv8模型。
from ultralytics import YOLO
model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')
????????接著開始訓練模型。其中指定了訓練數據的配置文件路徑,使用CPU進行訓練,使用2個工作進程加載數據,輸入圖像的大小為640x640,訓練100個epoch,每個批次的大小為8。
results = model.train( data=data_path, device='cpu', workers=workers, imgsz=640, epochs=100, batch=batch, name='train_v8_' + data_name )
????????在深度學習中,我們通常通過損失函數下降的曲線來觀察模型訓練的情況。在訓練結束后,我們也可以在logs目錄下找到生成對若干訓練過程統計圖。下圖為博主訓練體育賽事目標檢測過程中訓練情況截圖,以及損失函數曲線圖,展示了模型在訓練和驗證過程中的性能指標變化。
????????首先,我們注意到圖中分別展示了訓練和驗證過程中的box_loss、cls_loss和dfI_loss三種損失函數的下降趨勢。從這三張圖我們可以看出,隨著訓練次數(橫軸代表訓練的epoch數)的增加,三種損失函數值都表現出了顯著的下降趨勢,這表明模型的性能正在逐步提升。特別是在訓練的前期階段,損失函數的下降非常迅速,隨后逐漸趨于平穩。這種現象說明,在初期,模型從數據中迅速學習到了大量有用的特征,而隨著訓練的深入,模型的改進幅度逐漸減小。在box_loss上,我們看到訓練和驗證的損失都保持了一致的下降趨勢,這說明模型在框定目標位置方面的能力越來越強。而cls_loss的下降則反映出模型在分類目標類型方面的性能提升。dfI_loss通常與目標檢測的置信度相關,其下降表明模型對于自己的預測越來越自信。
????????準確率(precision)和召回率(recall)都維持在非常高的水平上,這兩個指標通常用來衡量模型識別目標的能力。準確率高說明模型給出的預測結果中正確的比例很高,召回率高則意味著模型能夠捕捉到更多真實的目標。值得一提的是,這兩個指標的平衡非常重要,因為過高的準確率可能會伴隨著較低的召回率,即模型過于保守,錯過一些正確的目標。而本次訓練的結果顯示,我們的模型在這兩個方面都做得很好。最后,mAP(mean Average Precision)是目標檢測領域中的一個關鍵性能指標,它綜合考慮了準確率和召回率。在圖中,我們可以看到mAP@0.5和mAP@0.5-0.95兩個指標。mAP@0.5表示在IoU(交并比)閾值為0.5時的平均準確率,而mAP@0.5-0.95則是在IoU從0.5到0.95的閾值范圍內的平均準確率,更加嚴格。觀察這兩個指標的圖表,我們可以發現,在訓練過程中,mAP值持續上升,顯示出模型對目標檢測任務的整體把握能力不斷增強。
????????在評估目標檢測模型的性能時,通常會關注召回率(Recall)和精確度(Precision)這兩個核心指標。召回率和精確度,通常縮寫為R和P,都是用來從單一維度評價模型性能的指標,它們的值范圍在0到1之間,接近1意味著模型性能更佳,而接近0則表示性能較差。
???????? 首先,我們注意到球、腳和人的精確度分別是0.988、0.987和0.994,這些數值都非常接近于1,說明模型在預測這三個類別時的準確性非常高。換言之,模型在將檢測到的對象分類為球、腳或人時,所犯錯誤的概率非常低,假陽性(誤報)的情況很少。其次,召回率曲線幾乎是垂直上升的,這表示模型可以檢測到幾乎所有的正樣本。在實際應用中,這意味著模型很少錯過任何球、腳或人的真實案例。在檢測任務中,我們通常希望同時獲得高精確度和高召回率,這樣的模型被認為是性能優良的。
???????? 再來看平均精度(mAP),這是一個綜合指標,用于評價模型在不同召回率下的平均精確度。在本圖中,所有類別的mAP為0.990,這個結果非常接近于完美,意味著模型在各個召回率水平下的平均表現都非常好。這個指標尤其在我們評估模型在檢測多個類別時的整體性能非常有用。
???????? 綜上所述,這張PR曲線圖表明了模型在檢測球、腳和人這三個類別時,無論是在精確度還是召回率上,都展示了卓越的性能。模型的檢測能力非常穩定,即使召回率增加,精確度也幾乎沒有下降。在實際應用中,這意味著模型能夠在減少漏檢的同時,保持非常低的誤檢率。
4.3 YOLOv5、YOLOv6、YOLOv7和YOLOv8對比
(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.990 | 0.993 | 0.992 | 0.990 |
F1-Score | 0.99 | 0.99 | 0.98 | 0.99 |
(3)實驗結果分析:
??????? 在深度學習領域,持續的算法迭代和更新是提升模型性能的關鍵途徑。我們通過在相同的數據集上實施一系列實驗,旨在比較和評估不同版本的YOLO模型——包括YOLOv5nu、YOLOv6n、YOLOv7-tiny以及YOLOv8n——在體育賽事目標檢測任務上的性能。實驗的設計和目的是為了明確各版本模型在準確性和檢測效率上的差異,以便為實際應用提供更具指導性的見解。
??????? 首先,我們注意到所有模型在mAP指標上的表現都非常接近,范圍在0.990到0.993之間。這一結果表明,不同版本的YOLO模型在平均精度上都達到了極高的水平。尤其是YOLOv6n,以0.993的mAP分數微弱領先,顯示了其在目標檢測準確性上的微小優勢。F1-Score的結果也顯示出類似的高性能,三個模型(YOLOv5nu、YOLOv6n和YOLOv8n)都達到了0.99的分數,而YOLOv7-tiny略低于其他模型,為0.98。
??????? 對比四個模型,我們可以發現YOLOv6n在這次實驗中表現最為出色,具有最高的mAP。而YOLOv5nu和YOLOv8n在mAP和F1-Score上的表現相同,均為0.990和0.99,這可能表明在這些版本的更新中,針對特定數據集的性能提升有限。YOLOv7-tiny雖然在mAP上表現不錯(0.992),但在F1-Score上略低,這可能是由于它在精確率和召回率之間的平衡上略有不足。
??????? YOLOv6n之所以能夠獲得最高的mAP值,可能是由于該版本在網絡架構、損失函數或訓練策略上做出了有效的改進。而YOLOv7-tiny之所以在F1-Score上略低,可能是因為它作為一個輕量級模型,犧牲了一定的準確性以換取更快的推理速度,適合在計算資源有限的場景下使用。YOLOv5nu和YOLOv8n的相同性能表明,在某些應用場景中,模型的迭代更新并未帶來顯著的性能提升。這可能是因為模型已經接近了在當前數據集上的性能極限,或者新版本的改進更多地集中在其他方面,例如速度、魯棒性或易用性上。
??????? 根據上述分析,我們可以得出結論,YOLO系列在目標檢測任務中表現優異,且不同版本之間的性能差異不大。對于需要在計算資源受限的環境中部署目標檢測模型的用戶來說,YOLOv7-tiny可能是一個更合適的選擇。而對于追求最高檢測精度的應用場景,YOLOv6n可能是當前最佳的選擇。未來的研究可能會集中在如何進一步提升檢測速度與準確性的平衡,以及如何在不同類型的數據集上驗證和提升模型的泛化能力。此外,隨著新版本的持續推出,我們期待看到模型在特定領域的優化,例如更好的處理小目標檢測或在復雜背景中的表現。
4.4 代碼實現
????????在這一節中,我們將詳細介紹如何使用YOLOv8實現攝像頭畫面中體育賽事目標識別的代碼實現。這個實現主要包括創建主窗口、處理每一幀圖像、加載模型、開始處理媒體流等步驟。
????????在實時體育賽事目標檢測系統中,結合YOLOv8模型和一系列開源庫,如OpenCV、QtFusion和PySide6等,來實現主窗口的展示、攝像頭幀的處理以及體育賽事的檢測和標注等功能。
(1)引入必要的庫
????????首先,需要引入一些必要的庫,包括圖像處理庫OpenCV、圖形界面庫QtFusion和PySide6,以及物體檢測模型庫YOLOv8Model等。
import sys
import time import cv2
from QtFusion.BaseFrame import FBaseWindow
from QtFusion.Handler import MediaHandler
from QtFusion.ImageUtils import drawRectBox
from QtFusion.ImageUtils import get_cls_color
from PySide6 import QtWidgets, QtCore
from YOLOv8Model import YOLOv8Detector
(2)設置主窗口
????????在設置主窗口的過程中,定義了一個名為MainWindow的類,該類繼承自QtFusion庫中的FBaseWindow類。在MainWindow類中,設置了窗口的大小,并創建了一個用于顯示圖像的標簽。此外,我們還設置了一個按鍵事件,使得用戶可以通過按Q鍵來關閉窗口。
class MainWindow(FBaseWindow): def __init__(self): super().__init__() self.resize(850, 500) self.label = QtWidgets.QLabel(self) self.label.setGeometry(0, 0, 850, 500) def keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_Q: self.close()
(3)圖像幀處理與體育賽事目標檢測
????????在進行圖像幀處理和體育賽事目標檢測的過程中,定義了一個名為frame_process的函數。首先,將圖像的大小調整為850x500,然后使用YOLOv8模型進行預處理。使用該模型對圖像進行預測,將預測結果后處理,并將檢測到的體育賽事目標用對應類別顏色的矩形框在圖像中標注出來。
def frame_process(image): image = cv2.resize(image, (850, 500))pre_img = model.preprocess(image)t1 = time.time() pred = model.predict(pre_img)t2 = time.time()use_time = t2 - t1print("推理時間: %.2f" % use_time) det = pred[0]if det is not None and len(det):det_info = model.postprocess(pred) for info in det_info: name, bbox, conf, cls_id = info['class_name'], info['bbox'], info['score'], info['class_id']label = '%s %.0f%%'```python
% (name, conf * 100) image = drawRectBox(image, bbox, alpha=0.2, addText=label, color=colors[cls_id]) window.dispImage(window.label, image)
(4)初始化檢測模型和設備
????????在主函數部分,我們首先實例化YOLOv8Detector類,并加載預先訓練好的模型權重。根據模型預設的類別標簽獲取了每個類別對應的顏色,這些顏色將在后續的檢測結果可視化中使用。創建一個MainWindow對象,以便在屏幕上顯示圖像。再創建了一個MediaHandler對象,用于從攝像頭設備中讀取視頻流并處理每一幀圖像。
cls_name = ["球", "腳", "人"] model = YOLOv8Detector()
model.load_model(abs_path("weights/sports-yolov8n.pt", path_type="current"))
colors = get_cls_color(model.names) app = QtWidgets.QApplication(sys.argv)
window = MainWindow() videoHandler = MediaHandler(fps=30)
videoHandler.frameReady.connect(frame_process)
videoHandler.setDevice(device=0)
videoHandler.startMedia() window.show()
sys.exit(app.exec())
????????在此,"sports-yolov8n.pt"是經過大量體育賽事目標圖像訓練得到的模型權重文件,而cls_name則包含了模型可以識別的所有體育賽事目標類別的名稱。這就是實現實時體育賽事目標檢測系統的完整代碼,整個過程包括了數據預處理、YOLOv8模型預測、結果后處理和可視化等步驟,結構清晰,邏輯簡潔。通過這樣的方式,可以實現對攝像頭捕獲的畫面進行實時的體育賽事目標識別和標注。
5. 體育賽事目標檢測系統實現
????????在實現一款實時體育賽事目標檢測與識別系統時,采用面向對象的設計思路,依賴Python語言和多種開源庫如Pyside6、QtFusion、Pytorch等。其中,重要的RecMainWindow類是系統的主體,負責提供用戶界面來控制輸入源、進行體育賽事目標檢測與識別,并展示檢測結果。以下將詳細介紹其設計思路、架構設計以及整個流程。
5.1 系統設計思路
????????RecMainWindow類的主要目標是提供一個用戶友好的交互式體育賽事目標檢測與識別系統。為了實現這個目標,采取了將界面、媒體處理和模型集成在一起的設計思路。通過對象組合的方式,將不同的處理器和模型組織在一起,讓每個功能模塊都能獨立進行,同時,還利用信號和槽機制來進行模塊間的交互和數據傳遞。
架構設計:
????????在RecMainWindow類的架構設計中,采用了處理層、界面層、控制層的設計模式。
- 處理層(Processing Layer):此部分由YOLOv8Detector類實現的預訓練模型和相關方法組成,負責進行體育賽事目標的檢測和識別。
- 界面層(UI Layer):此部分由由Ui_MainWindow類生成的用戶界面組成,包含各種用戶交互元素,如按鈕、標簽和表格等。
- 控制層(Control Layer):此部分由RecMainWindow類實現的槽函數和其他方法組成,響應用戶的操作并控制媒體處理器和模型的行為。
系統流程:
????????以下是體育賽事目標檢測系統的工作流程:
- 用戶打開應用程序,創建RecMainWindow類的實例,并初始化界面和相關參數。
- 用戶通過界面操作選擇攝像頭、視頻或圖像作為輸入源。
- 根據用戶選擇的輸入源,調用相應的處理器和方法進行媒體處理和檢測。
- 當媒體輸入啟動成功后,進入循環處理幀的流程:
- 對每一幀圖像進行預處理。
- 使用YOLOv8模型對圖像進行體育賽事目標檢測和識別,得到檢測結果。
- 根據檢測結果更新界面的顯示,包括繪制檢測框、更新表格數據和條形圖等。
- 用戶可通過按鈕進行保存檢測結果、顯示作者信息和版本信息等操作。
- 用戶可通過控制按鈕來控制攝像頭、視頻和圖像的啟動和停止。
- 用戶可通過表格和下拉菜單選擇特定的檢測結果進行查看和分析。
5.2 登錄與賬戶管理
????????本系統還配備了一個基于SQLite數據庫的用戶登錄界面,提供了賬戶注冊、密碼修改、頭像設置、賬戶注銷和重新登錄等功能。這些功能為每個用戶創建了一個獨立的空間,用戶可以在其中保存和管理自己的檢測結果和設置。
????????通過用戶界面,用戶可以輕松完成賬戶的注冊和登錄操作,然后進入主界面進行體育賽事目標檢測。用戶還可以在登錄界面進行密碼修改、頭像設置和賬戶注銷等操作。這些功能為用戶提供了便利的個性化服務,讓用戶能夠更好地使用體育賽事目標檢測系統。
????????通過以上的設計和實現,體育賽事目標檢測系統具備了導入各類深度學習模型,實現多物體識別和檢測的能力。主界面中實時顯示包括檢測框、類別及置信度等信息;支持圖片、視頻、實時攝像頭和批量文件輸入,能實時識別并記錄。還設計了用戶登錄界面,提供賬戶注冊、密碼修改、頭像設置、賬戶注銷和重新登錄等功能,滿足用戶在實時目標檢測場景下的需求。
下載鏈接
????若您想獲得博文中涉及的實現完整全部資源文件(包括測試圖片、視頻,py, UI文件,訓練數據集、訓練代碼、界面代碼等),這里已打包上傳至博主的面包多平臺,見可參考博客與視頻,已將所有涉及的文件同時打包到里面,點擊即可運行,完整文件截圖如下:
完整資源中包含數據集及訓練代碼,環境配置與界面中文字、圖片、logo等的修改方法請見視頻,項目完整文件下載請見演示與介紹視頻的簡介處給出:???
演示與介紹視頻:https://www.bilibili.com/video/BV1EC411p7dd/
????在文件夾下的資源顯示如下,下面的鏈接中也給出了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟件后,復制離線依賴包至項目目錄下進行安裝,另外有詳細安裝教程:(1)Pycharm軟件安裝教程;(2)Anaconda軟件安裝教程;(3)Python環境配置教程;
離線依賴安裝教程:https://www.bilibili.com/video/BV1hv421C7g8/
離線依賴庫下載鏈接:https://pan.baidu.com/s/1y6vqa9CtRmC72SQYPh1ZCg?pwd=33z5 (提取碼:33z5)
6. 總結與展望
????????在本博客中,我們詳細介紹了一個基于YOLOv8/v5模型的體育賽事目標識別系統。系統以模塊化的方式設計,充分采用了合理的架構設計,帶來良好的可維護性和可擴展性。其用戶界面友好,能夠提供實時的體育賽事目標檢測和識別結果展示,同時支持用戶賬戶管理,以便于保存和管理檢測結果和設置。
????????該系統支持攝像頭、視頻、圖像和批量文件等多種輸入源,能夠滿足用戶在不同場景下的需求。在后面可以添加更多預訓練模型,增加檢測和識別的種類;優化用戶界面,增強個性化設置;并積極聆聽用戶反饋,以期不斷改進系統,以更好地滿足用戶的需求。
結束語
????????由于博主能力有限,博文中提及的方法即使經過試驗,也難免會有疏漏之處。希望您能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴謹的樣子,呈現在大家面前。同時如果有更好的實現方法也請您不吝賜教。
Ren, S., He, K., Girshick, R., & Sun, J. (2015). Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. In Advances in Neural Information Processing Systems. ??
Girdhar, R., Gkioxari, G., Torresani, L., & Paluri, M. (2018). Detect-and-Track: Efficient Pose Estimation in Videos. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. ??
Antol, S., Agrawal, A., Lu, J., Mitchell, M., Batra, D., Lawrence Zitnick, C., & Parikh, D. (2015). VQA: Visual Question Answering. In Proceedings of the IEEE International Conference on Computer Vision. ??
Redmon, J., Divvala, S., Girshick, R., & Farhadi, A. (2016). You Only Look Once: Unified, Real-Time Object Detection. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. ??