基于YOLOv8模型和Caltech數據集的行人檢測系統(PyTorch+Pyside6+YOLOv8模型)

摘要

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

需要源碼的朋友后臺私信博主獲取下載鏈接

基本介紹

近年來,機器學習和深度學習取得了較大的發展,深度學習方法在檢測精度和速度方面與傳統方法相比表現出更良好的性能。YOLOv8 是 Ultralytics 公司繼 YOLOv5 算法之后開發的下一代算法模型,目前支持圖像分類、物體檢測和實例分割任務。YOLOv8 是一個 SOTA模型,它建立在之前YOLO 系列模型的成功基礎上,并引入了新的功能和改進,以進一步提升性能和靈活性。具體創新包括:一個新的骨干網絡、一個新的 Ancher-Free 檢測頭和一個新的損失函數,可以在從 CPU 到 GPU 的各種硬件平臺上運行。因此本博文利用YOLOv8目標檢測算法實現一種基于Caltech數據集的高精度行人檢測模型,再使用Pyside6庫搭建出界面系統,完成目標檢測頁面的開發。本博主之前發布過關于YOLOv5算法的相關模型與界面,需要的朋友可從我之前發布的博客查看。另外本博主計劃將YOLOv5、YOLOv6、YOLOv7和YOLOv8一起聯合發布,需要的朋友可以持續關注,歡迎朋友們關注收藏。

環境搭建

(1)打開項目目錄,在搜索框內輸入cmd打開終端
在這里插入圖片描述

(2)新建一個虛擬環境(conda create -n yolo8 python=3.8)
在這里插入圖片描述

(3)激活環境,安裝ultralytics庫(yolov8官方庫),pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
在這里插入圖片描述

(4)注意到這種安裝方式只會安裝cpu版torch,如需安裝gpu版torch,需在安裝包之前先安裝torch:pip install torch2.0.1+cu118 torchvision0.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閾值的調節、圖像上傳、檢測、可視化結果展示、結果導出與結束檢測;視頻的上傳、檢測、可視化結果展示、結果導出與結束檢測;已檢測目標列表、位置信息;前向推理用時。初始界面如下圖:
在這里插入圖片描述

模型選擇與初始化

用戶可以點擊模型權重選擇按鈕上傳訓練好的模型權重,訓練權重格式可為.pt、.onnx以及engine等,之后再點擊模型權重初始化按鈕可實現已選擇模型初始化的配置。
在這里插入圖片描述

置信分與IOU的改變

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

圖像選擇、檢測與導出

用戶可以點擊選擇圖像按鈕上傳單張圖像進行檢測與識別,上傳成功后系統界面會同步顯示輸入圖像。
在這里插入圖片描述

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

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

點擊圖像檢測結果導出按鈕即可導出檢測后的圖像,在保存欄里輸入保存的圖片名稱及后綴即可實現檢測結果圖像的保存。
在這里插入圖片描述

點擊結束圖像檢測按鈕即可完成系統界面的刷新,將所有輸出信息清空,之后再點擊選擇圖像或選擇視頻按鈕來上傳圖像或視頻,或者點擊打開攝像頭按鈕來開啟攝像頭。

視頻選擇、檢測與導出

用戶點擊選擇視頻按鈕上傳視頻進行檢測與識別,之后系統會將視頻的第一幀輸入到系統界面中顯示。
在這里插入圖片描述

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

點擊暫停視頻檢測按鈕即可實現輸入視頻的暫停,此時按鈕變為繼續視頻檢測,輸入視頻幀與幀檢測結果會保留在系統界面,可點擊下拉目標框選擇已檢測目標的坐標位置信息,再點擊繼續視頻檢測按鈕即可實現輸入視頻的檢測。
點擊視頻檢測結果導出按鈕即可導出檢測后的視頻,在保存欄里輸入保存的圖片名稱及后綴即可實現檢測結果視頻的保存。
在這里插入圖片描述

點擊結束視頻檢測按鈕即可完成系統界面的刷新,將所有輸出信息清空,之后再點擊選擇圖像或選擇視頻按鈕來上傳圖像或視頻,或者點擊打開攝像頭按鈕來開啟攝像頭。

攝像頭打開、檢測與結束

用戶可以點擊打開攝像頭按鈕來打開攝像頭設備進行檢測與識別,之后系統會將攝像頭圖像輸入到系統界面中顯示。
在這里插入圖片描述

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

點擊結束視頻檢測按鈕即可完成系統界面的刷新,將所有輸出信息清空,之后再點擊選擇圖像或選擇視頻按鈕來上傳圖像或視頻,或者點擊打開攝像頭按鈕來開啟攝像頭。

算法原理介紹

本系統采用了基于深度學習的單階段目標檢測算法YOLOv8,相較于之前的YOLO系列目標檢測算法,YOLOv8目標檢測算法具有如下的幾點優勢:(1)更友好的安裝/運行方式;(2)速度更快、準確率更高;(3)新的backbone,將YOLOv5中的C3更換為C2F;(4)YOLO系列第一次嘗試使用anchor-free;(5)新的損失函數。YOLOv8模型的整體結構如下圖所示,原圖見mmyolo的官方倉庫。
在這里插入圖片描述

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

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

數據集介紹

本系統使用的Caltech行人數據集標注了行人這一個類別,數據集總計22935張圖片。該數據集中類別都有大量的旋轉和不同的光照條件,有助于訓練出更加魯棒的檢測模型。本文實驗的Caltech目標檢測數據集包含訓練集18569張圖片,驗證集4366張圖片,選取部分數據部分樣本數據集如下圖所示。在訓練階段,由于YOLOv5算法對輸入圖片大小有限制,需要將所有圖片調整為相同的大小。為了在不影響檢測精度的情況下盡可能減小圖片的失真,我們將所有圖片調整為640x640的大小,并保持原有的寬高比例。此外,為了增強模型的泛化能力和魯棒性,我們還使用了數據增強技術,包括隨機旋轉、縮放、裁剪和顏色變換等,以擴充數據集并減少過擬合風險。
在這里插入圖片描述

關鍵代碼解析

在訓練階段,我們使用了預訓練模型作為初始模型進行訓練,然后通過多次迭代優化網絡參數,以達到更好的檢測性能。在訓練過程中,我們采用了學習率衰減和數據增強等技術,以增強模型的泛化能力和魯棒性。一個簡單的單卡模型訓練命令如下。
在這里插入圖片描述

在訓練時也可指定更多的參數,大部分重要的參數如下所示:
在這里插入圖片描述

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

Pyside6界面設計

PySide是一個Python的圖形化界面(GUI)庫,由C++版的Qt開發而來,在用法上基本與C++版沒有特別大的差異。相對于其他Python GUI庫來說,PySide開發較快,功能更完善,而且文檔支持更好。在本博文中,我們使用Pyside6庫創建一個圖形化界面,為用戶提供簡單易用的交互界面,實現用戶選擇圖片、視頻進行目標檢測。
我們使用Qt Designer設計圖形界面,然后使用Pyside6將設計好的UI文件轉換為Python代碼。圖形界面中包含多個UI控件,例如:標簽、按鈕、文本框、多選框等。通過Pyside6中的信號槽機制,可以使得UI控件與程序邏輯代碼相互連接。

實驗結果與分析

在實驗結果與分析部分,我們使用精度和召回率等指標來評估模型的性能,還通過損失曲線和PR曲線來分析訓練過程。在訓練階段,我們使用了前面介紹的Caltech行人數據集進行訓練,使用了YOLOv8算法對數據集訓練,總計訓練了100個epochs。在訓練過程中,我們使用tensorboard記錄了模型在訓練集和驗證集上的損失曲線。從下圖可以看出,隨著訓練次數的增加,模型的訓練損失和驗證損失都逐漸降低,說明模型不斷地學習到更加精準的特征。在訓練結束后,我們使用模型在數據集的驗證集上進行了評估,得到了以下結果。
在這里插入圖片描述

下圖展示了我們訓練的YOLOv8模型在驗證集上的PR曲線,從圖中可以看出,模型取得了較高的召回率和精確率,整體表現良好。
在這里插入圖片描述

下圖展示了本博文在使用YOLOv8模型對Caltech行人數據集進行訓練時候的Mosaic數據增強圖像。
在這里插入圖片描述

綜上,本博文訓練得到的YOLOv8模型在數據集上表現良好,具有較高的檢測精度和魯棒性,可以在實際場景中應用。另外本博主對整個系統進行了詳細測試,最終開發出一版流暢的高精度目標檢測系統界面,就是本博文演示部分的展示,完整的UI界面、測試圖片視頻、代碼文件等均已打包上傳,感興趣的朋友可以關注我私信獲取。

其他基于深度學習的目標檢測系統如西紅柿、貓狗、山羊、野生目標、煙頭、二維碼、頭盔、交警、野生動物、野外煙霧、人體摔倒識別、紅外行人、家禽豬、蘋果、推土機、蜜蜂、打電話、鴿子、足球、奶牛、人臉口罩、安全背心、煙霧檢測系統等有需要的朋友關注我,從博主其他視頻中獲取下載鏈接。

完整項目目錄如下所示:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39811.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39811.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39811.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#使用FileInfo和DirectoryInfo類來執行文件和文件夾操作

System.IO.FileInfo 和 System.IO.DirectoryInfo 是C#中用于操作文件和文件夾的類,它們提供了許多有用的方法和屬性來管理文件和文件夾。 System.IO.FileInfo: FileInfo 類用于操作單個文件的信息和內容。以下是一些常用的方法和屬性: Exi…

頻繁full gc 調參

Error message from spark is:java.lang.Exception: application_1678793738534_17900289 Driver Disassociated [akka.tcp://sparkDriverClient11.71.243.117:37931] <- [akka.tcp://sparkYarnSQLAM9.10.130.149:38513] disassociated! 日志里頻繁full gc &#xff0c;可以…

Python Opencv實踐 - 圖像金字塔

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape)#圖像上采樣 #cv.pyrUp(src, dstNone, dstsizeNone, borderTypeNone) #參考資料&#xff1a;https://blo…

js實現將文本轉PDF格式并下載到本地

html里面需要引入jspdf.umd.min.js和FileSaver.js jspdf.umd.min.js&#xff1a;https://www.npmjs.com/package/jspdf FileSaver.js&#xff1a;https://download.csdn.net/download/weixin_45791806/87272893?spm1001.2014.3001.5503 同時項目的根部目錄也需要引入SimHei.tt…

單片機之從C語言基礎到專家編程 - 4 C語言基礎 - 4.7 進制及其轉換

進制是數字的進位計數制&#xff0c;R進制也就是逢R進一。計算機只能識別二進制&#xff0c;也就是逢二進一&#xff0c;例如&#xff0c;11在十進制中為2&#xff0c;在二進制中逢2進1&#xff0c;則為10。以下為進制表示表。 二進制三進制八進制九進制十進制十六進制0000001…

【LeetCode 算法】Find the Losers of the Circular Game 找出轉圈游戲輸家

文章目錄 Find the Losers of the Circular Game 找出轉圈游戲輸家問題描述&#xff1a;分析代碼模擬 Tag Find the Losers of the Circular Game 找出轉圈游戲輸家 問題描述&#xff1a; n 個朋友在玩游戲。這些朋友坐成一個圈&#xff0c;按 順時針方向 從 1 到 n 編號。從…

AD域控制器將輔域控制器角色提升為主域控制器

背景 域控服務器遷移&#xff0c;已將新機器添加為該域的輔域控制器。 主域控制器&#xff1a;test-dc-01 輔域控制器&#xff1a;test-dc-02 需求將主輔域的角色進行互換&#xff0c;test-dc-01更換為輔域&#xff0c;test-dc-02更換為主域。 操作步驟 方法1 命令行修改AD域…

Datawhale Django入門組隊學習Task02

Task02 首先啟動虛擬環境&#xff08;復習一下之前的&#xff09; 先退出conda的&#xff0c; conda deactivate然后cd到我的venv下面 &#xff0c;然后cd 到 scripts&#xff0c;再 activate &#xff08;powershell里面&#xff09; 創建admin管理員 首先cd到項目路徑下&a…

mySQL 視圖 VIEW

簡化版的創建視圖 create view 視圖名 as select col ...coln from 表create view 視圖名&#xff08;依次別名&#xff09; as select col ...coln from 表create view 視圖名 as select col “別名1”&#xff0c;。。。col "別名n" from 表show tab…

Flink的常用算子以及實例

1.map 特性&#xff1a;接收一個數據&#xff0c;經過處理之后&#xff0c;就返回一個數據 1.1. 源碼分析 我們來看看map的源碼 map需要接收一個MapFunction<T,R>的對象&#xff0c;其中泛型T表示傳入的數據類型&#xff0c;R表示經過處理之后輸出的數據類型我們繼續往…

計算機提示vcruntime140_1.dll丟失的解決方法

在使用Windows操作系統時&#xff0c;有時候我們可能會遇到一些應用程序無法正常運行的問題&#xff0c;出現錯誤提示&#xff0c;其中之一可能就是缺少或損壞了vcruntime140_1.dll文件。在遇到這種情況時&#xff0c;我們可以嘗試修復vcruntime140_1.dll文件來解決問題。 先科…

后端 springboot 給 vue 提供參數

前端 /** 發起新增或修改的請求 */requestAddOrEdit(formData) {debuggerif(formData.id undefined) {formData.id }getAction(/material/getNameModelStandard, {standard: this.model.standard,name: this.model.name,model: this.model.model}).then((res) > {if (res …

《零基礎7天入門Arduino物聯網-06》程序基礎-編程語言是什么

配套視頻課程&#xff1a;《零基礎學Arduino物聯網&#xff0c;入門到進階》 配套課件資料獲取&#xff1a;微聯實驗室 配套學習套件購買&#xff1a;淘寶搜索店鋪【微聯實驗室】 程序基礎-編程語言是什么 程序是什么 程序設計可以理解為是用計算機語言創造出一系列指令的過程…

Shell 基本運算符

Shell 基本運算符 Shell 和其他編程語言一樣&#xff0c;支持多種運算符&#xff0c;包括&#xff1a; 算數運算符關系運算符布爾運算符字符串運算符文件測試運算符 原生bash不支持簡單的數學運算&#xff0c;但是可以通過其他命令來實現&#xff0c;例如 awk 和 expr&#…

HuggingFace開源的自然語言處理AI工具平臺

HuggingFace是一個開源的自然語言處理AI工具平臺&#xff0c;它為NLP的開發者和研究者提供了一個簡單、快速、高效、可靠的解決方案&#xff0c;讓NLP變得更加簡單、快速、高效、可靠。 Hugging Face平臺主要包括以下幾個部分&#xff1a; Transformers&#xff1a;一個提供了…

期權定價模型系列【5】—ETF期權數據

1.前言 對期權定價模型進行研究時&#xff0c;往往需要匹配的實際數據&#xff0c;國內上市時間超過兩年、主流的ETF期權包括華夏上證50ETF期權、滬深300ETF期權等&#xff0c;其對應的標的資產分別為華夏上證50ETF、華泰柏瑞滬深300ETF、嘉實滬深300ETF。 2.上證50ETF期權合約…

淺析基于視頻匯聚與AI智能分析的新零售方案設計

一、行業背景 近年來&#xff0c;隨著新零售概念的提出&#xff0c;國內外各大企業紛紛布局智慧零售領域。從無人便利店、智能售貨機&#xff0c;到線上線下融合的電商平臺&#xff0c;再到通過大數據分析實現精準推送的個性化營銷&#xff0c;智慧零售的觸角已經深入各個零售…

數組常用方法總結

數組常用方法總結 一.獲取數組長度1.1 使用length 二.數組轉字符串2.1 Arrays是什么2.2 使用toString() 三. 數組拷貝3.1 使用 copyOf()3.2 copyOfRange() 四.數組排序4.1使用 sort() 五. 數組逆序六. 判斷兩個數組是否相等6.1 使用equals() 一.獲取數組長度 1.1 使用length p…

ArrayList

目錄 1.ArrayList簡介 2.ArrayList的構造 2.1ArrayList() 2.2ArrayList(Collection c) 2.3ArrayList(int initialCapacity) 3.ArrayList常見操作 4.ArrayList的遍歷的遍歷 1.ArrayList簡介 在集合框架中&#xff0c; ArrayList 是一個普通的類&#xff0c;實現了 List…