姜建勇,吳 云,龍慧云,黃自萌,藍 林
(貴州大學 計算機科學與技術(shù)學院,貴陽 550025)
行人檢測作為計算機視覺領(lǐng)域的研究熱點[1],在車輛高級駕駛輔助系統(tǒng)、視頻監(jiān)控、安全檢查以及反恐防暴等方面有著重要應用。在過去的幾十年中,研究人員針對行人檢測問題做了大量研究并取得一系列成果。行人檢測方法主要分為基于人工設計特征和基于神經(jīng)網(wǎng)絡特征的2 種檢測方法。
傳統(tǒng)的檢測器多數(shù)使用HOG 方法進行檢測,如文獻[2]通過改進HOG 并且聯(lián)合使用SVM 進行行人檢測。在傳統(tǒng)的檢測方法中,需要人工手動去提取圖像特征,使得檢測模型存在可擴展性、泛化能力差以及計算速度慢等問題。
隨著在機器視覺中使用深度學習,研究人員開始尋找深度學習方案來解決目標檢測問題。R-CNN[3]提出結(jié)合深度學習的方法解決對象檢測的問題,后續(xù)很多兩階段的方法都是基于R-CNN[3]去構(gòu)建的,如Fast-RCNN[4]、Faster-RCNN[5]等。在行人檢測上,如文獻[6]使用更為快速的Faster-RCNN[5]進行行人檢測,在Caltech 數(shù)據(jù)集上比其他傳統(tǒng)方法更為準確和快速,文獻[7]使用單階段式網(wǎng)絡YOLO[8-10]進行行人檢測,在INRIA 數(shù)據(jù)集上取得比傳統(tǒng)方法更好的準確度。雖然Faster-RCNN 在RCNN 的基礎上改進了很多組件,使得在準確度和速度上有了很大的提升,速度能夠達到20 frame/s,但運用在實時檢測中效果還不是很理想。而單階段網(wǎng)絡YOLO[8-10]在速度上很快,但是準確度距離Faster-RCNN 相差較大。
CenterNet[11]與R-CNN[3]相比,不需要區(qū)域建議網(wǎng)絡以及ROI 等重要組件,而與YOLO[8]和SSD[12]相比,則無需預先去設定Anchor 的大小,并且CenterNet 在推理階段不需要NMS(Non-Maximum Suppression)[13],因此在速度上有很大的提升。為了能夠平衡檢測的速度和準確度,本文基于CenterNet,提出PD-CenterNet 改進模型對行人進行檢測。該模型通過融合低級語義信息來減少細節(jié)性信息在下采樣過程中丟失的問題,并設計一個新的損失函數(shù)來解決正負樣本不平衡的問題。
目標檢測往往在圖像上將目標以軸對稱的框形式框出,成功的目標檢測器都是先窮舉出潛在目標位置,然后對該位置進行分類,但這種做法浪費時間、低效、需要額外的后處理。PD-CenterNet 在構(gòu)建模型時將目標作為一個點,即目標BBox(Bounding Box)的中心點,檢測器能夠通過特征圖的相對位置來估計出BBox 的中心點和尺寸。本文設計的PDCenterNet 主要由網(wǎng)絡結(jié)構(gòu)、Anchor 和損失函數(shù)3 個部分構(gòu)成,下文將圍繞這3 個方面進行介紹。
PD-CenterNet 由主干網(wǎng)絡、上采路徑和網(wǎng)絡頂端2 個卷積組成,如圖1(b)所示。由于在目標檢測中,感受野的大小在很大程度上直接影響檢測的效果,因此本文通過主干網(wǎng)絡來獲取一個1/32 的特征圖,編碼高層的語義信息。其中向下箭頭表示下采樣過程,向上箭頭表示上采樣過程。
圖1 CenterNet 和PD-CenterNet 網(wǎng)絡結(jié)構(gòu)Fig.1 Network structure of CenterNet and PD-CenterNet
在網(wǎng)絡結(jié)構(gòu)上,使用主干網(wǎng)絡和上采路徑的設計方式能夠為整個模型帶來很好的可擴展性,通過主干網(wǎng)絡可切換為MobileNet[14]、ResNet18[15]、Xception[16]、ShuffleNet[17]等輕量級網(wǎng)絡即可獲得更快的速度,也可切換至ResNet101[15]、GoogLeNet[18]、DenseNet[19]等較大的網(wǎng)絡來獲取更高的準確度。
在上采路徑上,BiSeNet[20]指出在特 征表示的層面上,低層和高層的特征表示不同,僅以通道來連接低層和高層特征,則就會帶來很多噪音,所以本文設計了一個特征融合模塊(FFM)來融合低層豐富的空間信息和高層的語義信息,如圖2 所示。在特征融合模塊中,首先將高層特征進行上采至低層特征圖一致的大小,然后按通道進行連接,后面緊接一個深度可分離卷積來學習通道上每一層的表示,最后使用類似于SENet[21]的通道特征注意力機制,把相連接的特征使用全局平均池化為一個特征向量,并學習出一個權(quán)重向量,然后對先前的特征進行加權(quán),增強了低層和高層特征融合之后的表示能力,同時也減少了特征融合之后帶來的噪音。
圖2 特征融合模塊Fig.2 Feature fusion module
在網(wǎng)絡頂端分別使用2 個卷積用來預測類別置信度、BBox 的位置和尺寸信息。
通過對網(wǎng)絡結(jié)構(gòu)的改進,使得模型的網(wǎng)絡參數(shù)和計算量大幅減少。尤其將MobileNet[14]作為主干網(wǎng)絡時使得模型的參數(shù)減少了50%,降低了計算量,在以ResNet[15]作為主干網(wǎng)絡時參數(shù)量和計算量也得到了很大的降低,具體的信息如表1 所示。
表1 模型參數(shù)及數(shù)量Table 1 Model parameters and quantity
在訓練時獲得網(wǎng)絡輸出的類別置信度和BBox后,需要用BBox 去匹配GT BBox,在這個過程中,BBox 即為Anchor BBox。標準的Anchor 設計了在低分辨率特征圖中一系列固定的BBox,通過計算交并比(IoU)來判斷是否為正樣本,若交并比大于0.7 則標記為正樣本,若小于0.3 則標記為負樣本。而本文則將對象的中心點在低分辨率上所對應BBox 作為正樣本,其他沒有包含對象中心點的標記為負樣本,并且一個中心點僅檢測一個對象,如圖3所示。
圖3 PD-CenterNet Anchor 的設計Fig.3 Design of PD-CenterNet Anchor
基于圖3 所示的設計,網(wǎng)絡只需要預測在某一個單元格內(nèi)的偏移即可。對于網(wǎng)絡輸出的每一個BBox 為(px,py,pw,ph),其中:(px,py)為BBox 的中心點位置;(pw,ph)為BBox 的寬和高。如果該單元格對應于圖像單元格左上角的坐標為(tx,ty),則最后預測的BBox 為(bx,by,bw,bh),計算公式如下:
PD-CenterNet 由BBox 的中心點、BBox 尺寸和BBox 類別置信度3 個部分損失構(gòu)成,計算公式如下:
其中:Ldet為總損失;Lk為BBox 類別置信度損失;Lsize為BBox 尺寸損失;Lk為置信度損失;Loff為中心點損失。由于模型的輸入是300×300,因此最終得到一個75×75 的一個特征圖,并且模型一個特征點僅預測一個對象,極端情況下會出現(xiàn)1∶5 625 的正負樣本極度不平衡,所以,本文設計一個損失函數(shù)來解決這個問題。
在類別置信度損失中,本文設計α、γ、δ3 個影響因子提高正樣本的損失和減小負樣本的損失以解決正負樣本不平衡的問題,定義如式(8)~式(10)所示:
在負樣本損失中通過設置δ和γ12 個因子來減小負樣本的損失,定義見式(9),在正樣本損失中通過γ2進行調(diào)節(jié),定義見式(10),最后通過α因子來控制正樣本和負樣本損失所占的比例。通過對損失函數(shù)中的α1、α2、γ1、γ2、δ使用網(wǎng)格搜索得到最佳的一組參數(shù),如表2 所示。
表2 損失函數(shù)參數(shù)值Table 2 Loss function parameter value
本文對殘差網(wǎng)絡(ResNet[15])進行修改以適應PD-CenterNet。選取 ResNet[15]網(wǎng)絡中“l(fā)ayer2”“l(fā)ayer3”和“l(fā)ayer4”的輸出分別作為“8×”“16×”和“32×”的特征圖,然后通過特征融合模塊來對這3 個特征圖進行融合,接著在融合后“8×”倍的特征圖上通過反卷積上采到“4×”,最后通過網(wǎng)絡頂端的2 個卷積來進行類別置信度和BBox 預測。
MobileNet 專注于移動端或者嵌入式設備中的輕量級CNN 網(wǎng)絡,它使得推理速度能夠得到極大的提高。因此,修改MobileNet[12]作為本文模型的主干網(wǎng) 絡,選 取MobileNet[12]中 第7 層、第14 層和最后 一個卷積層的輸出分別作為“8×”“16×”和“32×”的特征圖,然后通過上采路徑和2 個卷積來進行類別置信度和BBox 預測。
根據(jù)Anchor 的設計,使得一個特征點僅能預測一個對象,如果一張圖像中有超過一個對象的中心點重疊,則導致模型存在漏檢。而由于在行人檢測中存在很多對象會存在中心點一致的問題,因此在Anchor 選擇時,如果BBox 被占用,則選擇離中心點最近的BBox 來預測對象,這樣就避免了中心點重復的問題,算法過程如下:
通過網(wǎng)絡的輸出得出B(W×H,4),其中B的寬和高在本文中為(75,75),第三維分別為BBox 的中心點位置(x,y)和大?。╳,h)。對于GT(Ground Truth)中的每一個Gi,計算其在特征圖大小為(W,H)的中心點位置(x,y),然后計算出(x,y)在B上的索引c(見算法1第5 行)。如果c不在正樣本集合A中,則將c添加到集合A中,否則計算出離c最近的一個點并添加到集合A中。最后通過構(gòu)建一個D集合,其中D的區(qū)間為[0,W×H],此時正樣本Anchor為B[A],負樣本Anchor為B[DA]。Anchor 選擇算法如算法1 所示。
訓練使用分辨率為300 像素×300 像素的圖像作為輸入,對于輸入的圖像使用隨機翻轉(zhuǎn)、隨機縮放(0.5~1.5 的比例)、隨機裁剪和色彩抖動做數(shù)據(jù)增強,使用學習率為1e?4 的Adam[22]作為優(yōu)化器,使用批大小為4 訓練80 輪,其中前5 輪使用線性學習率進行預熱,后75 輪使用余弦退火算法來對學習率進行衰減,如圖4 所示。
圖4 學習率衰減Fig.4 Decline of learning rate
在推理階段不使用數(shù)據(jù)增強,將輸入的圖片進行等比例的縮放,其余的地方用0 進行填充至300 像素×300 像素的輸入。目前大多數(shù)的目標檢測模型都依賴于NMS[13]對模型最后輸入的BBox進行篩選,由于NMS的時間復雜度為O(n2),因此使得在后處理階段變得更加耗時。結(jié)合本文模型的設計,本文設計一種時間復雜度為O(n)的后處理算法,算法過程如下:
在模型的推理和模型的訓練中規(guī)定類別置信度第一個位置的值為背景的置信度,在推理時設置一個置信度閾值d用來過濾置信度低的BBox。當獲得網(wǎng)絡輸出的預測框B和類別置信度C時,則需要遍歷每一個Bi所對應的類別置信度Ci,如果Ci的最大值位置為0 或者對象的置信度低于設置好的置信度閾值,那么就忽略該預測框,否則保存Bi和Ci作為最好的輸出,最后將面積特別小的預測框移除,以及將預測框超出圖像范圍的區(qū)域裁剪掉,最終的輸出即為對行人的檢測以及置信度,具體的實現(xiàn)如算法2 所示。
實驗使用INRIA 行人數(shù)據(jù)集,它是當前使用較為廣泛的靜態(tài)行人檢測數(shù)據(jù)集[23],具有拍攝條件多樣化、背景復雜、存在人體遮擋以及光線強度變化大等情況。
實驗使用的深度學習框架為PyTorch,模型中的主干網(wǎng)絡ResNet 和MobileNet 均來自于torchvision 的實現(xiàn),實驗使用的GPU 為Tesla P100 16G 型號。
本文通過比較改進后的主干網(wǎng)絡和損失函數(shù)進行實驗。實驗采用不同的IoU 閾值計算平均精度(AP)去評價預測的結(jié)果,IoU 閾值的選取分別為0.50~0.95(AP)、0.5(AP50)和0.75(AP75)。
實驗將原有的CenterNet、改進后的PD-CenterNet和損失函數(shù)進行對比,在實驗中使用輕量級主干網(wǎng)絡MobileNet 和較大的ResNet 作為主干網(wǎng)絡進行不同的實驗。
第1 組實驗使用原有的CenterNet 和Focal Loss 損失函數(shù),并在MobileNet 和ResNet 上進行實驗,如表3所示。
表3 CenterNet 網(wǎng)絡和Focal loss 函數(shù)Table 3 CenterNet network and Focal Loss function %
第2組實驗使用CenterNet來預測BBox和置信度,在訓練時使用改進后的損失函數(shù)來計算損失,如表4所示。
表4 CenterNet 網(wǎng)絡和改進的損失函數(shù)Table 4 CenterNet network and improved loss function %
第3 組實驗使用改進后的預測網(wǎng)絡PD-CenterNet來預測BBox 和置信度,在訓練時使用Focal Loss 來計算損失,如表5 所示。
表5 PD-CenterNet 網(wǎng)絡和Focal loss 函數(shù)Table 5 PD-CenterNet letwork and Focal Loss function %
第4 組實驗使用改進后的預測網(wǎng)絡PD-CenterNet來預測BBox 和置信度,在訓練時使用改進后的損失函數(shù)來計算損失,如表6 所示。
表6 PD-CenterNet 網(wǎng)絡和改進后的損失函數(shù)Table 6 PD-CenterNet network and improved loss function %
本文改進的PD-CenterNet 相對于CenterNet 在準確度上有了明顯的提升,最高提升了9.81%,如圖5 所示。改進后的網(wǎng)絡結(jié)構(gòu)由于使用了特征融合模塊,所以在AP50 準確度上提高了5.1%(見表3、表5),在AP準確度上提高了1.23%,在AP75 準確度提高了0.39%;改進后的損失函數(shù)也相對于Focal Loss 函數(shù)[24]在使用ResNet18作為主干網(wǎng)絡時,AP50準確度也提高了5.16%(見表3、表4),同時在AP 和AP75 準確度上也都有著明顯的提升。最終改進網(wǎng)絡結(jié)構(gòu)和損失函數(shù)在使用ResNet18 作為主干網(wǎng)絡時提升最大,在AP50 準確度提升了9.81%(見表3、表6),在AP準確度上提高了8.09%,在AP75 準確度上提高了20.35%。
圖5 模型準確度比較Fig.5 Comparison of model accuracy
ResNet 在所有主干網(wǎng)絡中平均精度最高,但相對于MobileNet 作為主干網(wǎng)絡在速度上相對較慢。ResNet18速度在ResNet系統(tǒng)中最快,達到136 frame/s(圖6),在AP50 準確度上與ResNet50 和ResNet101持 平,但PD-CenterNet 在使用ResNet101 時AP 和AP75 最高。實驗結(jié)果表明,主干網(wǎng)絡越大,則AP 和AP75 就越好,因此在對行人進行檢測時也就更為準確。
圖6 模型檢測速度比較Fig.6 Comparison of mode detectl speeds
MobileNet 相對于ResNet 在速度上優(yōu)勢更為明顯,能夠達到199 frame/s(圖6),但是在準確度上低于ResNet,而改進后的模型準確度相比ResNet 提高了8.01%。
從上述實驗結(jié)果可以看出,在網(wǎng)絡結(jié)構(gòu)中使用特征融合改進后的PD-CenterNet,AP、AP50 以 及AP75 都具有較好的表現(xiàn);改進后的損失函數(shù)也表現(xiàn)出了良好的結(jié)果。最終的檢測結(jié)果如圖7 所示,其中,第1 行為GT(Ground Truth),第2 行為模型預測的結(jié)果,在檢測結(jié)果中設置的置信度閾值為0.5。從圖7 可以看出,本文模型在大對象、小對象、對象重疊、密集對象等場景下仍然能獲得較好的結(jié)果。
圖7 行人檢測結(jié)果Fig.7 Pedestrian detection results
為平衡行人檢測速度和準確度的問題,本文提出一種基于CenterNet的行人檢測模型PD-CenterNet。在速度上設計一個輕量級特征融合模塊來減小網(wǎng)絡結(jié)構(gòu)中上采路徑的計算量,并在推理時降低后處理程序的時間復雜度。在準確度上設計特征融合模塊對低層和高層特征進行融合,并在損失函數(shù)中設計α、γ、δ3 個因子來改善正負樣本不平衡的問題。實驗結(jié)果表明,該模型對行人檢測的AP50 準確度為84.94%,檢測速度達到136 frame/s。本文在網(wǎng)絡設計時僅使用了2 個特征融合模塊,在小對象上的IoU 不是最優(yōu),因此提高小對象的IoU 將是下一步的主要工作。