摘要:基于深度學(xué)習(xí)的高精度動(dòng)物園動(dòng)物(水牛、斑馬、大象、水豚、海龜、貓、奶牛、鹿、狗、火烈鳥、長(zhǎng)頸鹿、捷豹、袋鼠、獅子、鸚鵡、企鵝、犀牛、羊、老虎)檢測(cè)識(shí)別系統(tǒng)可用于日常生活中或野外來(lái)檢測(cè)與定位動(dòng)物園動(dòng)物,利用深度學(xué)習(xí)算法可實(shí)現(xiàn)圖片、視頻、攝像頭等方式的動(dòng)物園動(dòng)物目標(biāo)檢測(cè)識(shí)別,另外支持結(jié)果可視化與圖片或視頻檢測(cè)結(jié)果的導(dǎo)出。本系統(tǒng)采用YOLOv5目標(biāo)檢測(cè)模型訓(xùn)練數(shù)據(jù)集,使用Pysdie6庫(kù)來(lái)搭建頁(yè)面展示系統(tǒng),同時(shí)支持ONNX、PT等模型作為權(quán)重模型的輸出。本系統(tǒng)支持的功能包括動(dòng)物園動(dòng)物訓(xùn)練模型的導(dǎo)入、初始化;置信分與IOU閾值的調(diào)節(jié)、圖像上傳、檢測(cè)、可視化結(jié)果展示、結(jié)果導(dǎo)出與結(jié)束檢測(cè);視頻的上傳、檢測(cè)、可視化結(jié)果展示、結(jié)果導(dǎo)出與結(jié)束檢測(cè);攝像頭的上傳、檢測(cè)、可視化結(jié)果展示與結(jié)束檢測(cè);已檢測(cè)目標(biāo)列表、位置信息;前向推理用時(shí)。另外本動(dòng)物園動(dòng)物檢測(cè)識(shí)別系統(tǒng)同時(shí)支持原始圖像與檢測(cè)結(jié)果圖像的同時(shí)展示,原始視頻與檢測(cè)結(jié)果視頻的同時(shí)展示。本博文提供了完整的Python代碼和使用教程,適合新入門的朋友參考,完整代碼資源文件請(qǐng)轉(zhuǎn)至文末的下載鏈接。
近年來(lái),機(jī)器學(xué)習(xí)和深度學(xué)習(xí)取得了較大的發(fā)展,深度學(xué)習(xí)方法在檢測(cè)精度和速度方面與傳統(tǒng)方法相比表現(xiàn)出更良好的性能。YOLOv5是單階段目標(biāo)檢測(cè)算法YOLO的第五代,根據(jù)實(shí)驗(yàn)得出結(jié)論,其在速度與準(zhǔn)確性能方面都有了明顯提升,開源的代碼可見/ultralytics/yolov5。因此本博文利用YOLOv5檢測(cè)算法實(shí)現(xiàn)一種高精度動(dòng)物園動(dòng)物識(shí)別檢測(cè)模型,再搭配上Pyside6庫(kù)寫出界面系統(tǒng),完成目標(biāo)檢測(cè)識(shí)別頁(yè)面的開發(fā)。注意到Y(jié)OLO系列算法的最新進(jìn)展已有YOLOv6、YOLOv7、YOLOv8等算法,將本系統(tǒng)中檢測(cè)算法替換為最新算法的代碼也將在后面發(fā)布,歡迎關(guān)注收藏。
(資料圖片僅供參考)
(1)下載完整文件到自己電腦上,然后使用cmd打開到文件目錄
(2)利用Conda創(chuàng)建環(huán)境(Anacodna),conda create -n yolo5 python= 然后安裝torch和torchvision(pip install torch==+cu113 torchvision==+cu113 -f /whl/torch_?-i /simple)其中-i /simple代表使用清華源,這行命令要求nvidia-smi顯示的CUDA版本>=,最后安裝剩余依賴包使用:pip install -r -i /simple
(3)安裝Pyside6庫(kù) pip install pyside6== -i /simple
(4)對(duì)于windows系統(tǒng)下的pycocotools庫(kù)的安裝:pip install pycocotools-windows -i /simple
下面給出本博文設(shè)計(jì)的軟件界面,整體界面簡(jiǎn)潔大方,大體功能包括訓(xùn)練模型的導(dǎo)入、初始化;置信分與IOU閾值的調(diào)節(jié)、圖像上傳、檢測(cè)、可視化結(jié)果展示、結(jié)果導(dǎo)出與結(jié)束檢測(cè);視頻的上傳、檢測(cè)、可視化結(jié)果展示、結(jié)果導(dǎo)出與結(jié)束檢測(cè);已檢測(cè)目標(biāo)列表、位置信息;前向推理用時(shí)。希望大家可以喜歡,初始界面如下圖:
用戶可以點(diǎn)擊模型權(quán)重選擇按鈕上傳訓(xùn)練好的模型權(quán)重,訓(xùn)練權(quán)重格式可為.pt、.onnx以及。engine等,之后再點(diǎn)擊模型權(quán)重初始化按鈕可實(shí)現(xiàn)已選擇模型初始化信息的設(shè)置。
在Confidence或IOU下方的輸入框中改變值即可同步改變滑動(dòng)條的進(jìn)度,同時(shí)改變滑動(dòng)條的進(jìn)度值也可同步改變輸入框的值;Confidence或IOU值的改變將同步到模型里的配置,將改變檢測(cè)置信度閾值與IOU閾值。
用戶可以點(diǎn)擊選擇圖像按鈕上傳單張圖片進(jìn)行檢測(cè)與識(shí)別。
再點(diǎn)擊圖像檢測(cè)按鈕可完成輸入圖像的目標(biāo)檢測(cè)功能,之后系統(tǒng)會(huì)在用時(shí)一欄輸出檢測(cè)用時(shí),在目標(biāo)數(shù)量一欄輸出已檢測(cè)到的目標(biāo)數(shù)量,在下拉框可選擇已檢測(cè)目標(biāo),對(duì)應(yīng)于目標(biāo)位置(即xmin、ymin、xmax以及ymax)標(biāo)簽值的改變。
點(diǎn)擊圖像檢測(cè)結(jié)果導(dǎo)出按鈕即可導(dǎo)出檢測(cè)后的圖像,在保存欄里輸入保存的圖片名稱及后綴即可實(shí)現(xiàn)檢測(cè)結(jié)果圖像的保存。
點(diǎn)擊結(jié)束圖像檢測(cè)按鈕即可完成系統(tǒng)界面的刷新,將所有輸出信息清空,之后再點(diǎn)擊選擇圖像或選擇視頻按鈕來(lái)上傳圖像或視頻。
用戶可以點(diǎn)擊選擇視頻按鈕上傳視頻進(jìn)行檢測(cè)與識(shí)別,之后系統(tǒng)會(huì)將視頻的第一幀輸入到系統(tǒng)界面的左上方顯示。
再點(diǎn)擊視頻檢測(cè)按鈕可完成輸入視頻的目標(biāo)檢測(cè)功能,之后系統(tǒng)會(huì)在用時(shí)一欄輸出檢測(cè)用時(shí),在目標(biāo)數(shù)量一欄輸出已檢測(cè)到的目標(biāo)數(shù)量,在下拉框可選擇已檢測(cè)目標(biāo),對(duì)應(yīng)于目標(biāo)位置(即xmin、ymin、xmax以及ymax)標(biāo)簽值的改變。
點(diǎn)擊暫停視頻檢測(cè)按鈕即可實(shí)現(xiàn)輸入視頻的暫停,此時(shí)按鈕變?yōu)槔^續(xù)視頻檢測(cè),輸入視頻幀與幀檢測(cè)結(jié)果會(huì)保留在系統(tǒng)界面,可點(diǎn)擊下拉目標(biāo)框選擇已檢測(cè)目標(biāo)的坐標(biāo)位置信息,再點(diǎn)擊繼續(xù)視頻檢測(cè)按鈕即可實(shí)現(xiàn)輸入視頻的檢測(cè)。
點(diǎn)擊視頻檢測(cè)結(jié)果導(dǎo)出按鈕即可導(dǎo)出檢測(cè)后的視頻,在保存欄里輸入保存的圖片名稱及后綴即可實(shí)現(xiàn)檢測(cè)結(jié)果視頻的保存。
點(diǎn)擊結(jié)束視頻檢測(cè)按鈕即可完成系統(tǒng)界面的刷新,將所有輸出信息清空,之后再點(diǎn)擊選擇圖像或選擇視頻按鈕來(lái)上傳圖像或視頻。
用戶可以點(diǎn)擊打開攝像頭按鈕來(lái)打開攝像頭設(shè)備進(jìn)行檢測(cè)與識(shí)別,之后系統(tǒng)會(huì)將攝像頭圖像輸入到系統(tǒng)界面的左上方顯示。
再點(diǎn)擊攝像頭檢測(cè)按鈕可完成輸入攝像頭的目標(biāo)檢測(cè)功能,之后系統(tǒng)會(huì)在用時(shí)一欄輸出檢測(cè)用時(shí),在目標(biāo)數(shù)量一欄輸出已檢測(cè)到的目標(biāo)數(shù)量,在下拉框可選擇已檢測(cè)目標(biāo),對(duì)應(yīng)于目標(biāo)位置(即xmin、ymin、xmax以及ymax)標(biāo)簽值的改變。
點(diǎn)擊結(jié)束視頻檢測(cè)按鈕即可完成系統(tǒng)界面的刷新,將所有輸出信息清空,之后再點(diǎn)擊選擇圖像或選擇視頻或打開攝像按鈕來(lái)上傳圖像、視頻或打開攝像頭。
本系統(tǒng)采用了基于深度學(xué)習(xí)的單階段目標(biāo)檢測(cè)算法YOLOv5,相比于YOLOv3和YOLOv4,YOLOv5在檢測(cè)精度和速度上都有很大的提升。YOLOv5算法的核心思想是將目標(biāo)檢測(cè)問(wèn)題轉(zhuǎn)化為一個(gè)回歸問(wèn)題,通過(guò)直接預(yù)測(cè)物體中心點(diǎn)的坐標(biāo)來(lái)代替Anchor框。此外,YOLOv5使用SPP(Spatial Pyramid Pooling)的特征提取方法,這種方法可以在不增加計(jì)算量的情況下,有效地提取多尺度特征,提高檢測(cè)性能。YOLOv5s模型的整體結(jié)構(gòu)如下圖所示。
YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)是由Input、Backbone、Neck、Prediction組成。YOLOv5的Input部分是網(wǎng)絡(luò)的輸入端,采用Mosaic數(shù)據(jù)增強(qiáng)方式,對(duì)輸入數(shù)據(jù)隨機(jī)裁剪,然后進(jìn)行拼接。Backbone是YOLOv5提取特征的網(wǎng)絡(luò)部分,特征提取能力直接影響整個(gè)網(wǎng)絡(luò)性能。在特征提取階段,YOLOv5使用CSPNet(Cross Stage Partial Network)結(jié)構(gòu),它將輸入特征圖分為兩部分,一部分通過(guò)一系列卷積層進(jìn)行處理,另一部分直接進(jìn)行下采樣,最后將這兩部分特征圖進(jìn)行融合。這種設(shè)計(jì)使得網(wǎng)絡(luò)具有更強(qiáng)的非線性表達(dá)能力,可以更好地處理目標(biāo)檢測(cè)任務(wù)中的復(fù)雜背景和多樣化物體。在Neck階段使用連續(xù)的卷積核C3結(jié)構(gòu)塊融合特征圖。在Prediction階段,模型使用結(jié)果特征圖預(yù)測(cè)目標(biāo)的中心坐標(biāo)與尺寸信息。博主覺得YOLOv5不失為一種目標(biāo)檢測(cè)的高性能解決方案,能夠以較高的準(zhǔn)確率對(duì)目標(biāo)進(jìn)行分類與定位。當(dāng)然現(xiàn)在YOLOv6、YOLOv7、YOLOv8等算法也在不斷提出和改進(jìn),后續(xù)博主也會(huì)將這些算法融入到本系統(tǒng)中,敬請(qǐng)期待。
本系統(tǒng)使用的動(dòng)物園動(dòng)物數(shù)據(jù)集手動(dòng)標(biāo)注了水牛、斑馬、大象、水豚、海龜、貓、奶牛、鹿、狗、火烈鳥、長(zhǎng)頸鹿、捷豹、袋鼠、獅子、鸚鵡、企鵝、犀牛、羊、老虎這19個(gè)類別,數(shù)據(jù)集總計(jì)45098張圖片。該數(shù)據(jù)集中類別都有大量的旋轉(zhuǎn)和不同的光照條件,有助于訓(xùn)練出更加魯棒的檢測(cè)模型。本文實(shí)驗(yàn)的動(dòng)物園動(dòng)物檢測(cè)識(shí)別數(shù)據(jù)集包含訓(xùn)練集36045張圖片,驗(yàn)證集9053張圖片,選取部分?jǐn)?shù)據(jù)部分樣本數(shù)據(jù)集如下圖所示。由于YOLOv5算法對(duì)輸入圖片大小有限制,需要將所有圖片調(diào)整為相同的大小。為了在不影響檢測(cè)精度的情況下盡可能減小圖片的失真,我們將所有圖片調(diào)整為640x640的大小,并保持原有的寬高比例。此外,為了增強(qiáng)模型的泛化能力和魯棒性,我們還使用了數(shù)據(jù)增強(qiáng)技術(shù),包括隨機(jī)旋轉(zhuǎn)、縮放、裁剪和顏色變換等,以擴(kuò)充數(shù)據(jù)集并減少過(guò)擬合風(fēng)險(xiǎn)。、
本系統(tǒng)的深度學(xué)習(xí)模型使用PyTorch實(shí)現(xiàn),基于YOLOv5算法進(jìn)行目標(biāo)檢測(cè)。在訓(xùn)練階段,我們使用了預(yù)訓(xùn)練模型作為初始模型進(jìn)行訓(xùn)練,然后通過(guò)多次迭代優(yōu)化網(wǎng)絡(luò)參數(shù),以達(dá)到更好的檢測(cè)性能。在訓(xùn)練過(guò)程中,我們采用了學(xué)習(xí)率衰減和數(shù)據(jù)增強(qiáng)等技術(shù),以增強(qiáng)模型的泛化能力和魯棒性。
在測(cè)試階段,我們使用了訓(xùn)練好的模型來(lái)對(duì)新的圖片和視頻進(jìn)行檢測(cè)。通過(guò)設(shè)置閾值,將置信度低于閾值的檢測(cè)框過(guò)濾掉,最終得到檢測(cè)結(jié)果。同時(shí),我們還可以將檢測(cè)結(jié)果保存為圖片或視頻格式,以便進(jìn)行后續(xù)分析和應(yīng)用。本系統(tǒng)基于YOLOv5算法,使用PyTorch實(shí)現(xiàn)。代碼中用到的主要庫(kù)包括PyTorch、NumPy、OpenCV、PyQt等。
Pyside6是Python語(yǔ)言的GUI編程解決方案之一,可以快速地為Python程序創(chuàng)建GUI應(yīng)用。在本博文中,我們使用Pyside6庫(kù)創(chuàng)建一個(gè)圖形化界面,為用戶提供簡(jiǎn)單易用的交互界面,實(shí)現(xiàn)用戶選擇圖片、視頻進(jìn)行目標(biāo)檢測(cè)。
我們使用Qt Designer設(shè)計(jì)圖形界面,然后使用Pyside6將設(shè)計(jì)好的UI文件轉(zhuǎn)換為Python代碼。圖形界面中包含多個(gè)UI控件,例如:標(biāo)簽、按鈕、文本框、多選框等。通過(guò)Pyside6中的信號(hào)槽機(jī)制,可以使得UI控件與程序邏輯代碼相互連接。
在實(shí)驗(yàn)結(jié)果與分析部分,我們使用精度和召回率等指標(biāo)來(lái)評(píng)估模型的性能,還通過(guò)損失曲線和PR曲線來(lái)分析訓(xùn)練過(guò)程。在訓(xùn)練階段,我們使用了前面介紹的動(dòng)物園動(dòng)物數(shù)據(jù)集進(jìn)行訓(xùn)練,使用了YOLOv5算法對(duì)數(shù)據(jù)集訓(xùn)練,總計(jì)訓(xùn)練了300個(gè)epochs。在訓(xùn)練過(guò)程中,我們使用tensorboard記錄了模型在訓(xùn)練集和驗(yàn)證集上的損失曲線。從下圖可以看出,隨著訓(xùn)練次數(shù)的增加,模型的訓(xùn)練損失和驗(yàn)證損失都逐漸降低,說(shuō)明模型不斷地學(xué)習(xí)到更加精準(zhǔn)的特征。在訓(xùn)練結(jié)束后,我們使用模型在數(shù)據(jù)集的驗(yàn)證集上進(jìn)行了評(píng)估,得到了以下結(jié)果。
下圖展示了我們訓(xùn)練的YOLOv5模型在驗(yàn)證集上的PR曲線,從圖中可以看出,模型取得了較高的召回率和精確率,整體表現(xiàn)良好
下圖展示了本博文在使用YOLOv5模型對(duì)動(dòng)物園動(dòng)物數(shù)據(jù)集進(jìn)行訓(xùn)練時(shí)候的Mosaic數(shù)據(jù)增強(qiáng)圖像
綜上,本博文訓(xùn)練得到的YOLOv5模型在數(shù)據(jù)集上表現(xiàn)良好,具有較高的檢測(cè)精度和魯棒性,可以在實(shí)際場(chǎng)景中應(yīng)用。另外本博主對(duì)整個(gè)系統(tǒng)進(jìn)行了詳細(xì)測(cè)試,最終開發(fā)出一版流暢的高精度目標(biāo)檢測(cè)系統(tǒng)界面,就是本博文演示部分的展示,完整的UI界面、測(cè)試圖片視頻、代碼文件等均已打包上傳,感興趣的朋友可以關(guān)注我私信獲取。另外本博文的PDF與更多的目標(biāo)檢測(cè)識(shí)別系統(tǒng)請(qǐng)關(guān)注筆者的微信公眾號(hào) BestSongC (原Nuist計(jì)算機(jī)視覺與模式識(shí)別)來(lái)獲取。
其他基于深度學(xué)習(xí)的目標(biāo)檢測(cè)系統(tǒng)如西紅柿、貓狗、山羊、野生目標(biāo)、煙頭、二維碼、頭盔、交警、野生動(dòng)物、野外煙霧、人體摔倒識(shí)別、紅外行人、家禽豬、蘋果、推土機(jī)、蜜蜂、打電話、鴿子、足球、奶牛、人臉口罩、安全背心、煙霧檢測(cè)系統(tǒng)等有需要的朋友關(guān)注我,從博主其他視頻中獲取下載鏈接。
完整項(xiàng)目目錄如下所示:
標(biāo)簽: