李 歡,陳先橋,施 輝,楊 英,龔
(1.武漢理工大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,湖北 武漢 430063;2.武漢理工大學(xué) 交通物聯(lián)網(wǎng)技術(shù)湖北省重點實驗室,湖北 武漢 430063;3.交通運輸部 水運科學(xué)研究院 電控信通中心 通導(dǎo)室,北京 100088)
行人檢測是計算機視覺中的一個重要研究方向,在人群密集遮擋嚴重場景檢測效果差強人意,于是行人頭部檢測方法應(yīng)運而生,監(jiān)控視頻中的人群計數(shù)被認為是頭部檢測最重要的應(yīng)用之一。行人檢測方法主要分為兩大類[1]:一是基于背景建模方法,提取前景運動目標;二是基于統(tǒng)計學(xué)習(xí)的方法,利用大量樣本建立分類器。
當(dāng)前,學(xué)術(shù)界關(guān)于行人檢測的方法有很多。Tian等[2]構(gòu)造了身體的部分池,利用深度學(xué)習(xí)對身體的每個部分進行訓(xùn)練,使用互補的部分檢測器推斷行人全身得分,通過局部檢測提升行人遮擋時的檢測精度。文獻[3]基于Faster R-CNN網(wǎng)絡(luò)構(gòu)建了滿足實時性要求的人頭檢測網(wǎng)絡(luò)。文獻[4]使用兩個邊框來標記完整行人和行人的可見部分,訓(xùn)練行人檢測和遮擋估計兩個分支網(wǎng)絡(luò)完成對嚴重遮擋情況下的行人檢測。文獻[5]利用ZF網(wǎng)絡(luò)原型對行人頭部建模,融合空間金字塔池化層來進行人頭檢測,該方法實時性不高。文獻[6]融合了Fast RCNN和Faster R-CNN 模型來獲取目標框,然后通過幀間融合來提高檢測率。文獻[7]通過頭肩部梯度特征構(gòu)成頭肩部檢測器來獲取行人候選區(qū),在候選區(qū)執(zhí)行行人檢測過程。目前行人檢測算法存在定位偏差和背景干擾問題,最先進的行人檢測算法與人工檢測差10%[8]。
在實際應(yīng)用中行人檢測面臨著諸多的挑戰(zhàn),人群密集相互遮擋、光照變化等因素都會使行人個體無法準確分割[9],從而降低了檢測精度,SSD(single shot multibox detector)算法[10]被Liu等提出,在物體檢測精度和速度上取得了較好的效果,但其對小目標的檢測效果不佳,本文針對行人頭部檢測提出一種改進SSD的人頭檢測方法。
SSD使用的先驗框都是基于現(xiàn)有常見物體檢測數(shù)據(jù)集上提煉出來的,并不適用于特定的行人頭部數(shù)據(jù)集,另外行人頭部屬于較小目標,因此本文對SSD先驗框的設(shè)計進行了改進,以適應(yīng)于特定的行人頭部檢測,同時對SSD網(wǎng)絡(luò)結(jié)構(gòu)進行了調(diào)整以適應(yīng)小目標的檢測。
SSD目標檢測算法是多框預(yù)測one-stage方法,在精確率和速度上都比較好,SSD核心設(shè)計思想[10]:提取多尺度特征圖進行檢測,利用大尺度特征圖檢測小物體,小尺度特征圖檢測大物體;采用CNN直接進行檢測;采用不同尺度和長寬比的先驗框。
SSD300網(wǎng)絡(luò)由兩部分組成,在前一部分中用了VGG16前5層網(wǎng)絡(luò),并將pool5由2×2-S2變成3×3-S1,在后一部分中將VGG16的全連接層fc6和fc7轉(zhuǎn)換成 3×3 卷積層Conv6和1×1卷積層Conv7,并新增一系列卷積層以獲得更多的特征圖,總共11層。圖1為SSD300網(wǎng)絡(luò)的卷積層結(jié)構(gòu)。SSD300網(wǎng)絡(luò)使用6層特征圖用于檢測和分類,分別是Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2卷積層。
圖1 SSD300網(wǎng)絡(luò)的卷積層
SSD300網(wǎng)絡(luò)各卷積層的輸入、輸出、卷積核大小和數(shù)量見表1,每個卷積層后都有一個Relu激活函數(shù)層處理輸出結(jié)果。
SSD300通過不同尺度的特征層檢測圖像中不同大小的目標,實現(xiàn)多尺度目標檢測。一般來說,特征層越低,保留的圖像細節(jié)越多,特征層越高,特征圖越抽象,即在低層特征圖檢測小目標,在高層特征圖檢測大目標。本文中要對人頭進行檢測,人頭相對來說屬于小目標,文中只用到了SSD300網(wǎng)絡(luò)的前8層,后面3層由于輸出太小,圖像過于抽象,圖像中的其它特征可能將人頭特征掩蓋了,所以舍棄了后3層,Conv4_3、Conv7和Conv8_2用于人頭的檢測分類和定位。不同視角的行人頭部示例如圖2所示。
表1 SSD300卷積層
圖2 不同視角的行人頭部示例
隨著卷積層數(shù)的加深,特征圖的平移不變性增強,平移敏感性減弱,即高層特征圖更加抽象,語義性強[11]。分類任務(wù)要求特征具有良好的平移不變性,定位任務(wù)要求特征具有良好的平移敏感性,由此看出分類和定位任務(wù)在現(xiàn)有的特征圖上是有局限性的,因此,本文提出了一種類別預(yù)測和位置預(yù)測特征分離的SSD人頭檢測網(wǎng)絡(luò),類別預(yù)測使用上采樣融合較高層級特征的特征圖,位置預(yù)測使用下采樣融合較低層級特征的特征圖。通過在不同的特征圖上進行類別和位置預(yù)測,網(wǎng)絡(luò)可以自適應(yīng)地學(xué)習(xí)不同任務(wù)對特征的要求,從而提高預(yù)測精度。
最近兩年有一些人也對SSD的小尺度目標檢測效果不佳做出了改進,F(xiàn)SSD(feature-fused SSD)使用Conv5_3層特征圖來增強Conv4_3層的語義信息[12],在很少損失速度的同時加強對小目標的檢測。DSSD(deconvolutional SSD)[13]使用ResNet代替VGGNet,網(wǎng)絡(luò)后端增加多個反卷積層擴展低維度層的上下文信息,將原特征層與反卷積層結(jié)合做預(yù)測,DSSD的檢測速度相比SSD慢了很多,以犧牲檢測速度來提高精度。CSSD(context-aware SSD)[14]使用原SSD特征層與下采樣擴張卷積層和上采樣反卷積層相結(jié)合作為預(yù)測的特征層,對小物體檢測在MS-COCO上相比于SSD提升了3.2%AP。SSD、FSSD、DSSD和CSSD的類別和位置預(yù)測都是在相同的特征圖上,本文考慮到兩個預(yù)測任務(wù)對特征要求的不同,針對人頭檢測提出了類別預(yù)測和位置預(yù)測特征分離的SSD人頭檢測網(wǎng)絡(luò),在既保證小尺度目標類別預(yù)測精度的同時又能夠提升位置預(yù)測的準確性。
由于本文是對人頭進行檢測,屬于較小目標檢測,所以去掉原始SSD300網(wǎng)絡(luò)上的后3層,使用Conv4_3、Conv7、Conv8_2層特征圖來進行多尺度檢測,并在原來網(wǎng)絡(luò)結(jié)構(gòu)上添加了類別和位置預(yù)測兩個旁支網(wǎng)絡(luò),用來生成兩個預(yù)測所需的特征圖,在一定程度上實現(xiàn)了特征分離,分別在新的特征圖上進行卷積得到類別預(yù)測和位置預(yù)測結(jié)果,綜合兩個預(yù)測結(jié)果,得到最終結(jié)果。改進后的SSD人頭檢測網(wǎng)絡(luò)(SSD-Head)結(jié)構(gòu)如圖3所示。
圖3 SSD人頭檢測網(wǎng)絡(luò)結(jié)構(gòu)
如圖3所示,由高層特征圖進行雙線性插值上采樣并標準化后與原始特征圖標準化后拼接融合,對融合特征圖使用一個1×1的卷積層進行降維作為特征重組,對降維后的特征圖使用一個3×3的卷積層學(xué)習(xí)融合后的特征形成新的類別預(yù)測所需特征圖。類別預(yù)測所需特征圖為圖3中Conv4_3_c、fc7_c和Conv8_2_c,Conv4_3_c由Conv4_3_conf進行降維后通過3×3的卷積得到,Conv4_3_conf由原始Conv4_3標準化后與Conv5_3雙線性上采樣并標準化后拼接組成。
常見的下采樣(subsampled)操作包括池化(pooling)和空洞卷積(dilated convolution)兩種。池化過程[15]可能會影響網(wǎng)絡(luò)的準確度,丟失位置細節(jié)信息,空洞卷積在降低圖像尺寸的同時增大感受野,從而獲得更多全局信息,所以本文選用的下采樣是空洞卷積,空洞因子為2,卷積核大小為3×3,步長為2。位置預(yù)測的特征圖為圖3中的Conv4_3_l、fc7_l和Conv8_2_l。Conv4_3_l、fc7_l、Conv8_2_l特征圖分別由Conv4_3_loc、fc7_loc、Conv8_2_loc經(jīng)過3×3的卷積得到。Conv4_3_loc由Conv3_3進行空洞卷積后標準化與Conv4_3標準化拼接組成。
本文的數(shù)據(jù)集包括從Caltech、CityPerson、TUD、Pascal VOC 2007/2012數(shù)據(jù)庫和攝像機拍攝的監(jiān)控視頻中獲取的圖片,截取圖片中不同視角的行人頭頸部作為訓(xùn)練的正樣本。共有14 769張樣本圖片,分為3個樣本集,訓(xùn)練集包含10 769張圖片,驗證集包含2000張圖片,測試集包含2000張圖片。每張圖片都要經(jīng)過裁剪、縮放、歸一化的預(yù)處理變成300×300的大小。訓(xùn)練環(huán)境為Ubuntu16.04,Caffe,CPU版本為Intel Core i7-8700K,GPU版本為NVDIA GEFORCE GTX-1080 Ti,內(nèi)存為32G。
輸入一張圖片,經(jīng)過多個卷積層提取特征,進行多尺度特征圖檢測輸出結(jié)果,使用卷積特征可視化技術(shù)可以展示卷積網(wǎng)絡(luò)的中間層特征圖,圖4展示了SSD-Head網(wǎng)絡(luò)中Conv1_2層與Conv4_3層的部分可視化特征圖,從圖4可以看出,低層特征圖維度高包含更多的細節(jié)和定位信息,高層特征圖維度低包含豐富的語義信息。
圖4 SSD-Head不同層級卷積特征可視化
FSSD、DSSD、CSSD和本文方法都是針對SSD的小目標檢測問題進行改進,因此本文針對SSD及其改進方法FSSD、DSSD、CSSD與我們的SSD-Head人頭檢測進行了對比實驗,SSD、FSSD、DSSD、CSSD與SSD-Head訓(xùn)練、驗證和測試的樣本集是相同的。SSD算法是針對行人整體進行檢測,F(xiàn)SSD、DSSD、CSSD和SSD-Head只檢測人頭部分,SSD-Head人頭檢測網(wǎng)絡(luò)在類別檢測和位置檢測特征分離的基礎(chǔ)上,進行針對性的特征融合,類別檢測特征圖進行上采樣特征融合,位置檢測特征圖進行下采樣特征融合,以此來改善不同檢測任務(wù)的特征圖質(zhì)量。SSD、FSSD、DSSD、CSSD與本文SSD-Head使用SSD原本的先驗框設(shè)計,對相同的2000張測試集圖片進行檢測,檢測的精度和速度見表2。
表2 各網(wǎng)絡(luò)檢測結(jié)果對比
表3 SSD-Head使用不同尺度先驗框結(jié)果對比
從表2和表3可以看出,改進后針對人頭進行檢測的SSD網(wǎng)絡(luò)在準確率上有所提升,相比于原本的SSD在準確率上提升了7.5%,相比于目前檢測精度最高的DSSD提升了0.1%,但是DSSD的檢測速度比較慢,而本文的方法檢測速度還是比較高的,SSD-Head的運行速度相比于SSD有所降低,但是也滿足實時性的要求。在人頭的檢測過程中仍存在少量虛假和漏檢目標,多是由于形狀與人頭相似或行人遮擋過于嚴重難以辨識。圖5為SSD與本文SSD-Head的檢測效果對比。
圖5 SSD與SSD-Head檢測結(jié)果對比
為了解決行人遮擋檢測問題,本文設(shè)計了預(yù)測特征分離的SSD人頭檢測網(wǎng)絡(luò)(SSD-Head),類別預(yù)測使用雙線性上采樣融合后的特征圖,位置預(yù)測的特征圖使用空洞卷積進行下采樣融合。同時,針對原始SSD先驗框尺度不適用于人頭目標的問題,采用K-means++方法對人頭檢測目標框聚類,得到適合人頭檢測數(shù)據(jù)的先驗框比例,設(shè)計不同預(yù)測層對應(yīng)的先驗框尺度,來提升行人頭部檢測的準確率。改進后的網(wǎng)絡(luò)模型在行人檢測應(yīng)用中能夠滿足實時性和準確性要求。