郭濠奇, 楊 杰, 康 莊
(江西理工大學 電氣工程與自動化學院,江西 贛州 341000)
現代交通發(fā)展日新月異,城市化進程不斷加快,城市間的人口流動不斷增加,演唱會、學術大會等大型活動也越來越多,在這種人群密集的環(huán)境中,為保證人民群眾的生命安全,對這些場所進行人群計數是十分必要的。針對人群計數,國內外學者進行了大量的研究,計數方法主要分為三種,分別為基于目標檢測的方法、基于回歸的方法、基于密度圖的方法。基于密度圖的計數方法是目前主流的計數方法[1~4]。郭俊等人[5]提出了一種基于機器視覺跟蹤的計數算法。Zhang Y Y等人[6]提出了基于多列卷積神經網絡的人群計數算法。Li Y H等人[7]提出了基于膨脹卷積神經網絡的CSRNet算法。孟月波等人[8]提出了一種編碼—解碼結構的多尺度卷積神經網絡。
針對現今計數算法存在的訓練時間長、收斂慢的問題,本文提出了一種基于改進CSRNet的人群計數算法。對CSRNet[9]的網絡結構進行改進,使用普通卷積網絡替換膨脹卷積網絡,同時增加密集連接結構,改進后的網絡分別在ShanghaiTech數據集[6]和UCF_CC_50數據集[10]上進行實驗驗證。
基于密度圖的人群計數算法,在網絡訓練時,輸入為樣本圖片和對應的真實密度圖。因此,在進行訓練前,需要根據樣本圖片的標簽生成樣本圖片的真實密度圖。生成真實密度圖時,讀取樣本圖片標簽中的人頭位置信息,將該位置標記為1,沒有人頭標注的位置則為0,生成和圖像尺寸相同的矩陣,將該矩陣與高斯核函數進行卷積操作,即可得到用于訓練的連續(xù)的真實密度圖。設圖像對應標簽中的一個人頭標注點為xi,用δ方程表示為δ(x-xi),則擁有N個人頭標注點的圖片可用方程(1)表示
(1)
將H(x)與高斯核函數Gσ(x)進行卷積得到連續(xù)的密度方程,用方程(2)表示
F(x)=H(x)*Gσ(x)
(2)
(3)
CSRNet算法采用單列卷積網絡,分為前端網絡和后端網絡兩部分。前端網絡采用VGG16的前10個卷積層,后端網絡采用6層膨脹卷積[7]。在深度學習中,隨著網絡的加深,在不改變卷積核大小的情況下,一般采用減小圖片尺寸來擴大卷積核的感受野。但圖片尺寸減小的同時,圖片的空間特征信息也將有損失。CSRNet算法通過在后端網絡采用膨脹卷積,在不改變圖像尺寸的情況下,擴大卷積核的感受野。針對后端網絡,CSRNet給出了4種不同膨脹率的結構設置,但在驗證膨脹卷積效果時,僅在ShanghaiTech的A數據集上對4種結構進行了對比,得出后端卷積網絡膨脹率為2時效果最好。本文針對CSRNet選出的膨脹率為2的網絡結構,將膨脹率改為1(膨脹率為1的卷積即普通卷積),在ShanghaiTech A,B數據集上分別進行實驗,從平均絕對誤差(MAE)、均方誤差(MSE)和樣本的平均訓練時間(time per sample,TPS)三個指標進行對比,對比結果見表1,其中,drate代表膨脹率。
表1 膨脹卷積結構與普通卷積結構實驗對比
由表1可知,空洞卷積結構的使用僅使ShanghaiTech A數據集的MAE略有提升,但樣本的平均訓練時間相比采用普通卷積結構的網絡卻提高了7倍多。因此,本文在網絡設計中摒棄了CSRNet后端網絡的空洞卷積,采用普通單列卷積結構進行網絡的設計。
本文提出的基于改進CSRNet的人群計數算法屬于端到端的計數算法,網絡結構采用單列卷積網絡。為增強網絡的特征提取能力,前端網絡采用VGG19的前12層卷積網絡,后端網絡中,將膨脹卷積網絡替換為普通卷積網絡,并增加密集連接結構,對卷積層的輸出特征進行重利用,增加網絡的收斂速度,改進的網絡結構如圖1所示,卷積層命名方式為Conv-k-in_channel-out_channel,k表示卷積核的大小,in_channel表示輸入的通道數,out_channel表示輸出的通道數。
圖1 本文網絡結構
在后端網絡中增加的密集連接屬于跳連結構,結構中每個卷積層與之后的卷積層都有連接,如圖2所示。假設有s層卷積,那么結構中的連接總數為[s(s+1)]/2,第i層卷積的輸出特征圖用fi表示,f0表示輸入,經過密集連接之后,第s層卷積會接收到前面(s-1)層的特征圖和輸入特征圖,則第s層的輸入可用Hs([f0,f1,f2,…,fs-1])表示,其中,[f0,f1,f2,…,fs-1]表示輸入特征圖和前(s-1)層的輸出特征圖在通道維度上疊加的結果,Hs包括卷積層和激活函數層,作用是對特征圖進行降維,減小模型計算量。加入了密集連接的神經網絡,增加了卷積層之間信息和梯度的傳遞,減輕了神經網路容易出現的梯度消失問題。
圖2 密集連接結構
本文的實驗平臺配置:電腦配置為i5—6500 CPU,8GB RAM,64位Windows7操作系統,服務器配置為Tesla-P100,本文算法采用的深度學習框架是Pytorch框架。
在訓練過程中,每次訓練抽取的樣本數為1,采用RMSProp優(yōu)化器進行網絡權重的訓練,其中,優(yōu)化器的權重衰減設置為5×10-4,動量(momentum)設置為0.95,學習率的設置如圖3所示。
圖3 學習率設置
選擇歐氏距離作為網絡訓練的損失函數,用來衡量算法生成的密度圖與真實密度圖之間的差異,公式如下
(4)
選取MAE和MSE作為模型的評價指標,其中,MAE為真實人數和模型計數結果的平均絕對誤差,MSE為真實人數和模型計數結果的均方誤差,公式如下
(5)
(6)
1)ShanghaiTech數據集
ShanghaiTech數據集[6]包含A和B兩個數據集,一共1 198張圖片樣本,330 165個人頭標記。A數據集為密集人群數據集,包含482張圖片樣本,其中300張用于訓練,182張用于測試。B數據集為稀疏人群數據集,共包含716張圖片樣本,其中400張用于訓練,316張用于測試。在ShanghaiTech數據集上的實驗結果如表2所示,圖4是ShanghaiTech A數據集上的樣本圖片、對應的真實密度圖和本文算法生成的密度圖,圖5是ShanghaiTech B數據集上的樣本圖片、對應的真實密度圖和本文算法生成的密度圖。
表2 ShanghaiTech數據集上的結果對比
圖4 ShanghaiTech A數據集上的實驗結果
圖5 ShanghaiTech B數據集上的實驗結果
2)UCF_CC_50數據集
UCF_CC_50數據集由Idress H等人[10]提出,包含50張來自互聯網的圖片樣本,是一個非常具有挑戰(zhàn)性的數據集。UCF_CC_50數據集不僅圖片樣本數量十分有限,而且圖片中人數最少的為94,最多的為4 543,人數波動十分劇烈。其中,50張圖片的平均人頭標點數量約為1 280個,人頭標點總數為63 974個。在訓練UCF_CC_50數據集時,采用Idress H使用的五折交叉驗證法進行模型的訓練和驗證。在UCF_CC_50數據集上的實驗結果如表3所示,圖6為UCF_CC_50數據集的樣本圖片、對應的真實密度圖和本文算法生成的密度圖。
表3 UCF_CC_50數據集上的結果對比
圖6 UCF_CC_50數據集上的實驗結果
經實驗驗證,本文提出的基于改進CSRNet的人群計數算法在兩個公共數據集上均表現良好,實現了精度上的提升。同時,由于未采用膨脹卷積,相比CSRNet算法,本文的算法在樣本的平均訓練時間上也有下降。
針對CSRNet后端網絡,本文進行了膨脹卷積結構與普通卷積結構的對比實驗,發(fā)現膨脹卷積相比普通卷積雖然特征提取能力稍強,但訓練更耗時。在本文算法中,采用普通卷積網絡結構縮短訓練模型所需的時間;采用更深的網絡增強網絡的特征提取能力;在網絡中增加密集連接結構,加強網絡中特征和梯度信息的傳遞。實驗驗證,本文的算法具有較高的精度和較快的訓練速度,在安全預警、區(qū)域人群計數等方面具有廣闊的應用前景。