天天看點

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

作者:Nuist目标檢測

摘要:基于深度學習的高精度煙頭檢測識别系統可用于日常生活中檢測與定位煙頭目标,利用深度學習算法可實作圖檔、視訊、攝像頭等方式的煙頭目标檢測識别,另外支援結果可視化與圖檔或視訊檢測結果的導出。本系統采用YOLOv5目标檢測模型訓練資料集,使用Pysdie6庫來搭建頁面展示系統,同時支援ONNX、PT等模型作為權重模型的輸出。本系統支援的功能包括煙頭訓練模型的導入、初始化;置信分與IOU門檻值的調節、圖像上傳、檢測、可視化結果展示、結果導出與結束檢測;視訊的上傳、檢測、可視化結果展示、結果導出與結束檢測;攝像頭的上傳、檢測、可視化結果展示與結束檢測;已檢測目标清單、位置資訊;前向推理用時。另外本煙頭檢測識别系統同時支援原始圖像與檢測結果圖像的同時展示,原始視訊與檢測結果視訊的同時展示。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

基本介紹

近年來,機器學習和深度學習取得了較大的發展,深度學習方法在檢測精度和速度方面與傳統方法相比表現出更良好的性能。YOLOv5是單階段目标檢測算法YOLO的第五代,根據實驗得出結論,其在速度與準确性能方面都有了明顯提升,開源的代碼可見https://github.com/ultralytics/yolov5。是以本博文利用YOLOv5檢測算法實作一種高精度煙頭識别檢測模型,再搭配上Pyside6庫寫出界面系統,完成目标檢測識别頁面的開發。注意到YOLO系列算法的最新進展已有YOLOv6、YOLOv7、YOLOv8等算法,将本系統中檢測算法替換為最新算法的代碼也将在後面釋出,歡迎關注收藏。

環境搭建

(1)下載下傳YOLOv5源碼庫,放到自己電腦的目錄,之後打開cmd進入到YOLOv5目錄裡面,本文示範的目錄是:D:\vscode_workspace\yolov5

(2)利用Conda建立環境(Anacodna),conda create -n yolo5 python=3.8 然後安裝torch和torchvision(pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 -f https://download.pytorch.org/whl/torch_stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple)其中-i https://pypi.tuna.tsinghua.edu.cn/simple代表使用清華源,這行指令要求nvidia-smi顯示的CUDA版本>=11.3,最後安裝剩餘依賴包使用:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)
基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)
  1. 安裝Pyside6庫 pip install pyside6==6.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)
  1. 對于windows系統下的pycocotools庫的安裝:pip install pycocotools-windows -i https://pypi.tuna.tsinghua.edu.cn/simple

界面及功能展示

下面給出本博文設計的軟體界面,整體界面簡潔大方,大體功能包括訓練模型的導入、初始化;置信分與IOU門檻值的調節、圖像上傳、檢測、可視化結果展示、結果導出與結束檢測;視訊的上傳、檢測、可視化結果展示、結果導出與結束檢測;已檢測目标清單、位置資訊;前向推理用時。希望大家可以喜歡,初始界面如下圖:

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

模型選擇與初始化

使用者可以點選模型權重選擇按鈕上傳訓練好的模型權重,訓練權重格式可為.pt、.onnx以及。engine等,之後再點選模型權重初始化按鈕可實作已選擇模型初始化資訊的設定。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)
基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)
基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

置信分與IOU的改變

在Confidence或IOU下方的輸入框中改變值即可同步改變滑動條的進度,同時改變滑動條的進度值也可同步改變輸入框的值;Confidence或IOU值的改變将同步到模型裡的配置,将改變檢測置信度門檻值與IOU門檻值。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

圖像選擇、檢測與導出

使用者可以點選選擇圖像按鈕上傳單張圖檔進行檢測與識别。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

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

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

再點選檢測結果展示按鈕可在系統左下方顯示輸入圖像檢測的結果,系統将顯示識别出圖檔中的目标的類别、位置和置信度資訊。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

點選圖像檢測結果導出按鈕即可導出檢測後的圖像,在儲存欄裡輸入儲存的圖檔名稱及字尾即可實作檢測結果圖像的儲存。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

點選結束圖像檢測按鈕即可完成系統界面的重新整理,将所有輸出資訊清空,之後再點選選擇圖像或選擇視訊按鈕來上傳圖像或視訊。

視訊選擇、檢測與導出

使用者可以點選選擇視訊按鈕上傳視訊進行檢測與識别,之後系統會将視訊的第一幀輸入到系統界面的左上方顯示。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

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

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

點選暫停視訊檢測按鈕即可實作輸入視訊的暫停,此時按鈕變為繼續視訊檢測,輸入視訊幀與幀檢測結果會保留在系統界面,可點選下拉目标框選擇已檢測目标的坐标位置資訊,再點選繼續視訊檢測按鈕即可實作輸入視訊的檢測。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

點選視訊檢測結果導出按鈕即可導出檢測後的視訊,在儲存欄裡輸入儲存的圖檔名稱及字尾即可實作檢測結果視訊的儲存。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

點選結束視訊檢測按鈕即可完成系統界面的重新整理,将所有輸出資訊清空,之後再點選選擇圖像或選擇視訊按鈕來上傳圖像或視訊。

攝像頭打開、檢測與結束

使用者可以點選打開攝像頭按鈕來打開攝像頭裝置進行檢測與識别,之後系統會将攝像頭圖像輸入到系統界面的左上方顯示。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

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

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

點選結束視訊檢測按鈕即可完成系統界面的重新整理,将所有輸出資訊清空,之後再點選選擇圖像或選擇視訊或打開攝像按鈕來上傳圖像、視訊或打開攝像頭。

算法原理介紹

本系統采用了基于深度學習的單階段目标檢測算法YOLOv5,相比于YOLOv3和YOLOv4,YOLOv5在檢測精度和速度上都有很大的提升。YOLOv5算法的核心思想是将目标檢測問題轉化為一個回歸問題,通過直接預測物體中心點的坐标來代替Anchor框。此外,YOLOv5使用SPP(Spatial Pyramid Pooling)的特征提取方法,這種方法可以在不增加計算量的情況下,有效地提取多尺度特征,提高檢測性能。YOLOv5s模型的整體結構如下圖所示。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

YOLOv5網絡結構是由Input、Backbone、Neck、Prediction組成。YOLOv5的Input部分是網絡的輸入端,采用Mosaic資料增強方式,對輸入資料随機裁剪,然後進行拼接。Backbone是YOLOv5提取特征的網絡部分,特征提取能力直接影響整個網絡性能。在特征提取階段,YOLOv5使用CSPNet(Cross Stage Partial Network)結構,它将輸入特征圖分為兩部分,一部分通過一系列卷積層進行處理,另一部分直接進行下采樣,最後将這兩部分特征圖進行融合。這種設計使得網絡具有更強的非線性表達能力,可以更好地處理目标檢測任務中的複雜背景和多樣化物體。在Neck階段使用連續的卷積核C3結構塊融合特征圖。在Prediction階段,模型使用結果特征圖預測目标的中心坐标與尺寸資訊。

部落客覺得YOLOv5不失為一種目标檢測的高性能解決方案,能夠以較高的準确率對目标進行分類與定位。當然現在YOLOv6、YOLOv7、YOLOv8等算法也在不斷提出和改進,後續部落客也會将這些算法融入到本系統中,敬請期待。

資料集介紹

本系統使用的煙頭資料集手動标注了煙頭這一個類别,資料集總計1023張圖檔。該資料集中類别都有大量的旋轉和不同的光照條件,有助于訓練出更加魯棒的檢測模型。本文實驗的煙頭檢測識别資料集包含訓練集824張圖檔,驗證集199張圖檔,選取部分資料部分樣本資料集如下圖所示。由于YOLOv5算法對輸入圖檔大小有限制,需要将所有圖檔調整為相同的大小。為了在不影響檢測精度的情況下盡可能減小圖檔的失真,我們将所有圖檔調整為640x640的大小,并保持原有的寬高比例。此外,為了增強模型的泛化能力和魯棒性,我們還使用了資料增強技術,包括随機旋轉、縮放、裁剪和顔色變換等,以擴充資料集并減少過拟合風險。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)
基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

關鍵代碼解析

本系統的深度學習模型使用PyTorch實作,基于YOLOv5算法進行目标檢測。在訓練階段,我們使用了預訓練模型作為初始模型進行訓練,然後通過多次疊代優化網絡參數,以達到更好的檢測性能。在訓練過程中,我們采用了學習率衰減和資料增強等技術,以增強模型的泛化能力和魯棒性。

在測試階段,我們使用了訓練好的模型來對新的圖檔和視訊進行檢測。通過設定門檻值,将置信度低于門檻值的檢測框過濾掉,最終得到檢測結果。同時,我們還可以将檢測結果儲存為圖檔或視訊格式,以便進行後續分析和應用。本系統基于YOLOv5算法,使用PyTorch實作。代碼中用到的主要庫包括PyTorch、NumPy、OpenCV、PyQt等。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)
基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

Pyside6界面設計

Pyside6是Python語言的GUI程式設計解決方案之一,可以快速地為Python程式建立GUI應用。在本博文中,我們使用Pyside6庫建立一個圖形化界面,為使用者提供簡單易用的互動界面,實作使用者選擇圖檔、視訊進行目标檢測。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

我們使用Qt Designer設計圖形界面,然後使用Pyside6将設計好的UI檔案轉換為Python代碼。圖形界面中包含多個UI控件,例如:标簽、按鈕、文本框、多選框等。通過Pyside6中的信号槽機制,可以使得UI控件與程式邏輯代碼互相連接配接。

實驗結果與分析

在實驗結果與分析部分,我們使用精度和召回率等名額來評估模型的性能,還通過損失曲線和PR曲線來分析訓練過程。在訓練階段,我們使用了前面介紹的煙頭資料集進行訓練,使用了YOLOv5算法對資料集訓練,總計訓練了300個epochs。在訓練過程中,我們使用tensorboard記錄了模型在訓練集和驗證集上的損失曲線。從下圖可以看出,随着訓練次數的增加,模型的訓練損失和驗證損失都逐漸降低,說明模型不斷地學習到更加精準的特征。在訓練結束後,我們使用模型在資料集的驗證集上進行了評估,得到了以下結果。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

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

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

下圖展示了本博文在使用YOLOv5模型對煙頭資料集進行訓練時候的Mosaic資料增強圖像。

基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)
基于深度學習的高精度煙頭檢測系統(Python+PyTorch+Pyside6)

綜上,本博文訓練得到的YOLOv5模型在資料集上表現良好,具有較高的檢測精度和魯棒性,可以在實際場景中應用。另外本部落客對整個系統進行了詳細測試,最終開發出一版流暢的高精度目标檢測系統界面,就是本博文示範部分的展示,完整的UI界面、測試圖檔視訊、代碼檔案等均已打包上傳,感興趣的朋友可以關注私信我聯系償擷取源碼和資料集。另外本博文的PDF與更多的目标檢測識别系統請關注筆者的微信公衆号(Nuist計算機視覺與模式識别)來擷取。

繼續閱讀