基于深度學(xué)習(xí)的人群密度檢測系統(tǒng)(UI界面+YOLOv5+訓(xùn)練數(shù)據(jù)集)
摘要:人群密度檢測系統(tǒng)用于檢測行人數(shù)目,從圖片、視頻、攝像設(shè)備等圖像中分析,對路口、商場等場所的人流量進行自動化檢測。在介紹算法原理的同時,給出Python的實現(xiàn)代碼、PyQt的UI界面以及訓(xùn)練數(shù)據(jù)集。人群密度檢測系統(tǒng)主要用于日常商場、路口等需要控制人流量的場所,利用深度學(xué)習(xí)YOLOv5檢測行人數(shù)目,并計算區(qū)域內(nèi)的行人密度,人群聚集程度高時及時做出智能化提醒和疏導(dǎo);可對圖片、視頻、攝像設(shè)備得到的圖像進行分析,自動標記和記錄檢測結(jié)果;深度學(xué)習(xí)模型可方便切換和更新,已針對不同場景進行模型調(diào)整;提供用戶登錄注冊功能,方便用戶管理和使用;檢測結(jié)果易于查看、記錄和保存。博文提供了完整的Python代碼和使用教程,適合新入門的朋友參考,完整代碼資源文件請轉(zhuǎn)至文末的下載鏈接。

完整代碼下載:https://mbd.pub/o/bread/ZJaXlJ1x
參考視頻演示:https://www.bilibili.com/video/BV1bX4y1f78s/
離線依賴庫下載鏈接:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

前言
????????近年來,隨著公共交通的不斷發(fā)展,選擇軌道交通等方式出行的人數(shù)亦隨之增多,擁擠環(huán)境下容易發(fā)生踩踏事件。另外娛樂活動日漸豐富,大規(guī)模人群聚集的情況也越來越普遍,也會存在沖撞踩踏等事件發(fā)生;而疫情期間,需禁止人員聚集,防止疫情傳播。對于公共活動中人群密集程度的監(jiān)測,目前人工識別視頻監(jiān)控的方式難以全天候值守,因此利用智能圖像識別系統(tǒng)檢測人群密度的方法也成為解決此類問題的方案。人群密度檢測系統(tǒng)是依托智能 AI 技術(shù)而研發(fā)的軟件,在可設(shè)置的區(qū)域面積內(nèi),對人員數(shù)量進行識別和統(tǒng)計,從而計算人群聚集密度。人群密度檢測系統(tǒng)廣泛用于人群密集場合,這里博主分享個人原創(chuàng)開發(fā)的人群密度檢測系統(tǒng)小項目,供大家參考學(xué)習(xí)了。
????????這里給出博主設(shè)計的軟件界面,一貫的簡約風(fēng)哈哈,功能也可以滿足圖片、視頻和攝像頭的識別檢測,初始界面如下圖:

????????檢測人流密度時的界面截圖(點擊圖片可放大)如下圖,可識別畫面中存在的多個人,也可開啟攝像頭或視頻檢測:

???????? 詳細的功能演示效果參見博主的B站視頻或下一節(jié)的動圖演示,覺得不錯的朋友敬請點贊、關(guān)注加收藏!系統(tǒng)UI界面的設(shè)計工作量較大,界面美化更需仔細雕琢,大家有任何建議或意見和可在下方評論交流。
1.?效果演示
????????軟件好不好用,顏值很重要,首先我們還是通過動圖看一下識別的效果,系統(tǒng)主要實現(xiàn)的功能是對圖片、視頻和攝像頭畫面中的人群密度進行識別,識別的結(jié)果可視化顯示在界面和圖像中,另外提供多個人的顯示選擇功能,演示效果如下。本系統(tǒng)界面上顯示的所有文字、圖標、圖片均可自行修改,修改方式可見上面的視頻介紹。
(一)用戶注冊登錄界面
????????這里設(shè)計了一個登錄界面,可以注冊賬號和密碼,然后進行登錄。界面還是參考了當(dāng)前流行的UI設(shè)計,右側(cè)輸入賬號和密碼。

(二)人群密度圖片識別
????????系統(tǒng)允許選擇圖片文件進行識別,點擊圖片選擇按鈕圖標選擇圖片后,顯示所有行人檢測計數(shù)的結(jié)果,可通過下拉選框查看單個的結(jié)果。本功能的界面展示如下圖所示:

(三)人群密度視頻識別效果展示
????????很多時候我們需要識別一段視頻中的人屬性,這里設(shè)計了視頻選擇功能。點擊視頻按鈕可選擇待檢測的視頻,系統(tǒng)會自動解析視頻逐幀識別人,并將結(jié)果記錄在右下角表格中,效果如下圖所示:

(四)攝像頭檢測效果展示
????????在真實場景中,我們往往利用設(shè)備攝像頭獲取實時畫面,因此本文考慮到此項功能。如下圖所示,點擊攝像頭按鈕后系統(tǒng)進入準備狀態(tài),系統(tǒng)顯示實時畫面并開始檢測畫面中的人,識別結(jié)果展示如下圖:

2.?人群密度檢測系統(tǒng)
????????傳統(tǒng)的人群計數(shù)及密度檢測的方法具有一定局限性,無法從圖像中提取更抽象的有助于完成行人檢測任務(wù)的語義特征,使得面對背景復(fù)雜、人群密集、遮擋嚴重的場景時,計數(shù)精度無法滿足實際需求。近年來,深度學(xué)習(xí)技術(shù)發(fā)展迅猛,在許多計算機視覺任務(wù)中得到成功應(yīng)用,促使研究人員開始探索基于卷積神經(jīng)網(wǎng)絡(luò)的人群計數(shù)辦法.相比于傳統(tǒng)方法,基于CNN的人群計數(shù)方法在處理場景適應(yīng)性、尺度多樣性等問題時表現(xiàn)更優(yōu)。而且由于特征是自學(xué)習(xí)的,不需要人工選取,可以顯著提升計數(shù)效果,因此已經(jīng)成為當(dāng)前人群計數(shù)領(lǐng)域的研究熱點。
(一)YOLOv5的基本原理
????????本文所使用的模型基于YoloV5算法,該方法在減少計算量和加快推理速度上較其他算法有了很大提升,主要技術(shù)包括以下幾個方面。

????????(1)Focus結(jié)構(gòu):Focus網(wǎng)絡(luò)結(jié)構(gòu)具體操作是在一張圖片中每隔一個像素拿到一個值,這個時候獲得了四個獨立的特征層,然后將四個獨立的特征層進行堆疊,此時寬高信息就集中到了通道信息,輸入通道擴充了四倍。該結(jié)構(gòu)在YoloV5第5版之前有所應(yīng)用,最新版本中未使用。
???????? (2)數(shù)據(jù)增強:Mosaic數(shù)據(jù)增強、Mosaic利用了四張圖片進行拼接實現(xiàn)數(shù)據(jù)中增強,根據(jù)論文所說其擁有一個巨大的優(yōu)點是豐富檢測物體的背景!且在BN計算的時候一下子會計算四張圖片的數(shù)據(jù)!

???????? (3)多正樣本匹配:在之前的Yolo系列里面,在訓(xùn)練時每一個真實框?qū)?yīng)一個正樣本,即在訓(xùn)練時,每一個真實框僅由一個先驗框負責(zé)預(yù)測。YoloV5中為了加快模型的訓(xùn)練效率,增加了正樣本的數(shù)量,在訓(xùn)練時,每一個真實框可以由多個先驗框負責(zé)預(yù)測。
????????(4)主干網(wǎng)絡(luò):YoloV5所使用的主干特征提取網(wǎng)絡(luò)為CSPDarknet,它使用了殘差網(wǎng)絡(luò)Residual,CSPDarknet中的殘差卷積可以分為兩個部分,主干部分是一次1X1的卷積和一次3X3的卷積;殘差邊部分不做任何處理,直接將主干的輸入與輸出結(jié)合。代碼如下:
(二)行人檢測數(shù)據(jù)集及訓(xùn)練過程
????????這里我們使用的人群數(shù)據(jù)集來自于CUHK Occlusion Dataset,該數(shù)據(jù)集用于研究活動分析和擁擠場景, 包含1063 張有遮擋的行人圖像,并提供有標記文件,所有標簽已轉(zhuǎn)換至YOLO適用的txt格式,部分截圖如下圖所示。

????????每張圖像均提供了圖像類標記信息,圖像中行人的bounding box,數(shù)據(jù)集并解壓后得到如下的圖片

????????然后我們可以執(zhí)行train.py程序進行訓(xùn)練。在深度學(xué)習(xí)中,我們通常通過損失函數(shù)下降的曲線來觀察模型訓(xùn)練的情況。而YOLOv5訓(xùn)練時主要包含三個方面的損失:矩形框損失(box_loss)、置信度損失(obj_loss)和分類損失(cls_loss),在訓(xùn)練結(jié)束后,我們也可以在logs目錄下找到生成對若干訓(xùn)練過程統(tǒng)計圖。下圖為博主訓(xùn)練人群識別的模型訓(xùn)練曲線圖。

????????一般我們會接觸到兩個指標,分別是召回率recall和精度precision,兩個指標p和r都是簡單地從一個角度來判斷模型的好壞,均是介于0到1之間的數(shù)值,其中接近于1表示模型的性能越好,接近于0表示模型的性能越差,為了綜合評價目標檢測的性能,一般采用均值平均密度map來進一步評估模型的好壞。我們通過設(shè)定不同的置信度的閾值,可以得到在模型在不同的閾值下所計算出的p值和r值,一般情況下,p值和r值是負相關(guān)的,繪制出來可以得到如下圖所示的曲線,其中曲線的面積我們稱AP,目標檢測模型中每種目標可計算出一個AP值,對所有的AP值求平均則可以得到模型的mAP值,
????????在訓(xùn)練完成后得到最佳模型,接下來我們將幀圖像輸入到這個網(wǎng)絡(luò)進行預(yù)測,從而得到預(yù)測結(jié)果,其中預(yù)測方法(predict.py)部分的代碼如下所示:
????????得到預(yù)測結(jié)果我們便可以將幀圖像中的行人框出,然后在圖片上用opencv繪圖操作,預(yù)定義當(dāng)前視野區(qū)域的面積,然后根據(jù)預(yù)測出的目標個數(shù)計算當(dāng)前畫面中的行人密度。以下是讀取行人圖片并進行檢測的腳本,首先將圖片數(shù)據(jù)進行預(yù)處理后送predict進行檢測,然后計算標記框的位置并在圖中標注出來。
????????執(zhí)行得到的結(jié)果如下圖所示,圖中行人和置信度值都標注出來了,預(yù)測速度較快?;诖四P臀覀兛梢詫⑵浞庋b成一個帶有界面的系統(tǒng),在界面上選擇圖片、視頻或攝像頭然后調(diào)用模型進行檢測。

????????博主對整個系統(tǒng)功能進行了詳細測試,最終開發(fā)出一版流暢得到清新界面,就是博文演示部分的展示,完整的UI界面、測試圖片視頻、代碼文件,以及Python離線依賴包(方便安裝運行,也可自行配置環(huán)境),均已打包上傳,感興趣的朋友可以通過下載鏈接獲取。

下載鏈接
????若您想獲得博文中涉及的實現(xiàn)完整全部程序文件(包括測試圖片、視頻,py, UI文件等,如下圖),這里已打包上傳至博主的面包多平臺,見可參考博客與視頻,已將所有涉及的文件同時打包到里面,點擊即可運行,完整文件截圖如下:

????在文件夾下的資源顯示如下,下面的鏈接中也給出了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟件后,復(fù)制離線依賴包至項目目錄下進行安裝,離線依賴的使用詳細演示也可見本人B站視頻:win11從頭安裝軟件和配置環(huán)境運行深度學(xué)習(xí)項目、Win10中使用pycharm和anaconda進行python環(huán)境配置教程。

注意:該代碼采用Pycharm+Python3.8開發(fā),經(jīng)過測試能成功運行,運行界面的主程序為runMain.py和LoginUI.py,測試圖片腳本可運行testPicture.py,測試視頻腳本可運行testVideo.py。為確保程序順利運行,請按照requirements.txt配置Python依賴包的版本。Python版本:3.8,請勿使用其他版本,詳見requirements.txt文件;
完整資源中包含數(shù)據(jù)集及訓(xùn)練代碼,環(huán)境配置與界面中文字、圖片、logo等的修改方法請見視頻,項目完整文件下載請見參考博客文章里面,或參考視頻的簡介處給出:???
完整代碼下載:https://mbd.pub/o/bread/ZJaXlJ1x
參考視頻演示:https://www.bilibili.com/video/BV1bX4y1f78s/
離線依賴庫下載鏈接:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

界面中文字、圖標和背景圖修改方法:
在Qt Designer中可以徹底修改界面的各個控件及設(shè)置,然后將ui文件轉(zhuǎn)換為py文件即可調(diào)用和顯示界面。如果只需要修改界面中的文字、圖標和背景圖的,可以直接在ConfigUI.config文件中修改,步驟如下:
(1)打開UI_rec/tools/ConfigUI.config文件,若亂碼請選擇GBK編碼打開。
(2)如需修改界面文字,只要選中要改的字符替換成自己的就好。
(3)如需修改背景、圖標等,只需修改圖片的路徑。例如,原文件中的背景圖設(shè)置如下:
可修改為自己的名為background2.png圖片(位置在UI_rec/icons/文件夾中),可將該項設(shè)置如下即可修改背景圖:

結(jié)束語
? ? ? ? 由于博主能力有限,博文中提及的方法即使經(jīng)過試驗,也難免會有疏漏之處。希望您能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴謹?shù)臉幼樱尸F(xiàn)在大家面前。同時如果有更好的實現(xiàn)方法也請您不吝賜教。