吳青科,吳 曉,袁雨陽,官鋅強(qiáng)
西南交通大學(xué) 機(jī)械工程學(xué)院,成都610031
隨著中國城市化的推進(jìn),人口逐漸向城市聚集,出現(xiàn)了大批人口超500萬的大型城市,而且伴隨著經(jīng)濟(jì)的增長,人民的精神需求日益增長,越來越多的人選擇外出旅行,參加演唱會等活動(dòng),隨之而來的就是人群集會數(shù)量和頻率的暴增,對城市安防帶來新的挑戰(zhàn)。人群計(jì)數(shù)就是通過監(jiān)控系統(tǒng)拍攝的視頻或視頻幀獲得行人數(shù)量和分布情況,監(jiān)控獲取人群圖像如圖1所示。目前人群計(jì)數(shù)主要分為直接檢測法和回歸計(jì)數(shù)法[1]。Felzenszwalb等人[2]使用行人檢測、行人軌跡聚類等方法,通過直接對圖像中的每個(gè)行人個(gè)體進(jìn)行檢測來計(jì)數(shù)。Lin等人[3]為頭部輪廓提取了Haar特征,并使用支持向量機(jī)(Support Vector Machine,SVM)分類器來判斷提取特征是否為頭部輪廓特征。這些直接測量的方法雖然完成計(jì)數(shù)簡單,但極易受到背景噪聲和遮擋的干擾,只適用于低密度人群計(jì)數(shù),無法適用于高密度人群計(jì)數(shù)。為了解決密集人群計(jì)數(shù)的遮擋和環(huán)境復(fù)雜等問題,一些學(xué)者[4-6]選擇使用回歸的方法,通過構(gòu)建回歸函數(shù)并用其學(xué)習(xí)圖片中的信息來直接估計(jì)圖片中的總?cè)藬?shù)。Lempitsky等人[7]通過學(xué)習(xí)人群圖像與人群真實(shí)密度圖之間的線性映射關(guān)系來預(yù)測人群密度圖。
圖1 ShanghaiTech數(shù)據(jù)集部分圖片
近幾年,隨著機(jī)器學(xué)習(xí)研究的突破性進(jìn)展,基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的方法在人群計(jì)數(shù)領(lǐng)域獲得了較好的效果。Zhang等人[4]提出了一種多列卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(Multi-column CNN,MCNN)。每列卷積神經(jīng)網(wǎng)絡(luò)具有不同大小卷積核和深度,尺寸較小的卷積核是為了學(xué)習(xí)人群密集圖像中較小人物的頭部特征,尺寸較大的卷積核則用于學(xué)習(xí)尺寸較大人物的頭部信息,最后將多列神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)到的特征圖聚合在一起,用尺寸為1×1的卷積核來將所有特征圖回歸為人群密度圖。Vishwanath等人[8]將先驗(yàn)知識與密度圖估計(jì)人數(shù)結(jié)合在一起,網(wǎng)絡(luò)結(jié)構(gòu)分為兩部分,這兩部分共享一組卷積特征。第一部分通過全連接層將圖片按照人數(shù)大小分為幾個(gè)等級,第二部分使用與MCNN類似的結(jié)構(gòu)來預(yù)測人數(shù),最后通過損失函數(shù)將這兩部分結(jié)合在一起。密度圖估計(jì)人數(shù)與圖像人數(shù)等級相關(guān),這種對圖像人數(shù)進(jìn)行預(yù)分級的方法獲得了較好的結(jié)果。Sam等人[9]提出一種Swith-CNN的網(wǎng)絡(luò)結(jié)構(gòu)。首先將一張圖片分為大小相同的9個(gè)塊,接著使用一個(gè)卷積神經(jīng)網(wǎng)絡(luò)來大致估計(jì)每個(gè)圖像塊的人數(shù),根據(jù)人數(shù)的大小分為3類,對每類圖像塊使用不同的卷積神經(jīng)網(wǎng)絡(luò)模塊來更加精確地估算其人數(shù)。在訓(xùn)練時(shí)對3個(gè)分支進(jìn)行獨(dú)立的訓(xùn)練,每個(gè)分支的訓(xùn)練數(shù)據(jù)分別為整個(gè)數(shù)據(jù)集中對應(yīng)于此類的圖像塊。本文對MCNN進(jìn)行改進(jìn)并將其與更深的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)結(jié)合,提出一種神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)VMNet,并在ShanghaiTech數(shù)據(jù)集上證明了它的有效性。
2 VMNet網(wǎng)絡(luò)結(jié)構(gòu)
通常人群圖像是基于各種角度拍攝的,且由于拍攝器材不同會造成透視失真和分辨率變化較大,從而同一張或不同圖片中的頭部特征變化非常大。為了解決這個(gè)問題,需要使用不同大小感受野的卷積核來自動(dòng)提取圖片中的頭部特征變化信息。每個(gè)神經(jīng)元可看作一個(gè)濾波器,在CNN的初始幾層,可以學(xué)習(xí)到諸如像素邊緣、輪廓等底層細(xì)節(jié)特征,隨著層數(shù)的不斷加深,CNN可自適應(yīng)地從底層特征中學(xué)到諸如人臉特征、頭部形狀、場景特征等高級語義信息。CNN的神經(jīng)元能自適應(yīng)地學(xué)習(xí)圖片中的語義信息,并不需要人為地干預(yù)選擇。需要人為設(shè)置的是神經(jīng)元個(gè)數(shù),這個(gè)參數(shù)決定了網(wǎng)絡(luò)提取的語義信息種類數(shù)。通過不同深度的多列神經(jīng)網(wǎng)絡(luò)MCNN可以很高效地提取圖片中的底層和高級語義信息。實(shí)驗(yàn)[10]表明,相較于用大尺寸的卷積核來構(gòu)建較淺的神經(jīng)網(wǎng)絡(luò),使用較小尺寸的卷積核來構(gòu)建更深的卷積神經(jīng)網(wǎng)絡(luò)有更多的非線性,這使得結(jié)果更加具有判斷性,效果更好。而且通過使用多個(gè)小尺寸卷積核堆疊來代替大尺寸卷積核可以減少參數(shù)量,使得模型計(jì)算更加迅速。
在多列神經(jīng)網(wǎng)絡(luò)部分,使用3列不同深度、不同卷積核大小的卷積神經(jīng)網(wǎng)絡(luò),這3列神經(jīng)網(wǎng)絡(luò)可以較有效地學(xué)習(xí)到不同尺寸的人物頭部特征信息,再將這3列神經(jīng)網(wǎng)絡(luò)合并在一起,并用大小為1×1的卷積核來將卷積得到的結(jié)果回歸為人群密度圖。很多學(xué)者選擇在分支網(wǎng)絡(luò)中使用池化操作來降低參數(shù)量[11],再通過解卷積操作將密度圖回歸到和原始圖像相同大小。雖然池化操作可以非常有效地降低參數(shù)量和控制過擬合,但同時(shí)也使特征圖的空間分辨率大大降低,損失了很多內(nèi)部數(shù)據(jù)結(jié)構(gòu)信息和空間層級化信息。而且分辨率的降低也使得一些小物體信息無法重建,即使在神經(jīng)網(wǎng)絡(luò)后部使用解卷積操作可以減少信息的損失,但是解卷積操作也同時(shí)帶來了更多的參數(shù)和復(fù)雜性,并不能在所有情況下都得到比較好的結(jié)果。多個(gè)實(shí)驗(yàn)表明[12-13],使用空洞卷積來進(jìn)行卷積操作可以較好地代替池化層,在不降低圖像分辨率和引入更多參數(shù)的情況下,增大了卷積核的感受野,使得卷積神經(jīng)網(wǎng)絡(luò)可以更快更好地學(xué)習(xí)參數(shù),將上下層信息更靈活高效聚合在一起。空洞卷積原理如圖2所示。
圖2 不同擴(kuò)張率同尺寸卷積核結(jié)構(gòu)
VGGNet[14]深度卷積神經(jīng)網(wǎng)絡(luò)通過反復(fù)使用3×3的卷積核和2×2的最大池化層構(gòu)建了16~19層深的卷積神經(jīng)網(wǎng)絡(luò)。因其極高的深度和較小尺寸的卷積核,在訓(xùn)練時(shí)VGGNet的收斂速度很快,泛化性能較好,常用于提取圖片特征。本文結(jié)合了VGG16神經(jīng)網(wǎng)絡(luò)與多列特征圖融合技術(shù),對VGG16網(wǎng)絡(luò)進(jìn)行改動(dòng),只保留其中的8個(gè)卷積層和3個(gè)池化層,用于提取圖片中的特征信息。接著在后端使用3個(gè)全卷積分支網(wǎng)絡(luò)進(jìn)行學(xué)習(xí),3個(gè)分支分別使用1×1、3×3、5×5的卷積核。最后再將這3個(gè)分支得到的特征圖融合在一起,用1×1的卷積將其回歸為人群密度圖,設(shè)計(jì)出一種新的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)VMNet。整個(gè)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示,由特征提取模塊和多列CNN模塊組成。
多列特征圖聚合模塊用于學(xué)習(xí)圖像中的高級語義信息。第一列神經(jīng)網(wǎng)絡(luò)有6層,卷積核均為3,dilation設(shè)置為2,這一分支可在不增加參數(shù)的情況下捕捉并學(xué)習(xí)到更大視野的語義信息,通道數(shù)從512層逐漸降低到32層。第二列神經(jīng)網(wǎng)絡(luò)有4層,卷積核均為5,同樣將dilation設(shè)置為2,這列屬于第一列的擴(kuò)展,在適量增加參數(shù)的情況下使感受野得到了更大地?cái)U(kuò)張,目的是為了學(xué)習(xí)大尺寸人物的頭部語義信息,通道數(shù)從128逐步降低到32層。第三列神經(jīng)網(wǎng)絡(luò)為6層,卷積核均為1,dilation設(shè)置為1。這一層的主要目的是為了對數(shù)據(jù)進(jìn)行降維,同時(shí)由于網(wǎng)絡(luò)較深,可以在不改變特征圖分辨率的情況下大大增加其非線性表達(dá)能力。在網(wǎng)絡(luò)的最后,使用1×1的卷積核,將3列神經(jīng)網(wǎng)絡(luò)的特征圖融合為一個(gè)通道,得到預(yù)測的人群密度圖。在激活函數(shù)的選擇上,即使很多實(shí)驗(yàn)表明PReLU[15]一定程度上緩解了神經(jīng)元的“壞死”問題,在訓(xùn)練時(shí)可獲得更好的效果,因人群密度不存在負(fù)值,為了不引入更多參數(shù),不選擇PReLU作為激活函數(shù)。在VMNet中,均選擇ReLU函數(shù)作為激活函數(shù),只是在訓(xùn)練時(shí)需要設(shè)置一個(gè)合適的較小的學(xué)習(xí)速率來避免神經(jīng)元“壞死”現(xiàn)象。
對于密集人群計(jì)數(shù),由于行人的身體互相遮擋和透視失真,如果使用人體軀干作為識別目標(biāo)效果會很差,目前最有效的方法是使用行人頭部作為識別目標(biāo),因?yàn)轭^部不容易被遮擋且更容易識別,可獲得較好的識別效果。本文使用基于幾何自適應(yīng)高斯核的計(jì)算方法來進(jìn)行人群密度圖計(jì)算[16]。通常用于人群計(jì)數(shù)的數(shù)據(jù)集會將所有人頭位置標(biāo)記出來,通過這些標(biāo)記可以求得人群密度圖。設(shè)一張圖片的第i個(gè)人的頭部中心像素坐標(biāo)為xi,整張圖片有N個(gè)人,高斯核函數(shù)為Gσ,則可以得到密度聚集函數(shù)F(x)如式(1)所示。
其中,x代表圖片中像素的位置,因此可用δ(x-xi)表示圖片中的人頭位置,因在復(fù)雜人群條件下,要想得到頭部準(zhǔn)確尺寸是非常困難的,所以只能通過使用帶標(biāo)準(zhǔn)偏差σi的高斯核與δ(x-xi)進(jìn)行卷積來得到人群密度函數(shù)F(x)。表示xi旁邊k個(gè)距離最近的人的平均距離,函數(shù)可根據(jù)每個(gè)人的頭部位置自適應(yīng)地選擇σi。有實(shí)驗(yàn)[17]表明,β=0.3時(shí),得到的人群密度圖效果較好。
參考目前最有效的方法,本文選擇使用歐式距離來測量預(yù)測人群密度圖與真實(shí)人群密度圖的差值[18]。損失函數(shù)表達(dá)式如式(2)所示。
式(2)中,N是訓(xùn)練集的圖片數(shù)量,Xi代表輸入圖像,V(Xi,θ)代表預(yù)測人群密度圖,θ是VMNet神經(jīng)網(wǎng)絡(luò)中一組可學(xué)習(xí)的參數(shù),Vi代表對應(yīng)于Xi的真實(shí)人群密度圖。
因訓(xùn)練集中只有幾百張圖片,如果直接使用訓(xùn)練集中的圖像來進(jìn)行訓(xùn)練很可能會導(dǎo)致過擬合,需要對訓(xùn)練數(shù)據(jù)集進(jìn)行擴(kuò)充。本文將每張訓(xùn)練集的圖片裁剪為4個(gè)大小相同且互不重疊的塊。將這些分割好的圖像塊作為訓(xùn)練集對模型進(jìn)行訓(xùn)練,可將訓(xùn)練集擴(kuò)大4倍,有效緩解了過擬合現(xiàn)象。訓(xùn)練集圖片采樣方式如圖4所示。
為保證神經(jīng)網(wǎng)絡(luò)的正常訓(xùn)練,需要預(yù)先初始化參數(shù),否則可能導(dǎo)致網(wǎng)絡(luò)中的部分神經(jīng)元無法激活。本文對神經(jīng)網(wǎng)絡(luò)參數(shù)進(jìn)行了標(biāo)準(zhǔn)差為0.01的高斯初始化。優(yōu)化器選用隨機(jī)梯度下降(Stochastic Gradient Descent,SGD)優(yōu)化器,為加快模型收斂速度,設(shè)置動(dòng)量為0.95,以lE-7作為固定的學(xué)習(xí)速率進(jìn)行訓(xùn)練。對于數(shù)據(jù)加載器Dataloader,不使用批訓(xùn)練,即設(shè)置batch size為1可以得到更好的訓(xùn)練效果。
圖3 VMNet神經(jīng)網(wǎng)絡(luò)總體結(jié)構(gòu)圖
圖4 訓(xùn)練集圖片采樣方式
在得到預(yù)測人群密度圖之后,需要對預(yù)測人群密度圖進(jìn)行積分來得到估計(jì)人數(shù)。選擇廣泛使用的平均絕對誤差(Mean Absolute Error,MAE)和均方誤差(Mean Square Error,MSE)作為模型的評價(jià)標(biāo)準(zhǔn),其表達(dá)式分別如式(3)、式(4)所示。
其中,N表示測試集中圖片數(shù)量,Ri代表從預(yù)測人群密度圖計(jì)算得到的估計(jì)人數(shù),代表圖片實(shí)際人數(shù)。MAE越小說明識別人數(shù)越準(zhǔn)確,MSE越小說明算法魯棒性越好。
實(shí)驗(yàn)基于64位Windows10操作系統(tǒng),深度學(xué)習(xí)框架選用Facebook開源的動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)框架Pytorch,使用的顯卡為顯存11 GB的NVIDIA GTX 1080Ti,處理器為Intel?Xeon?Silver 4116。
實(shí)驗(yàn)選擇ShanghaiTech數(shù)據(jù)集作為測試對象,它是上??萍即髮W(xué)公開的一個(gè)數(shù)據(jù)集[4],分為Part_A和Part_B兩部分,總共擁有1 198張圖片,總共標(biāo)注了330 165個(gè)人。Part_A擁有482張圖片,均是直接從互聯(lián)網(wǎng)上得到的,其中300張圖片作為訓(xùn)練集,其余182張作為測試集;Part_B擁有716張圖片,全部來自于上海街頭的監(jiān)控視頻,其中400張圖片作為訓(xùn)練集,其余316張圖片作為測試集。ShanghaiTech數(shù)據(jù)集是目前最大的人群計(jì)數(shù)數(shù)據(jù)集,其中Part_A和Part_B的人群密度差異較大,因此選擇ShanghaiTech數(shù)據(jù)集作為實(shí)驗(yàn)數(shù)據(jù)十分具有難度。
為了對比多列特征圖聚合模塊各分支網(wǎng)絡(luò)與VMNet的性能,將該模塊中的3列分別用于模型訓(xùn)練,訓(xùn)練過程中MAE隨迭代次數(shù)的變化如圖5所示。
圖5 Part_A訓(xùn)練過程MAE變化曲線
實(shí)驗(yàn)結(jié)果表明,使用單列神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練時(shí),Conv3_2與Conv5_2將MAE降低到110左右便收斂了,Conv1_1甚至無法收斂,一直在300到350之間波動(dòng)。當(dāng)將3列網(wǎng)絡(luò)聚合在一起時(shí),相較于使用單列神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,MAE大幅下降。同時(shí)也可以看出,使用多列特征圖聚合模塊進(jìn)行訓(xùn)練,收斂速度相較于單列網(wǎng)絡(luò)更慢,這是因?yàn)閰?shù)增多,網(wǎng)絡(luò)變復(fù)雜導(dǎo)致的。
圖6 Part_A測試集部分圖像及其密度圖
圖7 Part_B測試集部分圖像及其密度圖
使用本文所述方法生成的Part_A和Part_B人群密度圖分別如圖6和圖7所示。第一列是真實(shí)人群圖像,第二列是根據(jù)真實(shí)人頭位置生成的真實(shí)人群密度圖,第三列是使用本文方法生成的預(yù)測人群密度圖。從圖6、圖7中可以看出,本文所提方法生成的人群密度圖與真實(shí)密度圖較為相近,估算人數(shù)的準(zhǔn)確度也較高,表現(xiàn)出相當(dāng)高的精度和魯棒性。
在ShanghaiTech數(shù)據(jù)集上測試,與Switching-CNN算法相比,Part_A測試集的MAE下降了20.35%,MSE下降了20.07%;Part_B測試集的MAE下降了53.24%,MSE下降了52.09%。與MSCNN算法相比,Part_A測試集的MAE下降了14.08%,MSE下降了15.31%;Part_B測試集的MAE下降了42.94%,MSE下降了47.02%??梢钥闯鯲MNet相較于這些同樣基于卷積神經(jīng)網(wǎng)絡(luò)的算法,預(yù)測人數(shù)準(zhǔn)確率和算法魯棒性均有大幅提高,證明了VMNet結(jié)構(gòu)的有效性。相較于不同算法在ShanghaiTech數(shù)據(jù)集上的測試結(jié)果如表1所示。
表1 不同算法在ShanghaiTech數(shù)據(jù)集上測試結(jié)果
本文使用更深的網(wǎng)絡(luò)結(jié)構(gòu),并將多列卷積神經(jīng)網(wǎng)絡(luò)生成的特征圖融合來預(yù)測圖像的人群密度圖,然后通過預(yù)測的人群密度圖來得到人群總數(shù)。相較于以往較淺的卷積神經(jīng)網(wǎng)絡(luò),VMNet可以從圖片中學(xué)到更多的語義信息,即使在人群密集、人物遮擋嚴(yán)重、環(huán)境復(fù)雜的情況下也可以獲得較好的識別效果。在ShanghaiTech數(shù)據(jù)集上的實(shí)驗(yàn)也表明VMNet相較于深度較淺的MCNN準(zhǔn)確率大幅提高,適用于人群密集或密度變化較大的場合。