楊 旭,黃 進,秦澤宇,鄭思宇,付國棟
(西南交通大學 電氣工程學院,成都 610097)
人群計數作為計算機視覺領域下的一個重要分支,其目的是通過算法自動統計出場景中的行人數量,在視頻監控、安防等領域有廣泛應用.尤其是在商場、車站、景點等公共場所,進行實時的人流量統計有助于對擁擠情況的分析和異常狀況的監測.
早期的人群計數算法基于目標檢測進行統計,但其精度較差,尤其是高密度區域,人頭目標范圍小導致目標檢測變得困難,因此基于目標檢測計數很快被棄用.后來出現數量回歸的方法,但該類方法不能體現人群目標的分布情況,且計數精度并無太大提升.直到密度圖的提出給人群計數算法提供了新的思路,該類型算法通過預測圖像的密度圖來統計人數,模型學習的是圖像特征到密度圖的映射.相比直接回歸人群數量和基于目標檢測進行統計的方法,基于密度圖的計數算法不僅能直觀體現目標的分布情況,統計精度也有很大提高,是現在人群計數領域的主流方法.
高質量真實密度圖的生成和合理的網絡結構設計是提高基于密度圖的計數算法精度的關鍵.真實密度圖的制作大多采用高斯自適應核濾波,計數網絡的結構設計則有多種方式,按特征提取分支的數量可以分為多列網絡和單列網絡.多列網絡利用多條并行分支提取不同尺度的特征信息,最后匯聚多個特征,共同預測密度圖.單列網絡則只使用一條分支進行特征提取和密度圖的預測,模型結構層次更深,提取的語義特征更高級.多列網絡存在冗余特征的缺陷,因為各分支的結構往往相似度高,不易控制參數讓其產生差異大的多尺度特征.單列網絡雖然能提取更高級的深層語義特征,但淺層的特征信息在傳輸過程中丟失,沒有得到充分利用.
針對以上兩種結構存在的問題,本文提出以單列結構ResNet50[1]為特征提取器,基于注意力加權融合(AWF)結構與自底向上融合(BUF)模塊為融合層的人群計數算法.ResNet50 網絡采用跳躍連接方式使淺層信息能跨層傳輸到深層特征,從而避免了低層特征的信息丟失.本文算法從ResNet50中抽取3 個特征尺度變化較大的層,作為多尺度圖像特征的低級表達,然后送入融合層進一步疊加特征,最后進行密度圖的預測.其中AWF 模塊使用3 個分支處理不同層特征圖,在處理特征圖時引入注意力支路學習特征圖權重,加強特征表達,3 個分支處理后的特征圖逐層融合作為最終特征圖,融合方式為逐元素相加.BUF 模塊在AWF的基礎上進行刪減,它從淺層依次與相鄰層融合,在最后一層使用一個注意力層加權融合.BUF 在處理淺層特征時使用了空洞卷積,目的是在更大的感受野上學習到更多的特征信息.BUF的兩個大尺度的淺層特征采用通道拼接的方式融合,而AWF 模塊是深層特征依次與淺層進行逐元素相加.在公開數據集上的實驗表明,本文提出的ResNet50+AWF和ResNet50+BUF 都可以顯著提高人群計數精度,并具有更強的魯棒性.
人群計數算法可以分為基于檢測和基于回歸兩大類.基于檢測的計數原理是采用目標檢測算法識別并定位人體目標,最后統計檢測到的目標數量,如Topkaya等[2]利用聚類檢測識別行人進行數目統計、Li 等[3]通過背景分割檢測出圖像中的人頭和人體肩部來估計人群數量.隨著深度學習的興起,目標檢測領域出現了很多高效快速的檢測算法如RCNN 系列[4]、YOLO 系列[5].這些檢測算法在通用目標檢測任務上表現良好,但是由于人群計數任務中存在遮擋、場景復雜和人體姿態變化大等問題,這類目標檢測模型在人群計數任務上的表現很差,因此近些年已經很少采用目標檢測算法進行人群計數.
基于回歸的人群計數方法可以分為數量回歸和密度圖回歸,前者是讓模型直接學習圖像特征到人群數量的映射,即輸入一張圖像,模型直接輸出圖像中的人數,如IDREES 等[6]使用SIFT 特征和頻域分析對極度密集場景進行分塊回歸來估計人群數量、Chan 等[7]使用泊松貝葉斯回歸算法直接計算人群數量.基于數量回歸方法的思路通常是先提取如HOG、SIFT、LBP等可以表征圖像信息的特征,然后通過線性回歸或高斯回歸等方法學習特征到數量的映射.基于數量回歸的方法可以解決場景中人群遮擋的問題,但是忽略了空間信息,模型的輸出只有人數,不能體現圖像中人群的分布情況,現在也基本不再使用該類方法.
基于密度圖回歸的方法由Lempitsky[8]在2010年提出,該類方法的思想是使用密度圖作為圖像中人群的分布表示.密度圖是一張與原始圖像尺寸一致的單通道圖像,其特點是在非人頭目標位置的像素值為0,人頭目標位置的像素值之和為目標個數.該類算法模型學習的是從圖像到密度圖的映射關系,而非圖像到人數的映射,其普遍思路是采用卷積神經網絡(CNN)提取高級圖像特征,然后解碼得到圖像密度圖,最后對密度圖進行積分得到目標數量.最具代表性的密度圖估計方法是Zhang 等[9]在2016年提出的MCNN 網絡,該網絡采用3 個不同卷積核大小的分支結構提取不同尺度的特征信息,最后按通道拼接各個分支的特征圖,送入卷積層預測最終的密度圖.基于密度圖的計數方法的缺陷是多尺度檢測,由于場景中的人群目標近大遠小,密集區域遮擋嚴重,算法很難同時在高密度和低密度區域上取得較好結果.
為了解決多尺度檢測的問題,MCNN的思想是用不同分支提取信息,由于各分支的差異僅在卷積核大小上,提取的特征冗余較多,融合后的特征并不能較好地代表多尺度信息,因此效果不太理想,但其多列分支提取多層特征的思想影響了后續很多工作的發展.另一種進行多尺度檢測的思路是使用密度級別分類器將圖像區域劃分密度等級,對不同等級的區域使用不同模塊處理.如Sam 等[10]提出Switch CNN 將人群密度定義為高低中3 個級別,圖像被分為不同小塊,各塊根據其密度級別送入相應網絡進行處理.Rubio 等[11]則是將輸入圖像轉換為圖像金字塔,金字塔的各層對應著不同尺度的圖像輸入,分別送入網絡提取多尺度特征.但密度級別分類算法存在級別定義不明、計算量大、分類器精度難以把控等問題.
最近一些研究著重設計特殊的網絡結構來提升網絡性能,如Babu 等[12]提出的TDF-CNN 采用一種自下而上和自上而下交叉的特殊結構來獲取更精確的特征圖.Li 等[13]提出的CSRNet 使用了多層空洞卷積以加強特征圖的表達能力.Zhang 等[14]采用注意力機制,其設計的RA-Net 疊加全局注意力特征與局部注意力特征,并提出拼接、相加和卷積3 種融合方式.Guo 等[15]提出的DADNet 在網絡中引入空洞卷積、可形變卷積與注意力機制,網絡結構更加復雜,計數精度有一定提升.
針對多尺度問題,本文從特征融合角度出發,設計了兩種特殊融合結構,基于注意力加權融合(AWF)模塊與自底向上融合(BUF)模塊.AWF 模塊采用多分支并行融合的方式匯聚不同層次的特征,相比單分支網絡能捕捉到更多的信息,為了避免多層分支信息的冗余,采用注意力機制為每層特征分配權重,從而提高特征圖的精度.BUF 模塊中將不同尺度的特征信息逐層融合.為了避免淺層信息丟失,BUF 模塊引入空洞卷積增強特征表達能力,同時在最后一層使用注意力分支學習特征權重,進一步改善特征圖.因此,相比其他多分支結構或單分支網絡,AWF和BUF 模塊的引入可以獲取更高效的特征圖,降低密度圖的預測誤差.在各個公開人群數據集上進行實驗,與未加入融合模塊的網絡和其他的人群計數算法進行對比,結果表明,本文提出的注意力加權融合方式確實可以進一步提升網絡性能,降低計數誤差.
如圖1所示,本文設計人群算法的整體架構由骨干網絡、融合模塊和解碼模塊3 部分構成.算法使用骨干網絡提取多尺度圖像特征,然后將不同層次的輸出特征送入融合模塊進行處理,解碼模塊則負責最終密度圖的預測,密度圖的積分值即為預測人數.

圖1 算法結構
骨干網絡是網絡的特征提取部分,通常選取一些基礎神經網絡結構.該部分提取的是較為淺層的圖像特征,因此本文在骨干網絡后面增加了融合模塊,其作用是將淺層特征進一步融合,融合后的特征圖具有更強的特征表達能力.但融合特征圖是一個多通道的特征圖,同時它的分辨率遠遠小于輸入圖像,所以最后將融合特征圖送入解碼模塊進行降維和分辨率的放大,最終得到一個與輸入圖像分辨率相同的單通道密度圖.
多列卷積網絡存在訓練困難和特征圖冗余大的問題,而單列卷積網絡在人群計數任務上的有效性已經在CSRNet 模型上得到證實,CSRNet 以經典的單列卷積網絡VGG[16]為骨干提取特征,使用空洞卷積作為解碼器就能超越大多數多列網絡的性能.但VGG 完全由卷積-池化-激活模塊順序疊加,在較深的特征層上會忽視掉很多淺層信息,因此本文選取引入跨層連接方式的ResNet50為骨干網絡.
ResNet 網絡的基本結構是殘差塊,其特點是淺層信息通過跨層連接方式直接疊加到主干分支的輸出上.具體連接方式如圖2,輸入為x,主干支路輸出為F(x),則整個殘差塊的輸出為y=F(x)+x.殘差塊的特殊連接方式可以讓網絡在較深層中保留淺層特征,解決網絡過深時梯度消失導致網絡性能退化的問題.

圖2 殘差塊
ResNet 可以看作多個殘差塊串聯的網絡,根據卷積層和全連接層的個數進行不同的配置.本文使用的是ResNet50,它的各層參數原始配置如表1所示,其中n×Residual 層表示n個殘差塊的串聯,每個殘差塊的主干支路是3 個參數不一的卷積層.ResNet50 分為6 個部分,除去頭尾的卷積池化和全連接層,中間4 部分由重復次數不一的殘差塊串聯組成,各層殘差塊的重復次數分別是3、4、6、3,表1中的網絡輸入圖像尺寸設置為256×256,output 列表示每一層的特征圖輸出大小.

表1 ResNet50的各層參數配置
原始ResNet50是分類模型,因此網絡最后一層采用了全連接層和Softmax 函數預測類別輸出,而在人群計數網絡中需要的輸出是特征圖而非類別,故刪除最后的全連接層和激活函數,同時為了提取不同層次級別的特征信息,本文抽取出網絡中layer2、layer3、layer4的輸出作為3 層初級圖像特征送入融合模塊,各層的輸出尺寸可以通過各層的卷積核步長控制.
最終采用作為特征提取模塊的ResNet50 結構如圖3所示,原始ResNet50 配置中的layer4 輸出特征圖分辨率太小,因此將layer2中3×3 卷積核的步長大小修改為1,最終輸出特征圖的形狀格式為512×64×64、1024×32×32和1024×16×16.

圖3 特征提取模塊
從骨干網絡中提取出3 個層級的特征圖后,對多層特征的處理通常有兩種方法:先各自預測一個輸出,然后整合不同級別的輸出結果;先融合各層特征然后進行預測輸出.本文設計的融合模塊都采用第二種方法,將提取到的不同層級特征送入一個融合模塊后再進行預測.
本文設計的第一種融合模塊為注意力加權融合,結構如圖4所示,其中Conv2D 表示特征圖的處理部分,由卷積層和SE 模塊[17]串聯而成,Up 表示雙線性上采樣.

圖4 注意力加權融合
AWF 模塊的輸入是3 個尺寸和通道數都不同的特征圖,每個特征圖送入對應的處理分支,3 個分支的輸出特征圖逐次疊加.每個處理分支由兩列(1×1 卷積)→(BN 層)→(3×3 卷積)→(BN 層)→(1×1 卷積)→(BN 層)→(ReLU 激活層)→(SE 模塊)的串聯結構組成.其中一列輸出為多通道,另一列為注意力分支,輸出為單通道,將兩列特征圖相乘后作為該分支的輸出.
SE 模塊如圖5所示,它的作用是在特征圖通道數較多的層中調整通道權重,SE 模塊使用額外一個分支學習每個通道的權重對原始特征圖按通道進行重新組合.融合結構中使用了兩次上采樣層,目的是便于相鄰層特征圖疊加.各層特征經過各自分支處理后進行疊加的方式是按元素相加,融合后的特征圖尺寸和淺層較大的特征圖尺寸相同,即64×64,通道數為512.

圖5 SE 模塊
注意力加權融合結構在處理輸入特征圖時引入一個與主列結構類似的注意力分支,目的是學習特征圖的權重映射.通過為特征圖逐像素分配權重的方式,實現對信息的聚焦,權重系數大小體現該位置特征的重要程度,讓模型更關注人群目標區域,而不是圖像背景等無關區域,因此加權融合后的特征具有更強的表達能力.
AWF 模塊的處理方式是各層級的輸入特征分別進行優化再進行相加融合,本文設計的另一種融合模塊,自底向上融合(BUF)模塊則按照由淺到深的順序依次融合3 個特征,其具體結構如圖6所示.f1、f2、f3 分別是ResNet50中的layer2、layer3和layer4 輸出,f1 通過一個卷積塊處理后與f2 按通道方向進行拼接,再進行卷積運算得到f4.f3 與f4 通過加權疊加,權重系數a1為f3 卷積輸出的單通道特征值.

圖6 自底向上融合
和AWF 模塊中的卷積類似,各個conv 塊由(1×1卷積)→(BN 層)→(3×3 卷積)→(BN 層)→(1×1 卷積)→(BN 層)→(ReLU 激活層)的串聯結構構成,1×1 卷積作用是通道變換,3×3 卷積負責降采樣和特征學習.f1、f2、f3 本身是骨干網絡的不同層級輸出,如果采用普通卷積運算后拼接,可能產生較多的冗余,因此3×3 部分采用的是空洞率為2的空洞卷積,目的是在更大的感受野上獲取更多的特征信息.另外f3和f4 疊加時只使用一個卷積塊學習特征權重,而不是分別學習權重系數,目的是減少參數量.f3和f4 共用權重系數,最終輸出output=a1*f3+(1-a1)*f4,其尺寸和輸入的深層特征圖尺寸相同,是16×16,通道數為2048.
BUF 模塊使用空洞卷積,在不增加參數量的情況下能捕獲更多上下文信息,減少傳輸過程中的淺層信息丟失,同時只在最后一層使用卷積層學習特征圖權重,相比AWF 使用多個分支學習權重的方法,BUF 具有更小的參數量,結構更加簡潔.
多尺度特征經過AWF 模塊或BUF 模塊融合,最后進入解碼模塊預測圖像密度圖.
解碼模塊的結構如圖7所示,輸入f是融合后的特征圖,經過兩個conv 層和上采樣層Up 后輸出最終的密度圖.conv 層的作用是降低特征通道數,由1×1 卷積和ReLU 激活函數構成.Up 層是對特征圖進行雙線性插值,使輸出密度圖的分辨率與輸入圖像一致.

圖7 解碼模塊
人群計數數據集的標注是對圖像中人頭中心坐標的點標注,實驗需要預先將數據集的點標簽轉換為密度圖標簽.本文采用自適應高斯核濾波器對坐標點位置進行處理,假設一個人頭大小是3×3 像素,如圖8(a)所示.使用濾波模糊后的密度圖如圖8(b),各個像素點的概率值之和為1,對整張圖的所有人頭區域進行濾波,即可得到完整圖像的密度圖標簽.

圖8 高斯濾波器生成密度圖標簽
像素位置xi處存在人頭,則點標簽的對應處為1,可以用脈沖函數 δ (x-xi) 表示,一張圖的人頭數量是N,那么圖像可以表示為
選擇自適應高斯核濾波器Gσ=其中方差 σ=,超參數 β=0.3,表示位置的k 個鄰近人頭點的平均距離,即根據目標之間的密集程度自動調整方差大小,從而生成不同的高斯模板.高斯濾波后的密度圖為F(x)=H(x)*Gσ,對其積分就可得到圖像中的人頭數量.
損失函數用于衡量網絡輸出與真實標簽之間的誤差,本文采用的是歐幾里得距離損失Le與密度一致性損失Lc[18]加權求和作為網絡整體損失函數,其計算公式如下.

其中,系數 λ是常數,通常取100,兩種損失的表達式分別如式(2)和式(3)所示.

其中,N表示數據集中的圖像數量,表示圖像Xi的預測密度圖,Gti表示該圖像的真實密度圖,s表示尺度級別數,Pavg表示平均池化操作,k表示池化后的輸出大小.Le損失逐像素計算預測密度圖與真實密度圖的誤差,是像素級的誤差.密度一致性損失衡量的則是局部區域的誤差,其比較的是將池化后的特征圖差異.文中設置了3 個尺度級別,即s=3,平均池化的輸出尺寸依次是1×1、2×2和4×4.
對模型的性能評價采用平均絕對誤差MAE和均方誤差MSE兩個指標,其計算公式如下:

其中,N表示測試的圖片數量,zi表示預測的人數,zi'表示該圖像的實際人數.MAE即在測試集上預測的人數與實際人數的平均誤差,反映了模型的準確性.MSE則是度量預測人數與實際人數的偏離程度,可以反映模型的魯棒性.兩個指標值都是越低越好.
為了驗證算法的有效性,本文選擇了公開數據集Shanghai Tech[9]和UCF_CC_50[6]作為實驗數據,數據集信息如表2所示,其中Shanghai Tech 數據集分為A、B 兩部分.A 部分(SHHA)圖像分辨率不統一,場景人群密度較大,B 部分(SHHB) 圖像分辨率均為768×1024,人群密度較低.UCF_CC_50的圖像數量較少,但圖像分辨率不統一,人群密度極大.

表2 數據集信息
3個數據集涵蓋了低分辨率、高分辨率、低人群密度和高人群密度場景圖像,能夠較好評估算法的性能.Shanghai Tech 數據集已經劃分好訓練集和測試集,其中SHHA中的訓練集共300 張圖像,測試集182 張圖像,SHHB的訓練集和測試集圖像數分別是400和316.而UCFCC_50 僅為50 張零散圖像,為了便于對比,采用業界通用的交叉驗證劃分方法,即每次選擇不同的10 張圖像作測試集,剩余圖像作訓練集,將五次的測試結果均值作為最終的測試結果.
實驗環境基于Ubuntu 18.04 操作系統,采用PyTorch 深度學習框架,CPU和GPU 配置為Intel(R)Xeon(R) Silver 4116和NVIDIA Tesla K80.
在數據處理階段,本文使用了分塊訓練.具體操作是使用滑窗法裁剪數據集,并在裁剪過程中進行隨機翻轉擴充訓練集.裁剪和翻轉操作可以擴大數據集并讓訓練集的圖像分辨率相同,方便訓練.訓練完成后,在模型性能測試階段,對測試集上的圖像也進行裁剪,最后疊加各塊的密度圖結果.
另外,對于訓練集和測試集都進行了歸一化處理,即先計算整個數據集圖像的均值和方差,按照該均值和方差對每張圖像進行歸一化處理,再送入網絡訓練和測試.由于高斯濾波器生成的密度圖的像素值很小,范圍0–1.如果直接進行訓練,很容易出現梯度彌散現象,因此實驗中對數據集的密度圖標簽進行等比例放大,放大系數為100.
融合算法的骨干網絡部分是ResNet50,在初次訓練時的初始化為采用預訓練權重初始化.預訓練權重可以加快網絡收斂,減少訓練時間.而網絡的后半部分是自定義的融合結構和解碼模塊,采用的初始化方式是kaiming 初始化和0 初始化方式,其中卷積核初始化是kaiming 初始化,其余層如BN 層等采用0 初始化.訓練初始學習率為0.000 1,衰減方式為按輪次衰減,每隔10 輪學習率衰減為上一次的0.95 倍,總訓練輪數為500 輪,優化損失采用Adam 算法.
為了驗證本文算法的有效性,實驗中與近年的不同類型網絡進行對比,在各個數據集上的測試結果如表3所示.其中MCNN是多列網絡,各列由簡化的VGG結構組成;MSCNN[19]則是由若干個多列結構Inception模塊串聯而成;RANet 以Hourglass 結構[20]為特征提取器;CSRNet和PACNN[21]是以VGG為骨干的單列計數網絡;DUBNet[22]是基于ResNet50的多輸出網絡.實驗中對比的模型基本涵蓋了當前人群計數領域的各種類型方法,結果較為客觀全面.
從表3可以看出,相對其他方法,引入融合模塊的算法在高低密度場景下都有較好表現.在SHHA和SHHB 數據集上,引入AWF 模塊后的MAE和MSE都達到最優.在高密度的UCF_CC_50 上,MAE降低到212,超過其他算法.同時AWF 模塊在Shanghai Tech 數據集上的誤差略優于BUF 模塊,但在UCF_CC_50 數據集上AWF和BUF的誤差相差較大,整體而言AWF 模塊性能更優.

表3 實驗結果對比
圖9和圖10分別展示了兩種算法在各個數據集上的預測結果,其中圖9表示引入AWF 模塊的計數算法,第1 行是3 個數據集中的原始圖像,第2 行表示對應的真實密度圖和標記人數,第3 行表示預測結果,第4 行是預測密度圖與原始圖像疊加的結果比較.圖10表示使用BUF 模塊的結果,3 張測試的圖像和圖9相同,因此圖10只顯示了引入BUF的模型預測密度圖與其在原始圖像上的疊加效果.從圖9和圖10的結果可以看出,在3 個數據集上,兩種模型都能取得較好的預測效果.

圖9 AWF 模塊測試圖片結果

圖10 BUF 模塊測試圖片結果
為進一步測試AWF和BUF 結構的性能,在SHHA數據集上進行消融實驗.選取人群計數領域常用的骨干結構VGG16,在其基礎上加入AWF和BUF 模塊,對比ResNet50 進行實驗.各種模型的解碼模塊與第3.4 節實驗中的設置相同,各自測試結果如表4所示.

表4 消融實驗
ResNet50 在SHHA 數據集上的MAE可以達到54.9,誤差低于VGG16的72.6,表明ResNet50的效果優于VGG16,可見使用了殘差塊的ResNet50 能夠更好的提取網絡特征.而兩種網絡在加入AWF 模塊和BUF 模塊后的MAE均有8~10的提升,表明兩種模塊對多層特征的復用是有效的,AWF和BUF 可以靈活嵌入各種骨干網絡,融合多尺度特征,提升網絡性能,其中AWF的結構比BUF 更復雜,參數量更大,但效果更好.
本文針對人群計數網絡在密集場景下檢測困難,多尺度信息利用不足等問題,提出兩種多尺度特征圖融合方式:注意力加權融合AWF 與自底向上融合BUF.AWF 模塊在特征圖處理過程中引入注意力分支學習特征圖權重,加權后的特征圖再進行逐層疊加融合.BUF 模塊由淺到深依次融合多層特征,較淺的兩層特征處理后按照通道順序拼接,然后與最深層的特征進行加權融合.在幾個公開數據集上進行實驗,結果表明兩種融合結構都能有效提高網絡性能.以ResNet50為骨干網絡,AWF為融合層的人群計數算法在Shanghai Tech 數據集上的絕對誤差降低到45.539和7.6,均方誤差降低至100.283和11.4,遠超其他計數網絡.在高密度的UCF_CC_50 數據集上,MAE降低至212.42,優于其他算法,引入BUF 融合層的算法效果略差于AWF,但相對現有方法仍有較大提升.在SHHA 數據集上的消融實驗表明兩種模塊的有效性,它們不僅可以嵌入ResNet50,在其他骨干網絡中嵌入也可以實現降低計數誤差的效果.
AWF和BUF 模塊的有效性證明了從特征融合的角度來設計網絡結構對人群計數算法性能的提升是有效的,但新模塊的加入帶來了參數量的增長.在未來的工作中,本文將進一步研究更高效的改進方式,設計更輕量高效的即插即用模塊.