基于YOLOv8模型的老虎目標檢測系統(tǒng)(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型的老虎目標檢測系統(tǒng)可用于日常生活中檢測與定位老虎目標,利用深度學習算法可實現(xiàn)圖片、視頻、攝像頭等方式的目標檢測,另外本系統(tǒng)還支持圖片、視頻等格式的結果可視化與結果導出。本系統(tǒng)采用YOLOv8目標檢測算法訓練數(shù)據(jù)集,使用Pysdie6庫來搭建前端頁面展示系統(tǒng)。另外本系統(tǒng)支持的功能還包括訓練模型的導入、初始化;檢測置信分與檢測后處理IOU閾值的調(diào)節(jié);圖像的上傳、檢測、可視化結果展示與檢測結果導出;視頻的上傳、檢測、可視化結果展示與檢測結果導出;攝像頭的圖像輸入、檢測與可視化結果展示;已檢測目標個數(shù)與列表、位置信息;前向推理用時等功能。本博文提供了完整的Python代碼與安裝和使用教程,適合新入門的朋友參考,部分重要代碼部分都有注釋,完整代碼資源文件請轉至文末的鏈接。

需要源碼的朋友在后臺私信博主獲取下載鏈接
基本介紹
近年來,機器學習和深度學習取得了較大的發(fā)展,深度學習方法在檢測精度和速度方面與傳統(tǒng)方法相比表現(xiàn)出更良好的性能。YOLOv8 是 Ultralytics 公司繼?YOLOv5?算法之后開發(fā)的下一代算法模型,目前支持圖像分類、物體檢測和實例分割任務。YOLOv8 是一個 SOTA模型,它建立在之前YOLO?系列模型的成功基礎上,并引入了新的功能和改進,以進一步提升性能和靈活性。具體創(chuàng)新包括:一個新的骨干網(wǎng)絡、一個新的 Ancher-Free 檢測頭和一個新的損失函數(shù),可以在從 CPU 到 GPU 的各種硬件平臺上運行。因此本博文利用YOLOv8目標檢測算法實現(xiàn)一種老虎目標檢測模型,再使用Pyside6庫搭建出界面系統(tǒng),完成目標檢測頁面的開發(fā)。本博主之前發(fā)布過關于YOLOv5算法的相關模型與界面,需要的朋友可從我之前發(fā)布的博客查看。另外本博主計劃將YOLOv5、YOLOv6、YOLOv7和YOLOv8一起聯(lián)合發(fā)布,需要的朋友可以持續(xù)關注,歡迎朋友們關注收藏。
環(huán)境搭建
(1)打開項目目錄,在搜索框內(nèi)輸入cmd打開終端

(2)新建一個虛擬環(huán)境(conda create -n yolo8 python=3.8)

3)激活環(huán)境,安裝ultralytics庫(yolov8官方庫),pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

(4)注意到這種安裝方式只會安裝cpu版torch,如需安裝gpu版torch,需在安裝包之前先安裝torch:pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 -f https://download.pytorch.org/whl/torch_stable.html;再,pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

(5)安裝圖形化界面庫pyside6:pip install pyside6 -i https://pypi.tuna.tsinghua.edu.cn/simple
界面及功能展示
下面給出本博文設計的軟件界面,整體界面簡潔大方,大體功能包括訓練模型的導入、初始化;置信分與IOU閾值的調(diào)節(jié)、圖像上傳、檢測、可視化結果展示、結果導出與結束檢測;視頻的上傳、檢測、可視化結果展示、結果導出與結束檢測;已檢測目標列表、位置信息;前向推理用時。初始界面如下圖:

?
模型選擇與初始化
用戶可以點擊模型權重選擇按鈕上傳訓練好的模型權重,訓練權重格式可為.pt、.onnx以及engine等,之后再點擊模型權重初始化按鈕可實現(xiàn)已選擇模型初始化的配置。

?
置信分與IOU的改變
在Confidence或IOU下方的輸入框中改變值即可同步改變滑動條的進度,同時改變滑動條的進度值也可同步改變輸入框的值;Confidence或IOU值的改變將同步到模型里的配置,將改變檢測置信度閾值與IOU閾值。
圖像選擇、檢測與導出
用戶可以點擊選擇圖像按鈕上傳單張圖像進行檢測與識別,上傳成功后系統(tǒng)界面會同步顯示輸入圖像。

再點擊圖像檢測按鈕可完成輸入圖像的目標檢測功能,之后系統(tǒng)會在用時一欄輸出檢測用時,在目標數(shù)量一欄輸出已檢測到的目標數(shù)量,在下拉框可選擇已檢測目標,對應于目標位置(即xmin、ymin、xmax以及ymax)標簽值的改變。

再點擊檢測結果展示按鈕可在系統(tǒng)左下方顯示輸入圖像檢測的結果,系統(tǒng)將顯示識別出圖片中的目標的類別、位置和置信度信息。

點擊圖像檢測結果導出按鈕即可導出檢測后的圖像,在保存欄里輸入保存的圖片名稱及后綴即可實現(xiàn)檢測結果圖像的保存。

點擊結束圖像檢測按鈕即可完成系統(tǒng)界面的刷新,將所有輸出信息清空,之后再點擊選擇圖像或選擇視頻按鈕來上傳圖像或視頻,或者點擊打開攝像頭按鈕來開啟攝像頭。
?
視頻選擇、檢測與導出
用戶點擊選擇視頻按鈕上傳視頻進行檢測與識別,之后系統(tǒng)會將視頻的第一幀輸入到系統(tǒng)界面中顯示。

再點擊視頻檢測按鈕可完成輸入視頻的目標檢測功能,之后系統(tǒng)會在用時一欄輸出檢測用時,在目標數(shù)量一欄輸出已檢測到的目標數(shù)量,在下拉框可選擇已檢測目標,對應于目標位置(即xmin、ymin、xmax以及ymax)標簽值的改變。

點擊暫停視頻檢測按鈕即可實現(xiàn)輸入視頻的暫停,此時按鈕變?yōu)槔^續(xù)視頻檢測,輸入視頻幀與幀檢測結果會保留在系統(tǒng)界面,可點擊下拉目標框選擇已檢測目標的坐標位置信息,再點擊繼續(xù)視頻檢測按鈕即可實現(xiàn)輸入視頻的檢測。
點擊視頻檢測結果導出按鈕即可導出檢測后的視頻,在保存欄里輸入保存的圖片名稱及后綴即可實現(xiàn)檢測結果視頻的保存。

點擊結束視頻檢測按鈕即可完成系統(tǒng)界面的刷新,將所有輸出信息清空,之后再點擊選擇圖像或選擇視頻按鈕來上傳圖像或視頻,或者點擊打開攝像頭按鈕來開啟攝像頭。
攝像頭打開、檢測與結束
用戶可以點擊打開攝像頭按鈕來打開攝像頭設備進行檢測與識別,之后系統(tǒng)會將攝像頭圖像輸入到系統(tǒng)界面中顯示。

再點擊攝像頭檢測按鈕可完成輸入攝像頭的目標檢測功能,之后系統(tǒng)會在用時一欄輸出檢測用時,在目標數(shù)量一欄輸出已檢測到的目標數(shù)量,在下拉框可選擇已檢測目標,對應于目標位置(即xmin、ymin、xmax以及ymax)標簽值的改變。

點擊結束視頻檢測按鈕即可完成系統(tǒng)界面的刷新,將所有輸出信息清空,之后再點擊選擇圖像或選擇視頻按鈕來上傳圖像或視頻,或者點擊打開攝像頭按鈕來開啟攝像頭。
?
算法原理介紹
本系統(tǒng)采用了基于深度學習的單階段目標檢測算法YOLOv8,相較于之前的YOLO系列目標檢測算法,YOLOv8目標檢測算法具有如下的幾點優(yōu)勢:(1)更友好的安裝/運行方式;(2)速度更快、準確率更高;(3)新的backbone,將YOLOv5中的C3更換為C2F;(4)YOLO系列第一次嘗試使用anchor-free;(5)新的損失函數(shù)。YOLOv8模型的整體結構如下圖所示,原圖見mmyolo的官方倉庫。

YOLOv8與YOLOv5模型最明顯的差異是使用C2F模塊替換了原來的C3模塊,兩個模塊的結構如下圖所示,原圖見mmyolo的官方倉庫。

另外Head 部分變化最大,從原先的耦合頭變成了解耦頭,并且從 YOLOv5 的 Anchor-Based 變成了 Anchor-Free。其結構對比如下圖所示。

數(shù)據(jù)集介紹
本系統(tǒng)使用的老虎數(shù)據(jù)集手動標注了老虎這一個類別,數(shù)據(jù)集總計4414張圖片。該數(shù)據(jù)集中類別都有大量的旋轉和不同的光照條件,有助于訓練出更加魯棒的檢測模型。本文實驗的老虎檢測識別數(shù)據(jù)集包含訓練集2306張圖片,驗證集456張圖片,測試集1652張圖片,選取部分數(shù)據(jù)部分樣本數(shù)據(jù)集如下圖所示。此外,為了增強模型的泛化能力和魯棒性,我們還使用了數(shù)據(jù)增強技術,包括隨機旋轉、縮放、裁剪和顏色變換等,以擴充數(shù)據(jù)集并減少過擬合風險。
關鍵代碼解析
在訓練階段,我們使用了預訓練模型作為初始模型進行訓練,然后通過多次迭代優(yōu)化網(wǎng)絡參數(shù),以達到更好的檢測性能。在訓練過程中,我們采用了學習率衰減和數(shù)據(jù)增強等技術,以增強模型的泛化能力和魯棒性。一個簡單的單卡模型訓練命令如下。

在訓練時也可指定更多的參數(shù),大部分重要的參數(shù)如下所示:

在測試階段,我們使用了訓練好的模型來對新的圖片和視頻進行檢測。通過設置閾值,將置信度低于閾值的檢測框過濾掉,最終得到檢測結果。同時,我們還可以將檢測結果保存為圖片或視頻格式,以便進行后續(xù)分析和應用。本系統(tǒng)基于YOLOv8算法,使用PyTorch實現(xiàn)。代碼中用到的主要庫包括PyTorch、NumPy、OpenCV、Pyside6等。

?
Pyside6界面設計
PySide是一個Python的圖形化界面(GUI)庫,由C++版的Qt開發(fā)而來,在用法上基本與C++版沒有特別大的差異。相對于其他Python GUI庫來說,PySide開發(fā)較快,功能更完善,而且文檔支持更好。在本博文中,我們使用Pyside6庫創(chuàng)建一個圖形化界面,為用戶提供簡單易用的交互界面,實現(xiàn)用戶選擇圖片、視頻進行目標檢測。
我們使用Qt Designer設計圖形界面,然后使用Pyside6將設計好的UI文件轉換為Python代碼。圖形界面中包含多個UI控件,例如:標簽、按鈕、文本框、多選框等。通過Pyside6中的信號槽機制,可以使得UI控件與程序邏輯代碼相互連接。
實驗結果與分析
在實驗結果與分析部分,我們使用精度和召回率等指標來評估模型的性能,還通過損失曲線和PR曲線來分析訓練過程。在訓練階段,我們使用了前面介紹的數(shù)據(jù)集進行訓練,使用了YOLOv8算法對數(shù)據(jù)集訓練,總計訓練了100個epochs。在訓練過程中,我們使用tensorboard記錄了模型在訓練集和驗證集上的損失曲線。從下圖可以看出,隨著訓練次數(shù)的增加,模型的訓練損失和驗證損失都逐漸降低,說明模型不斷地學習到更加精準的特征。在訓練結束后,我們使用模型在數(shù)據(jù)集的驗證集上進行了評估,得到了以下結果。

下圖展示了我們訓練的YOLOv8模型在驗證集上的PR曲線,從圖中可以看出,模型取得了較高的召回率和精確率,整體表現(xiàn)良好。

下圖展示了本博文在使用YOLOv8模型對數(shù)據(jù)集進行訓練時候的Mosaic數(shù)據(jù)增強圖像。

綜上,本博文訓練得到的YOLOv8模型在數(shù)據(jù)集上表現(xiàn)良好,具有較高的檢測精度和魯棒性,可以在實際場景中應用。另外本博主對整個系統(tǒng)進行了詳細測試,最終開發(fā)出一版流暢的高精度目標檢測系統(tǒng)界面,就是本博文演示部分的展示,完整的UI界面、測試圖片視頻、代碼文件等均已打包上傳,感興趣的朋友可以關注我私信獲取。另外本博文的PDF與更多的目標檢測識別系統(tǒng)請關注筆者的微信公眾號 BestSongC
其他基于深度學習的目標檢測系統(tǒng)如西紅柿、貓狗、山羊、野生目標、煙頭、二維碼、頭盔、交警、野生動物、野外煙霧、人體摔倒識別、紅外行人、家禽豬、蘋果、推土機、蜜蜂、打電話、鴿子、足球、奶牛、人臉口罩、安全背心、煙霧檢測系統(tǒng)等有需要的朋友關注我,從博主其他視頻中獲取下載鏈接。
完整項目目錄如下所示
?
