郭遇強(qiáng), 趙豪翔, 陳思源, 張 斌
(鄭州大學(xué) 地球科學(xué)與技術(shù)學(xué)院, 鄭州 450001)
由于時(shí)間和空間等多種因素影響,校園許多教室的空間沒(méi)有得到合理的利用。 例如,學(xué)校一些教室人滿為患,而一些教室卻只有寥寥數(shù)人;有些時(shí)間段教室人數(shù)比較少,而有些時(shí)間段卻比較擁擠,以至于沒(méi)有位置提供給學(xué)生自習(xí)。 但在很多情況下,學(xué)生在前往自習(xí)室之前卻無(wú)法得知自習(xí)室的使用情況,不利于選擇合適的自習(xí)室。 這就對(duì)學(xué)生學(xué)習(xí)造成了些許不便,同時(shí)降低了校園內(nèi)的教室空間資源利用率。 考慮到教室內(nèi)都配有攝像頭,能夠提供實(shí)時(shí)的攝像機(jī)圖像,如此一來(lái)則為改善該問(wèn)題提供了思路和必要的數(shù)據(jù)基礎(chǔ)。
研究可知,如果需要準(zhǔn)確獲取自習(xí)室的人數(shù),通過(guò)攝像頭視頻數(shù)據(jù)進(jìn)行人的識(shí)別是很重要的一項(xiàng)工作,也是后續(xù)各項(xiàng)研究的基礎(chǔ),其運(yùn)行速度、準(zhǔn)確率等指標(biāo)都會(huì)影響分析應(yīng)用的效果[1]。 2014 年,RCNN 將PASCAL VOC 2012[2]數(shù)據(jù)集上的驗(yàn)證指標(biāo)提升了30%,成功將深度學(xué)習(xí)應(yīng)用到了目標(biāo)檢測(cè)領(lǐng)域[3],在該領(lǐng)域內(nèi)識(shí)別圖片中的人逐漸成為熱門的研究?jī)?nèi)容。 最近幾年,研究者們提出了許多不同的、適用于各種場(chǎng)景的模型,在識(shí)別人的準(zhǔn)確度和速度中取得了可觀的進(jìn)展。
當(dāng)前,基于深度學(xué)習(xí)目標(biāo)檢測(cè)算法模型主要分為基于候選框生成與分類的two-stage[4-5]方法和基于回歸的one-stage 方法[6]。 其中,two-stage 方法是在產(chǎn)生一系列候選框的基礎(chǔ)上進(jìn)行回歸和分類,代表性成果是最早將深度學(xué)習(xí)應(yīng)用在目標(biāo)檢測(cè)領(lǐng)域的R-CNN[7]算法,使用了卷積神經(jīng)網(wǎng)絡(luò)對(duì)感興趣的區(qū)域進(jìn)行特征提取,但是其選擇性過(guò)程無(wú)法通過(guò)GPU 等并行計(jì)算設(shè)備進(jìn)行加速,會(huì)分別提取每個(gè)區(qū)域的特征,造成重復(fù)計(jì)算,訓(xùn)練耗時(shí)費(fèi)力。 隨后,研究人員提出了SPP-Net[8]、Fast R-CNN[9]等算法,加強(qiáng)了部分之間的聯(lián)系,提升了檢測(cè)的速度。 而one-stage 方法略過(guò)了候選框這一步驟,采用卷積神經(jīng)網(wǎng)絡(luò)對(duì)圖像數(shù)據(jù)進(jìn)行卷積操作,直接進(jìn)行特征提取并進(jìn)行分類,雖然精確度比two-stage 方法略低,但大大提升了目標(biāo)識(shí)別速度,代表性成果為YOLO算法[10-11],這是將對(duì)象檢測(cè)視為一個(gè)回歸問(wèn)題、而不是一個(gè)分類問(wèn)題,使用單個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)完成檢測(cè)對(duì)象的所有階段,大大提高了檢測(cè)速度,除此以外,還可以被訓(xùn)練來(lái)檢測(cè)不同的對(duì)象。 目前,主流算法的優(yōu)缺點(diǎn)及使用場(chǎng)景見表1。

表1 目標(biāo)檢測(cè)算法優(yōu)缺點(diǎn)及適用場(chǎng)景[12]Tab. 1 Advantages, disadvantages and applicable scenarios of target detection algorithm[12]
通過(guò)分析各種算法模型特點(diǎn)可知,YOLOv5 算法網(wǎng)絡(luò)結(jié)構(gòu)簡(jiǎn)單、檢測(cè)速度快,能較好地滿足室內(nèi)區(qū)域?qū)θ梭w目標(biāo)的識(shí)別。 本文設(shè)計(jì)采用YOLOv5 的預(yù)訓(xùn)練模型作為目標(biāo)檢測(cè)算法模型,使用OpenCVPython 模塊的VideoCapture 子模塊獲取待處理圖像。 系統(tǒng)后端采用圖像處理方法,應(yīng)用YOLOv5 網(wǎng)絡(luò)模型處理教室視頻,計(jì)算其中的人數(shù),并允許學(xué)生對(duì)教室和人數(shù)進(jìn)行查詢,從而方便學(xué)生根據(jù)自身需要,靈活地選擇自己想要前往的教室。 系統(tǒng)前端利用百度地圖JavaScript API[13]構(gòu)建交互地圖,使用HTML、CSS、JavaScript[14]搭建頁(yè)面。
自從2016 年Redmon 等學(xué)者[15]提出目標(biāo)識(shí)別領(lǐng)域的YOLOv1 模型開始,YOLO 系列便不斷推陳出新,直到2020 年推出YOLOv5 模型,模型性能最佳,體積更小,版本已相當(dāng)成熟,更加適合實(shí)際工程的應(yīng)用,而且可以通過(guò)PyTorch 輕松完成部署與實(shí)現(xiàn)。 YOLOv5 的網(wǎng)絡(luò)結(jié)構(gòu)主要由輸入端、Backone、Neck 以及Prediction 四部分組成,如圖1 所示。

圖1 YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)[16]Fig. 1 Network structure of YOLOv5[16]
由圖1 可知,輸入端表示輸入的圖片或視頻幀,為了方便后續(xù)的圖像處理,該階段會(huì)對(duì)輸入的圖像進(jìn)行預(yù)處理,將圖像縮放到網(wǎng)絡(luò)的輸入大小后再做歸一化處理。 Backbone 部分主要用于從圖片中提取信息和特征,以供后續(xù)的網(wǎng)絡(luò)使用。 YOLOv5 使用CSPDarknet 作為Backbone,CSPNet 解決了其他大型卷積神經(jīng)網(wǎng)絡(luò)框架Backbone 中網(wǎng)絡(luò)優(yōu)化的梯度信息重復(fù)問(wèn)題,將梯度的變化從頭到尾地集成到特征圖中,因此減少了模型的參數(shù)量和FLOPS數(shù)值,既保證了推理速度和準(zhǔn)確率,又減小了模型尺寸。 Neck 網(wǎng)絡(luò)部分通常位于Backone 網(wǎng)絡(luò)部分和Prediction 部分的中間位置,可用來(lái)進(jìn)一步提升特征的多樣性。 Prediction 部分用來(lái)完成目標(biāo)檢測(cè)結(jié)果的輸出。 針對(duì)不同的檢測(cè)算法,輸出端的分支個(gè)數(shù)不盡相同,通常包含一個(gè)分類分支和一個(gè)回歸分支。
相較于前期成果,YOLOv5 在如下方面進(jìn)行了提高和改善:
(1)輸入端。 通過(guò)使用Mosaic 數(shù)據(jù)增強(qiáng)的方式來(lái)豐富數(shù)據(jù)集和提高訓(xùn)練速度,該方式是在CutMix數(shù)據(jù)增強(qiáng)方法的基礎(chǔ)上改進(jìn)而來(lái),相較于CutMix 數(shù)據(jù)增強(qiáng)方法的2 張圖片,Mosaic 數(shù)據(jù)增強(qiáng)方法采用了4 張圖片,按照隨機(jī)縮放、隨機(jī)裁剪和隨機(jī)排布的方式進(jìn)行拼接而成,適用面更廣,同時(shí)通過(guò)自適應(yīng)錨框計(jì)算和自適應(yīng)圖片縮放來(lái)提高算法的適用度和推算速度。
(2)Backbone 部分。 采用Focus 結(jié)構(gòu)和CSP 結(jié)構(gòu)增強(qiáng)了CNN 的學(xué)習(xí)能力,在確保準(zhǔn)確率的情況下減少了計(jì)算量,并降低了內(nèi)存成本。
(3)Neck 部分。 YOLOv5 的Neck 和YOLOv4中一樣,都采用FPN +PAN 的結(jié)構(gòu)。 YOLOv4 的Neck 結(jié)構(gòu)中,采用的都是普通的卷積操作。 而YOLOv5 的Neck 結(jié)構(gòu)中,采用借鑒CSPNet 設(shè)計(jì)的CSP2 結(jié)構(gòu),加強(qiáng)網(wǎng)絡(luò)特征融合的能力。
(4)Prediction 部分。 采用GIoU_Loss[17]作為Bounding box 的損失函數(shù)。 該方法不僅簡(jiǎn)單,還具有尺度不變性。
目前, YOLOv5 的目標(biāo)檢測(cè)網(wǎng)絡(luò)主要有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x 等4 個(gè)主要模型,各模型計(jì)算速度和檢測(cè)精度如圖2 所示。本文采用YOLOv5s 網(wǎng)絡(luò)模型,該模型是YOLOv5 中各類模型的基礎(chǔ),具有深度最小、計(jì)算速度最快的優(yōu)點(diǎn),能很好地滿足系統(tǒng)對(duì)運(yùn)算速度的要求,其它的網(wǎng)絡(luò)模型都是在該模型的基礎(chǔ)上對(duì)網(wǎng)絡(luò)的加深與加寬。

圖2 YOLOv5 的主要模型及其性能(基于COCO 數(shù)據(jù)集)[18]Fig. 2 Main models and performance of YOLOv5 (based on COCO data set)[18]
按照“高內(nèi)聚、低耦合”的設(shè)計(jì)思想,將系統(tǒng)分為表現(xiàn)層、業(yè)務(wù)層、數(shù)據(jù)層三層架構(gòu),分工明確,每層內(nèi)功能集中,層與層之間相互獨(dú)立,便于維護(hù)。 具體架構(gòu)如圖3 所示。 這里對(duì)此將給出如下闡釋論述如下。

圖3 系統(tǒng)架構(gòu)圖Fig. 3 System architecture
(1)數(shù)據(jù)層、即系統(tǒng)所需的數(shù)據(jù)庫(kù)。 包含教室位置信息、教室人數(shù)、教室可承載的最大人數(shù)、教學(xué)樓的課表。 教室位置與教室最大承載人數(shù)需開發(fā)人員提前錄入。
(2)業(yè)務(wù)層。 通過(guò)連接數(shù)據(jù)庫(kù),獲取教室的信息與課表。 對(duì)課表進(jìn)行查詢與修改操作,對(duì)教室的信息進(jìn)行查詢與更新。
(3)表現(xiàn)層。 為展示給用戶的界面,用戶可以通過(guò)查詢功能獲知目的地教學(xué)樓當(dāng)前時(shí)段有哪些較為空閑的教室,并獲知教室當(dāng)前人數(shù)與最大承載數(shù),從而決定前往哪間教室。 管理員可通過(guò)地圖交互,對(duì)特定教學(xué)樓內(nèi)的攝像頭進(jìn)行瀏覽,并可在Web 頁(yè)面根據(jù)不同專業(yè)的課表信息及時(shí)修改教學(xué)樓課表,保證信息的實(shí)時(shí)性、準(zhǔn)確性。
數(shù)據(jù)庫(kù)的功能是對(duì)空閑教室查詢提供數(shù)據(jù)支撐,實(shí)現(xiàn)對(duì)數(shù)據(jù)的存儲(chǔ)、維護(hù)和查詢等功能。 根據(jù)用戶查詢的需要構(gòu)建系統(tǒng)數(shù)據(jù)庫(kù),設(shè)置教學(xué)樓課表與教室信息表。
教學(xué)樓課表采用教學(xué)樓名稱作為表名,也就是一棟樓即為數(shù)據(jù)庫(kù)中的一張表,以星期作為該表一條記錄的關(guān)鍵字,按照每天10 節(jié)小課分為10 個(gè)時(shí)間段。 該表需要集合不同專業(yè)的上課需求,統(tǒng)計(jì)出每天哪個(gè)時(shí)段的哪間教室沒(méi)有上課需求,按照“教室樓/教室編號(hào)”的格式提前錄入,即表示當(dāng)天該時(shí)段該教學(xué)樓內(nèi)的所有空閑教室。 若某一時(shí)間段有上課需求,則表中以空值“NULL”填入。 無(wú)課表的結(jié)構(gòu)見表2。

表2 教學(xué)樓課表數(shù)據(jù)結(jié)構(gòu)圖Tab. 2 Class schedule data structure of teaching buildings
教室位置、教室人數(shù)、教室最大承載人數(shù)集中顯示在同一張表中,其中教室位置按照“教學(xué)樓/教室編號(hào)”的格式進(jìn)行錄入,作為一條記錄的關(guān)鍵字,為了避免調(diào)用數(shù)據(jù)時(shí)由于不同編碼導(dǎo)致的中文亂碼問(wèn)題,因此在錄入時(shí)統(tǒng)一以英文方式錄入。 教室信息表結(jié)構(gòu)見表3。

表3 教室信息數(shù)據(jù)結(jié)構(gòu)圖Tab. 3 Classroom information data structure
OpenCV-Python 模塊的VideoCapture 子模塊對(duì)MP4 格式有著良好的支持,可以直接獲取指定幀數(shù)并保存。 利用該模塊,將視頻按幀循環(huán)讀取,將當(dāng)前視頻幀以.jpeg 格式進(jìn)行存儲(chǔ),對(duì)存儲(chǔ)路徑進(jìn)行設(shè)置,使路徑中包含圖片所對(duì)應(yīng)的教室位置。 具體流程如圖4 所示。

圖4 獲取人數(shù)流程圖Fig. 4 Flow chart of obtaining the number of people
調(diào)用YOLOv5 對(duì)保存的圖片進(jìn)行處理,即可得到截取圖片時(shí)刻的人數(shù)信息。 通過(guò)設(shè)置后綴為.pt的模型包文件、識(shí)別類型等參數(shù),為了能在框架運(yùn)行時(shí)同步調(diào)用控制臺(tái),利用Python 的OS 模塊的popen子模塊,該模塊允許開發(fā)者在Python 內(nèi)直接運(yùn)行控制臺(tái)命令。 根據(jù)保存的圖片路徑,構(gòu)建命令行提示符(cmd)命令,處理結(jié)果如圖5 所示。

圖5 測(cè)試圖片處理結(jié)果Fig. 5 Test image processing results
圖5 中,將所有符合條件的人全部框出,標(biāo)識(shí)框上方為置信度,該數(shù)字代表標(biāo)識(shí)框內(nèi)區(qū)域中存在人的概率,概率越大,準(zhǔn)確性越高。 遍歷所有標(biāo)識(shí)框,設(shè)置參數(shù),過(guò)濾置信度較低的標(biāo)識(shí)框,統(tǒng)計(jì)符合目標(biāo)檢測(cè)結(jié)果的數(shù)目,即為當(dāng)前畫面中的人數(shù)。
獲取人數(shù)信息后,根據(jù)圖片路徑中所包含的位置信息,構(gòu)建SQL 語(yǔ)句[19]更新數(shù)據(jù)庫(kù)中的人數(shù)信息。 當(dāng)沒(méi)有人在圖片中時(shí),該模型會(huì)返回空值,此時(shí)對(duì)空值進(jìn)行替換,將整型0 代替空值存入數(shù)據(jù)庫(kù)中。
本次實(shí)驗(yàn)的運(yùn)行環(huán)境:CPU 為Intel core i5 6300HQ,內(nèi)存為8 G,操作系統(tǒng)為Windows 10,開發(fā)語(yǔ)言為Python,Pytorch 的CPU 版框架。
YOLOv5 自身模型文件的構(gòu)建基于COCO 數(shù)據(jù)集[20],COCO 數(shù)據(jù)集是微軟公司于2014 年出資標(biāo)注的Microsoft COCO 數(shù)據(jù)集,該數(shù)據(jù)集是一個(gè)大型的物體檢測(cè)數(shù)據(jù)集。 本文通過(guò)手機(jī)在自習(xí)室錄制了學(xué)生自習(xí)時(shí)的視頻,按幀截取視頻,獲得總計(jì)300 張教室圖片作為測(cè)試數(shù)據(jù)集,每張圖像的分辨率大小為1920×1080。
2.2.1 圖片處理結(jié)果分析
單張圖片處理結(jié)果如圖6 所示。 從圖6 中可以看出,大部分人員可以準(zhǔn)確識(shí)別并標(biāo)出,但部分人員無(wú)法識(shí)別出來(lái)。 產(chǎn)生此誤差的原因是YOLOv5 自身的識(shí)別誤差。

圖6 單張圖片處理結(jié)果Fig. 6 Single picture processing result
多次重復(fù)實(shí)驗(yàn),得到每一次處理的準(zhǔn)確率,制作圖表如圖7 所示。 從圖7 中可以看出,每次處理前后結(jié)果并不相同,但總體準(zhǔn)確率穩(wěn)定在80% ~100%之間,可以滿足日常生活中自習(xí)室檢測(cè)人數(shù)的需求。

圖7 圖片處理準(zhǔn)確率Fig. 7 Processing accuracy of the image
每次處理圖片所需時(shí)間如圖8 所示,由于Python 為動(dòng)態(tài)類型語(yǔ)言,在相同硬件條件下,每次處理同一段代碼所需時(shí)間不一致。 每次處理時(shí)間均在4 s 內(nèi),表示該框架處理圖片所需時(shí)間短,處理速度快,可以滿足實(shí)際應(yīng)用的時(shí)間效率需求。
2.2.2 管理功能測(cè)試
管理員在瀏覽界面能夠在學(xué)校地圖上選擇任意教學(xué)樓,且可以查看當(dāng)前教室人數(shù)概況以及該攝像頭下的監(jiān)控畫面中的人數(shù),監(jiān)控畫面如圖9 所示。測(cè)試得到的瀏覽界面中,使用進(jìn)度條概括顯示當(dāng)前人數(shù)占教室可以承載的總?cè)藬?shù)的比例,圖9 顯示本系統(tǒng)相應(yīng)功能實(shí)現(xiàn)完整,操作能夠順利準(zhǔn)確運(yùn)行。

圖9 攝像頭瀏覽界面Fig. 9 Camera browsing interface
2.2.3 查詢功能測(cè)試
用戶選擇目的地與自習(xí)時(shí)間,系統(tǒng)將根據(jù)用戶的查詢要求,結(jié)合當(dāng)前各個(gè)自習(xí)室的人數(shù)情況和各個(gè)教室的排課情況,得出符合用戶需求的自習(xí)室列表,以供用戶選擇。 其具體查詢界面如圖10 所示。圖10 表明,本系統(tǒng)能夠正確完成相應(yīng)的查詢操作,并且,將教室當(dāng)前人數(shù)少于最大人數(shù)的一半的教室置為綠色,大于最大人數(shù)的一半置為紅色,幫助用戶可以更快地確定自己的目的地。

圖10 查詢結(jié)果Fig. 10 Query results
本文從校園自習(xí)室空間利用的角度出發(fā),通過(guò)視頻攝像頭獲取影像數(shù)據(jù),引入深度學(xué)習(xí)的計(jì)算方法,介紹了基于YOLOv5 的自習(xí)室人數(shù)監(jiān)控與查詢系統(tǒng)的設(shè)計(jì)思路、具體實(shí)現(xiàn)及應(yīng)用試驗(yàn)等內(nèi)容。 系統(tǒng)使用OpenCV-Python 模塊的VideoCapture 子模塊,調(diào)用YOLOv5 算法處理視頻幀,上傳至數(shù)據(jù)庫(kù),同時(shí)通過(guò)調(diào)用數(shù)據(jù)庫(kù),將結(jié)果以網(wǎng)頁(yè)端的形式展現(xiàn)出來(lái),整個(gè)流程從視頻幀處理到數(shù)據(jù)庫(kù)數(shù)據(jù)更新,最后到網(wǎng)頁(yè)端刷新顯示僅需數(shù)分鐘,對(duì)于短時(shí)間內(nèi)人流量變動(dòng)較小的公共空間,諸如自習(xí)室、圖書館等,有著較好的應(yīng)用前景,能夠加強(qiáng)對(duì)自習(xí)室的管理,給學(xué)生們尋找自習(xí)室提供幫助,提高自習(xí)室的使用效率。 后續(xù)將進(jìn)一步對(duì)系統(tǒng)加以改進(jìn)完善,在獲取實(shí)時(shí)監(jiān)控影像基礎(chǔ)上優(yōu)化數(shù)據(jù)流程及代碼,縮短整個(gè)過(guò)程所需要的時(shí)間,以利于應(yīng)用到更多場(chǎng)景中。