高瑋軍,師 陽,楊 杰,張春霞
蘭州理工大學(xué) 計算機與通信學(xué)院,蘭州730050
隨著人口數(shù)量的增多,尤其是在商場、火車站等人口密集的公共區(qū)域,容易引起人員擁堵、推搡踩踏等安全事故。通過視頻監(jiān)控實時統(tǒng)計公共場所的人數(shù),政府部門可以及時安排公安消防等人員對人流進(jìn)行疏散和引導(dǎo),可以有效預(yù)防及減少突發(fā)性的安全問題。
現(xiàn)有的密集人數(shù)統(tǒng)計方法概括為以下兩種實現(xiàn)途徑[1]:基于回歸的人數(shù)統(tǒng)計方法和基于檢測的人數(shù)統(tǒng)計方法。
一種常用的人數(shù)統(tǒng)計方法是基于輸入圖像預(yù)測密度圖訓(xùn)練回歸模型,以像素為單位取整個密度圖的總和來預(yù)測最終人數(shù)。Zhang等[2]設(shè)計了一種簡單有效的多列卷積神經(jīng)網(wǎng)絡(luò)MCNN,從任意密度和任意視角準(zhǔn)確估計單幅圖像中的人數(shù)。Li 等[3]設(shè)計了一個更深的網(wǎng)絡(luò)CSRNet,引入膨脹卷積層作為后端部署,以擴大感受野并提取更深的特征。Jiang等[4]提出的基于Trellis編解碼器網(wǎng)絡(luò)TEDNet。這些算法已經(jīng)取得非常好的結(jié)果,但缺點是對于輸入圖像的分辨率非常敏感,且不考慮密度映射中計數(shù)貢獻(xiàn)來自何處的位置,無法精準(zhǔn)定位。
另一種常用的人數(shù)統(tǒng)計方法是基于檢測的方法。將圖像直接輸入到經(jīng)過預(yù)先訓(xùn)練的目標(biāo)檢測框架中進(jìn)行分類,計算出類別為人的邊界框數(shù)量,以獲得最終的人數(shù)。現(xiàn)有的檢測算法分為以下兩大類:一類是兩階段檢測算法,典型代表為R-CNN[5]、Fast-RCNN[6]、Faster-RCNN[7]等;另一類是一階段檢測算法,典型代表為SSD[8]、YOLO[9]等。但是通過檢測統(tǒng)計人數(shù)通常將整個人體作為檢測對象,由于高矮不一、胖瘦不均等原因,在人口密集的公共區(qū)域很容易出現(xiàn)高遮擋情況導(dǎo)致檢測結(jié)果不佳。
為了解決以上相應(yīng)模型中存在的問題,Gao 等[10]提出用局部部位檢測計數(shù)的方法,利用檢測到的人頭數(shù)目統(tǒng)計人數(shù)。Luo等[11]通過頭肩模型來統(tǒng)計人數(shù)。Vu等[12]提出一種包含三個子模型人頭檢測模型。Peng 等[13]設(shè)計了一種具有兩個檢測器的特征細(xì)化網(wǎng)和級聯(lián)多尺度結(jié)構(gòu)的頭部檢測模型。Vora[1]設(shè)計的FCHD人頭檢測模型能夠?qū)崿F(xiàn)快速準(zhǔn)確的人頭檢測,并適合在嵌入式設(shè)備上運行。Chi 等[14]提出的JointDet 網(wǎng)絡(luò)能夠同時檢測頭部和人體。
本文采用人頭檢測的方法在密集場景中能夠精確定位且有效避免了高遮擋問題,并采用輕量級的網(wǎng)絡(luò)更加適合用于工業(yè)領(lǐng)域搭載嵌入式設(shè)備運行,快速準(zhǔn)確地實現(xiàn)人頭檢測,提高人數(shù)統(tǒng)計的準(zhǔn)確率。本文的研究工作主要有以下兩點:
(1)通過在YOLOv3-tiny網(wǎng)絡(luò)上增加一個尺度改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu),將低層更多包含人頭的特征信息提取出來,與高層語義信息相融合,實現(xiàn)不同卷積層多元信息的分類預(yù)測與位置回歸,提高檢測的精度。
(2)根據(jù)人頭較小且尺度變化不大的特點,結(jié)合有效感受野的思想,采用K-means聚類的方法分析設(shè)置初始候選框,提高候選框的精度。在測試集上對該方法進(jìn)行測試,與改進(jìn)前的方法對比,漏檢率降低,檢測精度和檢測速度均有所提升。
YOLOv3-tiny 是YOLOv3(You Only Look Once)的輕量級版本,作為目前最優(yōu)秀的目標(biāo)檢測架構(gòu)之一,采用回歸的方式做到了真正的端到端檢測,極大地提高了檢測實時性,并且借鑒了FPN 的思想,在多個尺度的融合特征圖上分別獨立做檢測,以輕量級、成本低的優(yōu)點已被廣泛運用于各大工業(yè)中。其主要思想是將輸入圖片劃分為S×S個格子,圖像中的候選區(qū)域個數(shù)為S×S×K,若某個物體ground truth 的中心位置的坐標(biāo)落入到某個柵格,則這個柵格就負(fù)責(zé)檢測出物體。置信度反映是否包含物體以及包含物體情況下位置的準(zhǔn)確性,定義如下:Conf(Object)=Pr(Object)×Pr(Object)表示是否有目標(biāo)物落入候選框?qū)?yīng)的單元格中。若有,單元格對應(yīng)的候選框的置信度為Conf(Object)=;否則,認(rèn)定候選框中沒有目標(biāo)物,即Conf(Object)=0
表示預(yù)測框與真實框的交并比。對存在目標(biāo)物的候選框進(jìn)行人頭檢測,目標(biāo)是人頭的條件概率Pr( )
Person|Object,則候選框中包含人頭的置信度Conf:
對每個候選框預(yù)測其中包含人頭的概率以及邊界框的位置[15],則每個候選框輸出的預(yù)測值為:[X,Y,W,H,,其中X、Y為預(yù)測框中心相對于單元格邊界的偏移,W、H為預(yù)測框?qū)捀呦鄬τ谡鶊D像之比[16]。對于輸入的每幅圖片,最終網(wǎng)絡(luò)輸出為向量:
在實際工業(yè)運用中,較深地提取網(wǎng)絡(luò)容易造成梯度彌散和爆炸問題[17]。本文選取YOLOv3-tiny 網(wǎng)絡(luò)為基礎(chǔ),其優(yōu)點主要是網(wǎng)絡(luò)簡單,計算量小,可以搭載移動端或設(shè)備端運行,但缺點是候選框和分類精度都較低。為解決這一問題,改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu),如圖1所示,通過增加一個尺度,讓網(wǎng)絡(luò)同時學(xué)習(xí)高層的語義信息與低層更多包含人頭特征的信息,更加快速,輕量,端到端地提高人頭檢測的精度。
圖1 MKYOLOv3-tiny網(wǎng)絡(luò)
YOLOv3-tiny 網(wǎng)絡(luò)都會對輸入任意大小的圖像進(jìn)行縮放或剪裁,統(tǒng)一為相同尺度416×416。而Brainwash密集人頭檢測數(shù)據(jù)集中給出每張圖片的大小640×480。如果仍對圖像進(jìn)行縮放或者剪裁,原圖像中人頭的分辨率會減小,這對檢測人頭這類小目標(biāo)有很大的影響,增加檢測的難度。因此修改網(wǎng)絡(luò)參數(shù)中的width 和height為640×480,以此保持輸入圖像的分辨率不變。
在卷積神經(jīng)網(wǎng)絡(luò)中低層特征語義信息較少,但目標(biāo)位置明確;高層特征語義信息較豐富,但目標(biāo)位置信息較粗糙。為了防止圖像通過卷積神經(jīng)網(wǎng)絡(luò)對小目標(biāo)進(jìn)行特征提取時,低層的信息利用不充分而導(dǎo)致部分信息丟失,本文借鑒特征金字塔的多尺度模塊原理,主干網(wǎng)絡(luò)tiny-darknet僅采用一個7層的conv+max網(wǎng)絡(luò)提取特征,嫁接網(wǎng)絡(luò)采用的是20×15、40×30 的分辨率檢測網(wǎng)絡(luò)。為提高人頭的檢測精度,將預(yù)測尺度從原有的兩個改為三個。多尺度融合時應(yīng)當(dāng)保證輸出的特征圖尺寸與通道數(shù)一致,因此需要對高層的特征進(jìn)行2倍上采樣得到80×60×128,與其對應(yīng)的低層特征圖80×60×128拼接得到80×60×256,隨后采用1×1 卷積核而不采用全連接的方式,在不改變特征圖大小的同時避免了特征信息的丟失。網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示,低層特征映射圖如圖3所示,多尺度融合在對人頭的檢測上具有更深層次的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),三個預(yù)測尺度產(chǎn)生了尺度更為精細(xì)的特征圖,越細(xì)的網(wǎng)格劃分對人頭的適應(yīng)能力越好,以此提高對人頭檢測的精確度。
圖2 網(wǎng)絡(luò)結(jié)構(gòu)圖
圖3 低層特征映射圖
在目標(biāo)檢測任務(wù)中,合適的anchor能夠提高檢測任務(wù)的精度和速度。YOLOv3-tiny 算法中使用的候選框是根據(jù)VOC 數(shù)據(jù)集訓(xùn)練所得,其中包含多個類別且實例尺寸過大,對應(yīng)候選框的值也偏大。故在本文所使用的數(shù)據(jù)集中,部分候選框并不合理,如圖4所示。
圖4 目標(biāo)檢測框的尺寸
本文用的數(shù)據(jù)集僅針對人頭這一單目標(biāo),考慮到人頭較小的特點,結(jié)合有效感受野的思想,采用K-means方法[18]對候選框重新進(jìn)行維數(shù)聚類。聚類的目的是使預(yù)測框(anchor box)與真實框(ground truth)的IOU 值盡量大,其中IOU(Intersection-over-Union)是反映預(yù)測框與真實框差異的重要指標(biāo),IOU 值越大,表明兩者差異越小[15]。聚類的目標(biāo)函數(shù)為:
其中,N表示聚類的類別,M表示聚類的樣本集,Box[N]表示聚類得到的預(yù)測框?qū)捀撸琓ruth[M]表示真實框?qū)捀?。具體步驟如下:
(1)聚類的樣本集為預(yù)先標(biāo)注好的數(shù)據(jù)集,其中每個候選框輸出的預(yù)測值包含[xi,yi,wi,hi],i∈{1 ,2,…,N},聚類中心設(shè)定為k個,隨機初始化為(Wi,Hi),i∈{1,2,…,k} ,由于卷積神經(jīng)網(wǎng)絡(luò)具有平移不變性,僅通過聚類計算出候選框的w和h即可。
(2)針對候選框的w和h進(jìn)行坐標(biāo)轉(zhuǎn)換,將相對于整張圖片的比例轉(zhuǎn)換為相對于柵格邊長的比例(即0到1之間)。
(3)將每個預(yù)測框的中心點都與聚類中心重合,通過d=1-IOU(Box[N],Truth[M]),計算預(yù)測框和聚類中心點的距離,將預(yù)測框分配給“距離”最近的聚類中心。
按照上述方法,對Brainwash 密集人頭數(shù)據(jù)集中的樣本進(jìn)行聚類分析,聚類結(jié)果如表1,在YOLOv3-tiny原有的2 個預(yù)測尺度上增加1 個,候選框的數(shù)量也由6 個增加為9 個,9 個候選框會被3 個預(yù)測尺度平分。anchors=(14,14),(15,16),(17,19),(21,19),(20,21),(22,24),(26,26),(31,33),(41,42)。僅針對該數(shù)據(jù)集人頭這一類別,候選框的準(zhǔn)確率達(dá)到了87.06%。通過對比VOC2012和本文使用的Brainwash數(shù)據(jù)集,得到K值與AvgIOU 之間的關(guān)系,如圖5 所示,隨著K值的增大,目標(biāo)函數(shù)變化越來越平穩(wěn)[19]。
表1 聚類結(jié)果
圖5 K-means聚類分析結(jié)果
本次實驗所用的計算機配置:IntelCorei51.4 GHz,4 GB內(nèi)存;ubuntu14.04,64位操作系統(tǒng);Tensorflow深度學(xué)習(xí)框架,僅采用CPU訓(xùn)練。
本文的模型是在Brainwash 密集人頭數(shù)據(jù)集2 的10 461張圖像中選取了部分5 000張進(jìn)行訓(xùn)練的,300張圖像進(jìn)行測試的。Brainwash密集人頭檢測數(shù)據(jù)集中給出每張圖片的大小為640×480。為保持輸入圖像的分辨率不變,將圖像重塑為640×480大小。數(shù)據(jù)集按照標(biāo)準(zhǔn)VOC數(shù)據(jù)集格式進(jìn)行構(gòu)建。
(1)整理Brainwash 數(shù)據(jù)集中給出的.idl 文件(包含文件名,[xmin,ymin,xmax,ymax]),將格式轉(zhuǎn)換成YOLO的<類別><?xì)w一化中心坐標(biāo)x><?xì)w一化中心坐標(biāo)y><?xì)w一化圖片w><?xì)w一化圖片h>,首先需要先生成.xml格式Annotations 文件,然后再算出歸一化的坐標(biāo),歸一化的寬高,最后將一幅圖像的標(biāo)注文件添加到以圖片名命名的.txt文件中。
(2)將圖片及其.xml 文件導(dǎo)入YOLO-mark 進(jìn)行驗證,確認(rèn)無誤后開始訓(xùn)練。
(3)為了加快訓(xùn)練同時防止過擬合,卷積神經(jīng)網(wǎng)絡(luò)的超參數(shù)的設(shè)定只能通過不斷嘗試的方式獲得。每1 000 次迭代保存一次權(quán)重文件,以便獲取最佳權(quán)重。通過多次實驗不斷調(diào)整,本文網(wǎng)絡(luò)的超參數(shù)如表2所示。
表2 網(wǎng)絡(luò)的參數(shù)設(shè)置
本文采用K-means 重新維數(shù)聚類,聚類前后對比如圖6 所示,上下分別為兩次實驗對比,圖(a)為原圖,圖(b)為YOLOv3-tiny 聚類,圖(c)為MKYOLOv3-tiny聚類。可明顯看出圖(b)改進(jìn)前的候選框偏大,經(jīng)過改進(jìn),圖(c)中候選框的精度得到了有效提升。
圖6 聚類前后對比圖
為了檢驗本文提出的人頭檢測模型的有效性,采用平均準(zhǔn)確率mAP(mean Average Precision)、檢測時間(單位ms)、漏檢個數(shù)三個指標(biāo)作為不同方法在人頭檢測任務(wù)上的性能評價指標(biāo)。其中平均準(zhǔn)確率(mAP)表示人頭檢測任務(wù)的精度;檢測時間(單位ms)表示人頭檢測任務(wù)的速度。為了更好地評估方法,在上述廣泛使用的精度和速度兩大性能評估指標(biāo)的基礎(chǔ)上,額外增加了漏檢個數(shù)[20]來表示沒有被正確檢測到的人頭個數(shù)。其中精確率precision和召回率recall的定義如下:
由于本文只涉及單個目標(biāo)人頭的檢測,故mAP即為AP:
在測試集上的表現(xiàn)與其他模型進(jìn)行對比分析,結(jié)果如表3所示。
表3 改進(jìn)網(wǎng)絡(luò)檢測結(jié)果對比
上述實驗結(jié)果表明:在Brainwash 密集人頭檢測數(shù)據(jù)集上MKYOLOv3-tiny與YOLOv3-tiny相比檢測精度有明顯提升,漏檢率降低,且一般的遮擋和人頭的檢測都能實現(xiàn)。但檢測速度稍有下降,這是由于多尺度融合在充分利用上下文語義信息的同時,相當(dāng)于加深了網(wǎng)絡(luò),增加了模型的復(fù)雜度。但實際運用于工業(yè)領(lǐng)域中仍足夠輕量滿足搭載移動端或設(shè)備端的需求,實時性也不會有太大影響。
卷積神經(jīng)網(wǎng)絡(luò)通過對原圖像的不同特征進(jìn)行提取,低層具有更加豐富的包含人頭特征的信息,提取效果圖如圖7 所示,其中圖(a)為原圖,圖(b)為第一層卷積后輸出的特征圖640×480×16可視化,圖(c)為第四層卷積后輸出的特征圖80×60×128可視化。
圖7 低層特征提取效果圖
部分測試樣本及其檢測結(jié)果如圖8 所示,其中由上到下分別為三次實驗對比,圖(a)為原圖,圖(b)為YOLOv3-tiny的識別效果,圖(c)為改進(jìn)的MKYOLOv3-tiny方法的識別效果。實驗結(jié)果分析如表4所示。
表4 實驗結(jié)果分析
圖8 部分測試樣本及其檢測結(jié)果
通過對比發(fā)現(xiàn),改進(jìn)的網(wǎng)絡(luò)檢測精度有所提高且漏檢個數(shù)明顯降低,能夠更加準(zhǔn)確地統(tǒng)計人數(shù)。這說明本文提出的方法在提高精度降低漏檢率的方面是有效的。
本文提出一種改進(jìn)的輕量人頭檢測方法MKYOLOtiny。以輕量級網(wǎng)絡(luò)YOLOv3-tiny 為基礎(chǔ),通過多尺度融合提取出更多的人頭特征,提升檢測的精度;通過Kmeans 聚類減小初始候選框的大小,提升候選框的精度。最后,在Brainwash密集人頭數(shù)據(jù)集上驗證,結(jié)合客觀性評價指標(biāo)的測試,和YOLOv3-tiny相比,MKYOLOtiny檢測精度更高,漏檢個數(shù)更少,滿足了實時性,并且適合在移動端或設(shè)備端上運行。