馬 煜,杜慧敏,毛智禮,張 霞
西安郵電大學 電子工程學院,西安 710121
隨著世界經濟的不斷增長,全球人口數量急劇增加,大量的人口涌入土地面積有限的城市,導致城市中的公共場所在重大節日或活動中會面臨高流量、高密度的人群壓力。當大量的人群處于較為狹小的空間時,一旦發生騷亂,人群會很容易失去控制,從而將會導致惡性事故的發生。近年來,關于在大型活動、體育賽事、旅游景點、學校等地發生推搡踩踏等嚴重事件的新聞報導屢見不鮮。例如,2009年3 月29 日在科特迪瓦阿比讓舉行的世界杯和非洲國家隊預選賽期間,由于人群密度太大使得墻體倒塌造成19 人死亡,132 人受傷;2013 年6 月,英格蘭球星貝克漢姆到達同濟大學開展交流活動,現場發生踩踏事件,受傷人數頗多;2014 年12 月31 日,在上海外灘的跨年活動上發生惡性踩踏事件,造成36 人死亡,47 人受傷。這些悲劇均是在人群密度過大時發生的,由此可見,公共安全與人群密度息息相關。為了預防類似的惡性事件發生,需要掌握實時的人群密度情況,在密度過大時進行預警并采取合理的管控措施。因此對人群密度進行精確的檢測對預防惡性事件的發生有著重要意義以及研究價值。而人群中的密集性、遮擋性以及多尺度性對檢測的精度有著很大的影響,尤其是人群中的尺度多樣性給該領域的研究帶來了極大的挑戰。人群擁擠場景如圖1所示。

Fig.1 Crowd image圖1 擁擠人群場景
近年來深度學習發展迅速,卷積神經網絡(convolutional neural networks,CNN)在圖像處理領域有著優異的表現,人群密度檢測領域的研究者們也將卷積神經網絡運用到該領域中。Zhang 等人[1]首先提出多陣列網絡結構(multi-column convolutional neural network,MCNN)來應對人群數據中的不同尺度問題,設計出了三列卷積核大小不同的網絡。該網絡在ShanghaiTech 數據集上有良好的表現,但當涉及到處理人數較多(尺度多)、場景遮擋多以及透視問題時效果明顯下降。Boominathan 等人[2]提出的Crowd-Net 在不同的列上組合了淺層網絡和深層網絡,其中淺層網絡捕獲對應于大規模變化的底層特征,而深層網絡捕獲高層語義信息。該網絡只用了兩種卷積核大小不同的網絡對全圖的所有尺度信息進行提取,在人群分布不均勻的圖片中會出現淺層網與深層網提取特征的準確性下降。Switching CNN[3]在圖像塊上訓練幾個獨立的CNN人群密度回歸器,這些回歸器與MCNN具有相同的結構。此外,還對回歸分類器進行了交替分類訓練,以選擇最佳分類器進行密度估計。該網絡首先將圖片分成9 塊,通過switchlayer對每一塊圖片中人群密度進行分析后分類,使不同密度的塊進入相應的人群密度回歸器,由于在分塊時會出現人臉的不規則劃分,此類情況會使得對人進行識別時出錯從而會導致網絡精度下降。U-GAnet[4]通過多通道融合淺層特征生成人群密度圖,但對于人群密集度大的區域則無法生成高質量密度圖。
為了更好地解決人群中的尺度多樣性問題,本文提出了新型的用于人群密度檢測的網絡結構。VGG[5](visual geometry group)和殘差網絡[6](residual network,ResNet)均為具有特征提取性能的網絡,考慮到網絡的結構,本文選擇使用VGG16 的部分網絡作為前端網絡來對圖像進行特征提取,在后端網絡的設計中使用了兩陣列的空洞卷積網絡對第一部分網絡輸出進行處理從而生成不同尺度下的特征圖,最后將兩列網絡的輸出進行級聯生成預測密度圖。本文在UCF_CC_50[7]和ShanghaiTech 數據集上進行測試,測試結果好于大部分主流人群密度檢測算法。
本文所使用的訓練數據為人群密度圖,因此在訓練網絡前需要將人群密度數據集中的人群圖片使用Matlab 進行預處理,將其轉化為可用的密度圖,如圖2 所示。

Fig.2 Density map圖2 密度圖
對于一張有N個人數標記的圖片數據可以使用式(1)來表示:

式中,xi為人頭在圖像中的像素位置,δ(x-xi)表示圖像中人頭位置的沖激函數。將式(1)與高斯核濾波器進行卷積得到密度方程,如式(2):

考慮到由尺度不同引起的人頭變形,本文使用由Zhang 等人提出的基于幾何自適應核函數的方法來生成網絡訓練時所用到的密度圖,如式(3)所示:

本文在訓練網絡時使用計算所得的預測密度圖與真實密度圖間的歐幾里德距離(Euclidean distance)作為損失函數,如式(4)所示:

其中,θ為待優化網絡參數,N為訓練圖片數目,xi為輸入圖像,zi表示xi對應密度圖的真實值,z(xi;θ)表示由網絡估計出的密度圖。
在圖像分割領域中完成一項任務需要由若干卷積層和池化層組成的卷積神經網絡。圖像輸入到卷積層來提取圖像特征得到該層輸出特征圖,再通過池化層來對特征圖進行感受野增大并減小圖像大小以便進行下一步操作。分割任務是在像素級上完成預測的,因此后端網絡需要對池化后的特征圖進行上采樣(upsampling),使得輸出圖像恢復到與輸入圖像相同大小。由于分割任務對圖像細節信息的需求度較大,而過多的池化操作會導致部分細節丟失。本文使用空洞卷積(atrous convolution)來解決這一問題。空洞卷積操作如圖3 所示。圖3(a)為擴張率為1的空洞卷積,當擴張率為1 時空洞卷積即為普通3×3卷積操作,其感受野為(a)中紅色部分。圖中(b)為擴張率為2 的情況,即在(a)中每個卷積核之間進行補零,擴張后只有紅色部分與3×3 卷積核進行卷積操作,其感受野擴大為(b)中綠色框內的部分,即感受野擴大為7×7。

Fig.3 Atrous convolution圖3 空洞卷積
空洞卷積核實際大小如式(5)所示:

式中,k為原始卷積核大小,r為擴張率。
空洞卷積感受野計算方式如式(6)所示:

式中,f為上一層感受野大小,s為卷積步長,ks為卷積核大小。
為了解決人群密度檢測任務中由于攝像機視角原因所引起的多尺度問題,本文設計了如圖4 所示的網絡結構。
網絡第一部分使用了經典網絡VGG16 的部分網絡,由于VGG16 結構中存在5 次最大池化操作,使輸出特征圖為輸入圖像大小的1/32,這對于生成密度圖來說會丟失很多細節信息。因此,本文采用第3 次池化操作后的結果作為第一部分網絡的輸出,使得輸出密度圖為輸入圖像的1/8,以提高預測密度圖的準確性。網絡第二部分使用了多陣列空洞卷積,由于空洞卷積是在普通卷積的基礎上對卷積核進行間隔補零操作,因此可以在不增加網絡計算參數的情況下來擴大感受野,以此來提高網絡對圖像多尺度信息的捕捉能力。人群數據是高密集度圖像數據,因此空洞卷積特有的提高感受野的方式尤其適用于人群密度檢測工作。本文網絡使用兩陣列擴張率不同的空洞卷積對第一部分的網絡輸出進行處理,其擴張率為2 和4,使得網絡能夠捕捉更多的尺度細節信息。網絡最后使用1×1 的卷積對輸出進行級聯,得到高質量預測密度圖。
本文實驗分別在ShanghaiTech、UCF_CC_50 兩個數據集上對網絡性能進行測試。本文在pytorch環境下進行訓練,初始學習率為1×10-6,訓練周期為400個epoch。
本文使用平均絕對誤差(mean absolute error,MAE)及均方誤差(mean squared error,MSE)來衡量網絡性能,計算方法如式(7)、式(8)所示:

其中,N為測試數據集中圖片的個數;Ci為網絡預測的圖片數據中人頭個數;為Ci對應的真實人頭個數。

式(9)為人頭數計算方式,其中l、w為所計算密度圖的長、寬,即對該密度圖中所有像素點求和來得到人頭個數。
UCF_CC_50 數據集是第一個具有挑戰性的人群密度數據集,數據集中含有各種密度以及不同角度的場景,整個數據集每個圖像平均有1 280 人,整個數據集共標記了63 075人。圖片內人數從94到4 543不等,這樣差異巨大的數據集對模型性能也有很大的挑戰。因為數據集中只有50張圖片,在訓練前對每張圖片進行部分截取,截取大小為原圖1/4共20張,再對截取出的圖片進行翻轉操作來擴大訓練數據集。如表1所示,本文算法在UCF_CC_50 數據集上的表現與其余6 種算法相比兩項參數均達到最好,證明了算法的準確性。

Table 1 Performance comparison on UCF_CC_50 dataset表1 UCF_CC_50 數據集上性能對比
ShanghaiTech 數據集為上海科技大學團隊為解決人群密度檢測問題所建立的大規模人群數據集,該數據集共1 198 張圖片,其中標記人數達到330 165。其中Part_A 部分包括300 張訓練圖片以及182 張測試圖片,Part_B 部分包括400 張訓練圖片以及316 張測試圖片。本文所提出的人群密度檢測算法與其他主流算法在該數據集上的測試結果如表2 所示。

Table 2 Performance comparison on ShanghaiTech dataset表2 ShanghaiTech 數據集上性能對比
由表2 可見,本文算法在ShanghaiTech Part_A 密集人群數據上的表現與表中7 種主流算法相比均達到最優,在Part_B 街景人群數據上表現依然突出,證明了本文算法的可靠性。
實驗效果如圖5 所示。本文算法效果與MCNN對比如圖6 所示。

Fig.6 Compared with MCNN圖6 與MCNN 結果對比
由于空洞卷積會帶來柵格效應,即在卷積核中間插入0 后再進行卷積操作時不是每一個像素都參與計算,會造成部分信息不連續的結果,對預測效果有一定的影響。因此,本文參考文獻[15-16],在原有的網絡基礎上進行了空洞率調整,將其中一列空洞卷積的擴張率調整為[1,2,5,1,2,5]鋸齒狀空洞卷積網絡,并在ShanghaiTech Part_A 上對微調后的網絡進行了訓練以及測試,對比效果如表3 所示。

Table 3 Comparison on ShanghaiTech Part_A表3 ShanghaiTech Part_A 上效果對比
鋸齒狀空洞卷積在擴張率大于1 的空洞卷積操作后插入一層擴張率為1 的基礎卷積,可以對擴大感受野后的卷積操作中每一個像素都進行計算來保證信息的連續性。由表3 中數據可知,鋸齒狀空洞卷積結構對解決柵格效應有良好的效果并對網絡性能有了一定的提高。
本節對生成密度圖進行圖像熵計算,結果如表4所示。本文算法所生成的密度圖相較于其他算法包含更多信息,質量更好。

Table 4 Image entropy of ShanghaiTech Part_A表4 ShanghaiTech Part_A 圖像熵
為驗證本文算法所引入雙陣列空洞卷積與對VGG 網絡進行改進工作的有效性以及對本文算法的性能影響,本文在ShanghaiTech Part_A 數據集上進行了消融實驗,效果如表5 所示。

Table 5 Ablation experiment on ShanghaiTech Part_A表5 ShanghaiTech Part_A 上消融實驗
由表5 數據可得,本文所使用的改進后的VGG相較于使用原始VGG 對網絡性能提高了19.7%。由于原始VGG 需要經過5 次池化操作使前端網絡的輸出為原圖的1/32,本文使用的改進VGG 進行了3 次池化操作使得輸出為原圖的1/8,可以保留更多的邊緣人群信息,有利于密度圖的精確生成。為測試空洞卷積對網絡性能的影響,本節對去掉空洞卷積模塊后的網絡進行實驗并與原網絡進行對比,如表5 數據所示去掉空洞卷積模塊后網絡性能下降了36.2%。使用不同擴張率的網絡相較于單一擴張率的網絡性能提高了10.3%。
網絡改進前后輸出特征圖如圖7 所示。
本節對網絡改進前后相同層相同通道的特征圖進行提取,由圖7 可以看出改進后的網絡可提取到更多的邊緣人頭特征,并且生成質量更高的密度圖。

Fig.7 Feature visualization圖7 特征可視化
本文提出了一種應對多尺度問題的基于兩陣列卷積神經網絡的人群密度檢測算法,測試結果表明該算法在通用人群數據集上有著良好的準確性。在未來的研究工作中,將從空洞卷積的空洞率的設計方向入手來解決空洞卷積的柵格效應,以及如何在網絡中引入注意力機制等方面來開展工作。