趙宏偉,徐 亮,王 冶,安云云,錢華山
1(中國石油大學(華東)計算機科學與技術學院,青島 266580)
2(北京科技大學 計算機與通信工程學院,北京 100083)
3(解放軍9144部隊,青島 266102)
4(國網山東省電力公司 青島市黃島區供電公司,青島 266499)
5(北京超算科技有限公司,北京 100190)
密集人群計數是計算機視覺領域的一個重要分支,在城市規劃、交通、安防等領域有著重要的研究意義.其研究目標在于,對于給定的密集人群圖像,能夠準確地推理出其中的人員數量[1-3].目前主流的密集人群計數算法利用回歸的思想,利用神經網絡直接根據人群圖像輸出人群的密度圖,然后對熱度圖進行積分獲得圖像中的人數.在訓練時人群密度圖通常利用高斯核來表征圖像中的人體頭部,將整個圖像中所有頭部高斯核進行疊加構成人群密度圖[4-8].
在現實場景人群密度估計工作中,由于不同場景下人群的密度和圖像中人員的尺度差異較大,對不同尺度的人群進行準確的密度估計在當前仍是一個極具挑戰的課題.因此,針對性地提出了一種基于尺度融合的密集人群計數算法(Multi-Scale Fusion Based Crowd Counting,MSFBCC),從人群密度圖生成算法、密度圖回歸神經網絡設計和損失函數優化3個方面進行了改進:
(1)人群密度圖構建算法優化:在利用高斯核表征人體頭部構建人群密度圖時,由于密集人群圖像中目標數量極大,標注十分費力,絕大多數密集人群數據集都采用以點來表征人體頭部的方式[4],因此目前人頭高斯核的值通常由人群中頭部之間的距離確定.這種方式在人群密度較大時生成的密度圖有著不錯的效果,但是在人群密度相對稀疏以及人群密度波動較大的情況下則難以對人群中的頭部進行準確的表征,其原因在于圖像中人頭部的大小跟頭部之間的距離并不完全相關.因此提出了一種新的人群密度圖構建算法,即在人群稀疏區域利用基于深度學習和非深度學習方法的人頭檢測器獲取圖像中部分人體頭部的尺寸,并根據邊框中心坐標與人頭標注點的歐氏距離與頭部邊框進行匹配,利用徑向基插值對此區域剩余人頭的尺度進行補全,而在人群稠密區域則采用傳統的距離自適應的尺度估計方法,從而獲得所有標注人頭標注點的尺度,以此為度量創建每一個頭部區域的高斯核,生成整個圖像的人群密度圖.
(2)人群密度圖回歸神經網絡設計:由于目前大多數密集人群計數算法難以解決人群尺度波動大的問題,無法結合人群多尺度特征進行準確推理,在EfficientNet[9]的基礎上提出了一種多尺度融合的人群密度圖回歸神經網絡.該網絡利用MBConv(移動反轉瓶頸卷積)模塊[10]以及SENet[11]壓縮與激發機制構建基礎特征提取模塊并通過添加空洞卷積提升人群邊緣特征提取的性能,通過BiFPN[12]將骨架神經網絡的最后4個模塊輸出的特征圖進行融合,實現了更好的密集人群尺度融合.
(3)損失函數優化:原始密集人群計數僅僅對圖像中人群的數目進行統計,其損失函數只涉及預測總數與真實的偏差,沒有考慮人群在圖像中的分布.更為常見的一種損失函數通過對預測密度圖與真實密度圖的差值對神經網絡進行訓練,這樣不僅可以準確地推理出圖像中人群的數目,更可以利用人群在圖像中的分布進一步提升推理的準確率.但是對于圖像中的人群空白區域仍然會出現回歸噪聲,即在生成密度圖的無人群區域出現了非0數值區,因此提出通過在損失函數增加對空白區域誤差的懲罰以提升密度圖回歸神經網絡的準確性,即在損失函數中增加密度圖人群區域像素與非人群區域像素的二元分類損失.
密集人群計數對于城市公共安全和基礎設施規劃有著重要的意義,但是由于圖像角度和拍攝距離等原因,人群目標的多尺度問題一直是一個極具挑戰的課題.目前主流的密集人群計數算法大多利用深度學習技術,通過卷積神經網絡將人群圖像回歸成人群密度圖,再通過對密度圖進行積分獲得圖像中的人群總數.
如圖1所示,傳統的密集人群算法包括基于檢測和基于回歸的密集人群計數算法.基于檢測的傳統密集人群計數算法分為人體整體檢測和人體部件檢測兩種:人體整體檢測算法從人體的整體提取特征對圖像中的人員進行檢測并統計數目[13-16],這種方法主要適用于人群密度較為稀疏的情況,而密度較大的人群圖像則表現不佳,其原因在于密集人群圖像中遮擋較為嚴重,難以獲取完整的人體特征; 利用人體部件進行檢測則更為常用[17],如人體的頭部、肩膀等,人體頭部特征更為明顯而且在人群中遮擋程度相對較低,相比對人的整體進行檢測,在準確率上有一定的提升.而基于回歸的密集人群計數方法[18-20]特征在于:首先提取圖像中人群的各種特征,然后利用線性回歸、嶺回歸等方法建立起由人群特征到人群數量的映射(人群總數或密度圖).

圖1 傳統密集人群技術方法分類
隨著深度學習技術的興起,卷積神經網絡逐漸成為主流的密集人群計數方法.基于深度學習的密集人群技術方法同樣分為基于檢測的密集人群計數和基于回歸的密集人群計數.基于檢測的密集人群計數方法通常利用YOLO[21]、SSD[22]、Faster RCNN[23]等目標檢測算法對人體的頭部進行檢測并統計其數量,但同樣由于人群密集區域遮擋嚴重并且分辨率較低,難以達到常規目標檢測的性能,因此基于回歸的密集人群計數算法更為常用一些.基于回歸的密集人群計數算法按照回歸目標可以分為回歸密度圖和回歸人群總數兩種方式直接對圖像中人群的總數進行回歸.由于無法獲取人群在圖像中的分布信息,具有更多的不確定性,因此 MCNN[4]、CP-CNN[8]、Switching-CNN[7]、CrowdNet[5]、CSRNet[24]和CTML[25]等基于密度圖回歸的人群計數算法逐漸成為當前研究的主流方向[26-32].
由于圖像采集以及視覺透視等原因,圖像中的人員通常會有不同的尺度,比如監控圖像近大遠小的透視特征會使得圖像中距離攝像頭不同遠近的人呈現出不同的大小(如圖2中標注出的遠近兩個人頭); 相同的人在不同分辨率的圖像中也會有不同的尺度(如圖3).人群尺度的不一致性成為密集人群計數發展中的一大難題,因此學術界對此開展了廣泛的研究.

圖2 密集人群數據樣本(距離差異)

圖3 密集人群數據樣本(分辨率差異)
在人群密度圖生成方面目前多采用人頭標注點與二維高斯核進行卷積的方式,使得每個人頭區域的概率之和為1,在將所有人頭區域卷積完之后進行疊加得到完整的人群密度圖,對人群密度圖進行積分即可得到整體的人群數目.因此二維高斯核的標準差σ反映著單個人頭區域高斯核的分布狀況,即人頭的尺度信息.上海科技大學的張明明教授在提出MCNN算法時利用人頭之間的距離作為判斷高斯核標準差的標準[4],并一直被后續的算法沿用,即在確定高斯核標準差時,利用K最近鄰算法確定最近的幾個頭部標記點,取其平均并乘以系數,通常系數取0.3.但是此種方式并非完全有效,原因在于在人群較為密集的場景中,人群的密度和尺度是呈負相關的,即人群中人與人緊密貼合的情況下頭部標注點之間距離越遠頭部的尺度越大,利用頭部的尺度可以用標注點之間的距離來表征; 而在人群較為稀疏的場景中,頭部的尺度和人群密度是無關的,因此僅依靠頭部標注點之間的距離來判斷頭部尺度是不準確的.
針對人群的尺度多樣性特征,在密集人群計數神經網絡設計上大致分為多列神經網絡[33-35]和單列神經網絡[36-38]兩種.多列神經網絡以MCNN[4]為代表,其特征在于在不同神經網絡分支上分別處理對應的不同尺度的特征,再將不同分支的回歸結果進行融合,以實現密集人群尺度融合的效果.但是多列神經網絡存在參數量過大的缺陷,相同層數的多列神經網絡比單列神經網絡參數多出數倍,并且存在特征重復提取的弊端,因此在訓練成本有限的情況下目前大多利用單列神經網絡的結構來進行人群密度圖回歸.單列神經網絡采用并行多分支模塊、串行跳層連接模塊等,獲取不同感受野的人群特征并將不同抽象層級的特征進行融合,實現密集人群多尺度特征的獲取.此外,將注意力機制[1,39]引入密集人群計數領域,對檢測的準確率也有一定提升.
為解決密集人群計數領域尺度多樣性難題,提出了基于尺度融合的密集人群計數算法,主要包括人群密度圖構建算法優化、人群密度圖回歸神經網絡設計和損失函數優化3個方面.
當前人群密度圖生成算法包括人頭散點圖標注和人頭高斯核卷積兩部分,對于一張密集人群圖像,原始標注xi(xi,yi)標注一個人頭坐標,在構建密度圖時需要將人頭利用狄克拉δ函數表示.




因此,人群密度圖可以更精確地表示為:

其中,β為平均距離的系數,一般依據經驗選擇 β為0.3.但是依據經驗選擇的距離系數在其他數據集上不具有廣泛的適用性,并且在人群密度較低時并不平均,最近距離法并不準確,因此需要更為精準的頭部尺度估計算法.
二維高斯核如式(5)所示:

根據正態分布σ=r/3原則,頭部高斯核像素點分布在距離頭部標注點半3σ范圍內的概率為0.9974,因此如圖4所示,可以將頭部標注點半徑3σ的區域用于表征人頭區域,人頭部位高斯核標準差可由人頭部位半徑r近似表示.


圖4 人頭區域半徑約為
為了準確地獲取人頭區域的半徑,結合深度學習人頭檢測器與非深度學習人頭檢測器對圖像中的人頭進行檢測,訓練數據集包括SCUT-HEAD數據集[40]、HollywoodHead數據集[41]和Brainwash數據集[42],數據集描述如表1所示.

表1 人頭檢測器數據集
深度學習人頭檢測器利用在COCO數據集上進行預訓練的EfficientDet目標檢測算法訓練密集人群頭部檢測器,將上述3個數據集合分別按照5:1的比例劃分訓練集和驗證集,最終訓練集266 909張、驗證集53 382張,得到測試準確率為87.28%,圖5為測試結果樣本.

圖5 EfficientDet人頭檢測效果
非深度學習方法的人頭檢測器利用頭部的HOG特征和Haar特征進行人頭檢測,具體實現為HOG+SVM和Haar+AdaBoost.
在將檢測框與頭部標注點進行匹配時,設計了算法1.



由此可以獲得圖像中部分頭部的尺度,根據近大遠小的透視特點,利用徑向基插值(RBF插值)方法對未匹配頭部的尺度進行補全.實驗過程中發現無論深度學習方式還是非深度學習方式,在人群密度較大、遮擋嚴重且頭部較小的區域無法檢測出有效的檢測框,因此根據頭部標注點的分布,在無檢測框卻分布均勻的頭部密集區域采用根據頭部之間的距離估算人頭尺度的距離自適應算法,如式(2)-式(4)所示,將兩種方式獲得的密度圖進行拼接,最終獲得人群密度圖如圖6所示.

圖6 原始圖像與生成密度圖
EfficientNet[9]和EfficientDet[12]分別是圖像分類和目標檢測領域里程碑式的網絡結構,受其啟發,在人群密度圖回歸網絡設計上以EfficientNet-B7為骨架特征提取網絡并進行優化以適應多尺度人群特征圖融合的需求.到目前為止,MSFBCC是首個將EfficientNet應用在密集人群技術領域的算法.
在網絡結構的設計上,以在MobileNetV2[10]中提出的MBConv模塊為網絡主體,引入SENet的壓縮-激發機制對網絡進行優化.MBConv模塊結構如圖7所示,其主要構成為深度可分離卷積和SENet,輸入特征圖首先利用1×1卷積進行升維,再經過深度可分離卷積與SENet進行特征提取,最后經由1×1卷積降維之后與原始輸入特征圖進行相加.

圖7 MBConv模塊
如圖8所示,MSFBCC網絡主要由Stem層、7個特征提取區塊和特征融合網絡組成,其中,7個特征提取區塊分別由多個MBConv模塊組成,MBConv的個數分別為{5,8,8,11,11,13,5},每個MBConv模塊對應輸出特征圖維度設置與EfficientNet-B7一致,7個特征提取區塊輸出特征圖的維度分別對應為{32,48,80,160,244,384,640}.
密集人群中的人體頭部為多小目標且更需要關注其邊緣特征,鑒于膨脹卷積在密集人群頭部特征提取中發揮的顯著成效[24],在7個特征提取區塊的前4個加入膨脹卷積模塊,膨脹率均為2.對于MSFBCC的后4個模塊生成的特征圖,利用BiFPN進行不同尺度等級特征圖的融合,在融合時需要利用上采樣進行尺度對齊,融合方式如圖8所示,在將特征圖融合之后通過反卷積層對特征圖進行放大得到輸出密度圖.

圖8 MSFBCC網絡結構圖
在訓練時將EfficientDet在COCO數據集上訓練的模型作為訓練模型的部分初始權重,用于初始化除特征提取網絡前4層空洞卷積模塊之外的所有可訓練參數,特征提取網絡中的4個空洞卷積模塊則采用隨機初始化.
密集人群計數神經網絡最后的輸出為密度圖,將輸入圖像轉化為密度圖實際是一種回歸問題,因此傳統的密集人群計數損失函數為MSE損失函數,定義如式(8),其中,N為一個批次中樣本圖像的數目,M為密度圖像素總數,D(Xi;θ)為預測密度圖,Di為真實密度圖,yj和分別為密度圖中像素點真實值和預測值.

在復現其他同類算法工作時發現在不存在人的空白區域會出現非0數值區,即在回歸中出現了噪聲.為進一步提升回歸的準確性,需要對人群區域和非人群區域進行區分,對非人群區域的噪聲進行抑制,采用了如式(9)所示的二值交叉熵輔助損失函數,其中和分別為圖像中像素點 j真實值和預測值的標簽.因此,將密度圖回歸損失函數與像素分類損失函數相結合,最終經過優化的密集人群計數損失函數如式(10)所示.

為了驗證基于尺度融合的密集人群計數算法的有效性和泛化性,在多個數據集上進行了充分的對比實驗,實驗結果表明所提出的方法能夠超越絕大多數密集人群計數算法.
所進行實驗均在Ubuntu 20.04系統下進行,顯卡驅動版本為455.23.05,CUDA版本為11.1,采用Python 3.6.5,PyTorch 1.6.硬件環境配置CPU為Intel? CoreTMi7-10700K CPU @ 3.80 GHz× 16,內存32 GB,GPU為Nvidia GeForce RTX 3090,顯存為24 GB.
實驗部分采用的數據集包括Mall數據集[20]、UCSD數據集[43]、ShanghaiTech數據集[4]、UCF_CC_50數據集[44]和UCF-QNRF數據集[45],數據集詳細描述和數據集樣本分別如表2和圖9所示.

表2 密集人群計數數據集

圖9 數據集樣本


為驗證基于尺度融合的密集人群計數算法的準確性,在5個數據集上與多個同類人群計數算法進行了對比實驗,實驗結果如表3-表6所示.從實驗結果可以看出,相對于絕大多數同類算法,基于尺度融合的密集人群計數算法具有更好的準確性和穩定性,并在多個數據集上取得了最高的準確率.

表3 在ShanghaiTech Part A & B和UCF_CC_50數據集上的算法效果對比

表4 在Mall數據集上的算法效果對比

表5 在UCSD數據集上的算法效果對比

表6 在UCF-QNRF數據集上的算法效果對比
為探究基于尺度融合的密集人群計數算法各個部分的有效性,在ShanghaiTech數據集B部分上分別針對人群密度圖生成算法、神經網絡設計和損失函數優化設計了消融實驗,實驗相關算法包括MCNN、MSCNN、Switching CNN和CMTL.實驗結果表明,所提出的人群密度圖生成算法、在特征提取網絡中加入膨脹卷積的策略和改進的損失函數均能夠顯著提升密集人群計數算法的準確率.
分別利用固定尺度和人群之間的距離來預估人群中頭部的尺度(如圖10(a)和圖10(b)),與圖10(c)相比,可以看出改進的人群密度圖能夠更好地估計人群中頭部的尺度.

圖10 不同方式估計頭部尺度
分別將所提出的改進人群密度圖生成算法與原始的距離自適應人群密度圖生成算法得到的密度圖作為訓練標簽,對上述4種算法以及MSFBCC進行訓練,以驗證改進的人群密度圖生成算法的有效性.表7為利用提出的人群密度圖生成算法對與原始距離自適應的密度圖生成算法的對比實驗,從表中可以看出,與原始的距離自適應人群密度圖生成算法相比,所提出的改進人群密度圖生成算法能夠普遍提升人群密度圖回歸網絡的準確率,其中對于Switching CNN和MSCNN的提升最為顯著,MAE和MSE分別降低了5.9和7.2.

表7 改進的密度圖生成算法效果對比
為驗證MSFBCC神經網絡的有效性,將基礎特征網絡與利用膨脹卷積模塊改進的特征提取網絡進行對比實驗.表8為利用EfficientNet與利用膨脹卷積模塊改進的EfficientNet作為特征提取網絡的實驗效果,表3與表8的實驗結果表明,將EfficientNet應用在密集人群計數領域具有較高的準確性,利用膨脹卷積模塊對特征提取網絡進行改進則會進一步提高計數的準確率.

表8 特征提取網絡效果對比
為了驗證優化損失函數的有效性,將改進的密度圖回歸損失函數在消融實驗中的5個密集人群計數算法中進行應用,表9為利用原始損失函數和優化過的損失函數的準確率對比,從表中可以看出,所提出的改進的損失函數能夠一定程度上提升密集人群計數算法的準確率.

表9 改進的損失函數應用在不同算法上的效果對比
針對傳統密集人群計數算法難以適應人群尺度多樣性的問題,提出了一種基于尺度融合的密集人群計數算法MSDBCC,分別從人群密度圖生成算法、密度圖回歸神經網絡設計和損失函數優化3個方面展開了研究.充分的對比實驗和消融實驗表明,MSFBCC能夠準確地推理出密集人群圖像中的人員數量并超越同類的大多數算法,并且所提出的3個策略對計數算法的準確率有明顯的提高作用.但是MSFBCC特征提取網絡參數量較大,訓練比較費時并且實際部署需要較多計算資源,因此未來的研究應當聚焦于縮小網絡規模,提高網絡的推理效率.