劉 丹,汪慧蘭,曾浩文,王桂麗
(安徽師范大學(xué) 物理與電子信息學(xué)院,安徽 蕪湖 241002)
行人檢測技術(shù)是智能輔助駕駛系統(tǒng)中的關(guān)鍵技術(shù)[1],能有效減少交通事故的發(fā)生,提高駕駛的安全性[2-4]。當(dāng)前基于深度學(xué)習(xí)的行人檢測算法主要分為兩階段檢測的R-CNN[5,6]系列算法和一階段檢測的SSD[7]、YOLO[8]系列等算法。其中董等[9]用DenseNet作為SSD的基礎(chǔ)網(wǎng)絡(luò),提高了行人檢測的精度。高等[10]根據(jù)行人的幾何特點,優(yōu)化了YOLO的網(wǎng)絡(luò)結(jié)構(gòu),取得較好的行人檢測結(jié)果。但這兩類算法大都依賴預(yù)定義的錨(anchor)框,且都是人為精心設(shè)計,導(dǎo)致泛化能力不高和計算量增加[11]。
FCOS(fully convolutional one-stage)[12]是以ResNet[13]為主干網(wǎng)絡(luò)的anchor-free目標(biāo)檢測算法,而且只有非極大值抑制(non-maximum suppression,NMS)[14]的后處理方法,比基于錨框的方法更加簡單,并且提高了檢測精度。Li等[15]通過對分類損失函數(shù)的修改,進(jìn)一步提高了FCOS的檢測性能。張等[16]運用FCOS思想,將FPN特征層進(jìn)行多尺度的融合,得到了較好的行人檢測結(jié)果。但仍存在以下問題:網(wǎng)絡(luò)層數(shù)較多,復(fù)雜度高,導(dǎo)致檢測速度變慢以及復(fù)雜交通下小尺度行人檢測準(zhǔn)確率不高問題。針對以上情況,本文以FCOS為基礎(chǔ),提出基于MobileNetV2的行人檢測方法,并對FCOS算法模型結(jié)構(gòu)訓(xùn)練過程進(jìn)行改進(jìn),通過常用指標(biāo)對經(jīng)典算法與改進(jìn)的FCOS算法進(jìn)行對比實驗,結(jié)果表明,改進(jìn)后的FCOS算法可準(zhǔn)確快速的對交通場景下的行人進(jìn)行檢測。
FCOS是anchor-free的目標(biāo)檢測方法,預(yù)測框的設(shè)定有點類似于YOLOV1的做法。YOLOV1預(yù)測的是邊界框的左上角和右下角的坐標(biāo),而FCOS預(yù)測的是特征圖上的點 (x,y) 在原圖中所對應(yīng)的點 (x′,y′) 到邊界框4條邊的距離,如圖1所示。
圖1 FCOS預(yù)測方式
FCOS訓(xùn)練樣本的具體設(shè)置是,特征圖上任意一點 (x,y) 都可以對應(yīng)到輸入圖像上的一點 ([s/2]+xs,[s/2]+ys), 記為 (x′,y′), 該點 (x,y) 在輸入圖像感受野的中心附近。如果該點落在真實框內(nèi),則視為正樣本,并且對應(yīng)的類別標(biāo)簽與真實框類別標(biāo)簽一致,本文中,類別標(biāo)簽只有行人一類,否則,點 (x,y) 設(shè)置為負(fù)樣本。除了用于分類的標(biāo)簽,還需要給點 (x,y) 設(shè)置一個4D的連續(xù)向量 (l*,t*,r*,b*) 作為每個樣本的回歸目標(biāo),分別表示位置到真實邊界框的左、上、右、下的距離。若點 (x,y) 在真實框內(nèi),則該位置的回歸目標(biāo)請參見文獻(xiàn)[12]所示。
若一個位置落在多個真實框中,則它被認(rèn)為是一個模糊樣本,這種模糊性導(dǎo)致基于FCN的檢測器性能大大下降。因此采用多級預(yù)測特征金字塔(feature pyramid network,F(xiàn)PN)[17]的方法,這樣可以有效解決樣本的模糊問題。同時,使用FPN多層級預(yù)測,召回率可以進(jìn)一步提高。
在使用了FPN多層級預(yù)測后,F(xiàn)COS的性能和基于錨點的方法有一定的差距,是因為只要特征圖上的點落在真實框內(nèi)就被認(rèn)為是正樣本,導(dǎo)致FCOS中產(chǎn)生大量的低質(zhì)量的、遠(yuǎn)離目標(biāo)中心的邊界框。因此在網(wǎng)絡(luò)中增加了一個和分類分支并列的單層網(wǎng)絡(luò)分支來預(yù)測一個位置的“中心度”(Center-ness),即該位置到對應(yīng)目標(biāo)的中心的距離。中心度定義如式(1)
(1)
dCenter-ness可以看成對中心點在真實框中心的位置做一個篩選,當(dāng)l*和r*或t*和b*的比例差別過大,可以認(rèn)為當(dāng)前特征圖上的點映射回原圖的中心點在真實框中很偏離,這種中心點偏離的樣本可以被認(rèn)為是低質(zhì)量的,過濾掉即可。
MobileNetV2是一種輕量型的神經(jīng)網(wǎng)絡(luò),應(yīng)用了深度可分離卷積(深度卷積+點卷積),使得神經(jīng)網(wǎng)絡(luò)在保持精度的同時,極大地降低了計算速度。
如圖2所示,M,N分別為輸入輸出通道數(shù),Dk為卷積核尺寸。
圖2 標(biāo)準(zhǔn)卷積和深度可分離卷積
深度卷積、點卷積計算量以及兩者比值參見文獻(xiàn)[18]。在保證兩者輸出特征圖維度相等的情況下,本文采用3×3卷積核,相比于標(biāo)準(zhǔn)卷積則可以降低大約9倍的計算量,從而可以大大提高對行人的檢測速度。
Sandler.M等[19]在流行學(xué)習(xí)理論的基礎(chǔ)上提出反向殘差結(jié)構(gòu)(inverted residual block),圖3為MobileNetV2中的反向殘差結(jié)構(gòu)。
圖3 MobileNetV2反向殘差結(jié)構(gòu)
ResNet網(wǎng)絡(luò)中是先用1*1卷積降通道,再3*3標(biāo)準(zhǔn)卷積,再用1*1卷積恢復(fù)通道,并和輸入相加。之所以要1*1卷積降通道,是為了減少計算量,因為中間的3*3標(biāo)準(zhǔn)卷積計算量太大。所以ResNet中殘差結(jié)構(gòu)是沙漏形,兩邊寬中間窄。在MobileNetV2中,中間部分標(biāo)準(zhǔn)的3*3卷積用深度卷積代替可減少計算量,但是深度卷積無改變通道的能力,若上層給出的通道數(shù)很少,深度卷積只能在低維空間提取特征。因此MobileNetV2在深度卷積之前加了一個1*1的卷積,目的是為了提升通道數(shù),獲得更多特征。
激活函數(shù)ReLu在高維空間能夠有效地增加非線性,而在低維空間會被破壞特征,不如線性好,在MobileNetV2中,第二個1*1卷積相當(dāng)于降低維度,則不再適合用ReLu,因此MobileNetV2提出線性瓶頸結(jié)構(gòu)(linear bottleneck)的方案,其是一種線性映射,解決在低維空間信息丟失問題。本文采用的MobileNetV2網(wǎng)絡(luò)參數(shù)參見文獻(xiàn)[19]。
BN(batch normalization)是標(biāo)準(zhǔn)正態(tài)分布,定義參見文獻(xiàn)[20],運用BN可以使得網(wǎng)絡(luò)收斂變快,并且能避免梯度消失問題。深度學(xué)習(xí)進(jìn)行模型訓(xùn)練時,采用多GPU使用數(shù)據(jù)并行方式,圖4為BN層計算方式。
圖4 BN計算方式
圖5 SyncBN計算方式
在目標(biāo)檢測算法中,只有特征圖的感受野大于等于目標(biāo)大小時才能被檢測到。感受野是指每層的特征圖上的像素點在原始圖像中映射的區(qū)域大小。卷積神經(jīng)網(wǎng)絡(luò)中較深層的特征層例如圖6中的P7層具有較大的感受野以及豐富的語義信息,對目標(biāo)的姿態(tài)變化以及局部形變具有魯棒性,但是由于每一次的下采樣導(dǎo)致分辨率降低就丟失了幾何細(xì)節(jié)信息。相反,淺層特征具有很小的感受野和豐富的幾何細(xì)節(jié)信息。對于小物體而言,淺層特征包含了它的很多細(xì)節(jié)信息,隨著網(wǎng)絡(luò)層數(shù)的加深,由于stride過大,所提取特征的細(xì)節(jié)信息可能完全丟失,這樣通過深層特征檢測小物體就變得困難。對于行人目標(biāo)而言,行人的尺寸大都只占全圖的1/10以下,屬于較小尺寸目標(biāo),因此本文增加了C2淺層特征層,并通過1*1卷積和下一層的特征融合得到P2層。由于P7特征層最后的stride為128,此時的感受野變得很大,考慮到行人不屬于大尺寸目標(biāo),因此去掉了最后一層P7層。
圖6 改進(jìn)的FCOS網(wǎng)絡(luò)結(jié)構(gòu)
本文使用MobileNetV2作為基礎(chǔ)網(wǎng)絡(luò),在原來的網(wǎng)絡(luò)結(jié)構(gòu)上增加了C2層并與C3、C4、C5這3層作為特征層進(jìn)行特征的提取,其中P2、P3、P4、P5是由C2、C3、C4、C5經(jīng)過一個1*1卷積得到的。考慮到行人檢測,去掉了P7層,而P6是在P5上設(shè)置了stride為2的卷積層并通過下采樣得到的。因此,最后得到的P2、P3、P4、P5、P6為特征金字塔層,分別對應(yīng)stride為4,8,16,32,64。對于每個特征金字塔產(chǎn)生的特征圖,其網(wǎng)絡(luò)結(jié)構(gòu)和處理過程參見文獻(xiàn)[7,12]。訓(xùn)練時,在回歸的分支中加入一個 Center-ness策略產(chǎn)生的損失,圖6為改進(jìn)的FCOS網(wǎng)絡(luò)結(jié)構(gòu)。
整個算法流程分為訓(xùn)練模塊和測試模塊,在訓(xùn)練模塊,對于訓(xùn)練的行人目標(biāo),網(wǎng)絡(luò)最后一層預(yù)測分類向量的行人類別向量以及邊界框坐標(biāo)的4D向量 (l*,t*,r*,b*), 而且不再訓(xùn)練多類分類器,而是訓(xùn)練1個二進(jìn)制分類器。在基礎(chǔ)網(wǎng)絡(luò)的特征圖之后添加了4個卷積層分別用于分類和回歸分支。在測試模塊,給定輸入圖像,通過網(wǎng)絡(luò)進(jìn)行前向傳遞,得到帶有預(yù)測行人類別的預(yù)測邊界框。整個算法的實現(xiàn)步驟為:
(1)對輸入圖像進(jìn)行預(yù)處理操作;
(2)搭建如上圖6所示的網(wǎng)絡(luò)框架,將輸入圖片送入MobileNetV2基礎(chǔ)網(wǎng)絡(luò)得到輸入圖片的特征圖,在特征圖的每一點上面進(jìn)行回歸操作,訓(xùn)練獲取網(wǎng)絡(luò)模型;
(3)將預(yù)訓(xùn)練的網(wǎng)絡(luò)模型應(yīng)用到測試圖片中,從特征金字塔的多個檢測頭(Head)獲得預(yù)測結(jié)果;其中Head檢測網(wǎng)絡(luò)分為分類和“中心度”(Center-ness)分支并列的分支、回歸分支,如上圖6所示;
(4)使用NMS后處理操作得到最終預(yù)測結(jié)果。
本文網(wǎng)絡(luò)采用的訓(xùn)練損失函數(shù)如式(2)
(2)
本實驗操作系統(tǒng)為 Linux 16.04.5LTS,實驗顯卡為 NVIDIA GeForce GTX1080GPU,GPU數(shù)量為4,系統(tǒng)的內(nèi)存為64 G,CUDA的版本為10.2,NVIDIA CUDNN為7.2。采用Pytorch深度學(xué)習(xí)框架進(jìn)行模型的訓(xùn)練和測試。
本文選擇加州理工大學(xué)提供的Caltech行人檢測數(shù)據(jù)集,進(jìn)行訓(xùn)練前,將格式轉(zhuǎn)換成標(biāo)準(zhǔn)的VOC格式。轉(zhuǎn)換好的數(shù)據(jù)集包括訓(xùn)練樣本和測試樣本共17 612張,其中訓(xùn)練集為12 328張,測試集為5284張。為避免網(wǎng)絡(luò)從頭開始訓(xùn)練而導(dǎo)致計算時間和資源增加,本文首先加載MobileNetV2模型的分類參數(shù),然后除去最后的分類層,最后調(diào)用權(quán)重參數(shù)文件,并使用monentum=0.9,weigt_decay=0.0001的SGD優(yōu)化器,使用SyncBN,一共迭代90 000次,大約12個epoch。初始的學(xué)習(xí)率設(shè)為0.001,在30 000和50 000次分別將學(xué)習(xí)率除以10。
本文采用均值平均準(zhǔn)確度mAP(mean average precision)和每秒檢測幀數(shù)FPS(frames per second)作為行人檢測的性能指標(biāo),mAP越高表示模型準(zhǔn)確度越高,F(xiàn)PS越大表示檢測速度越快。mAP計算如式(3)
(3)
其中,APC表示目標(biāo)類別C的平均精度,n為該類別的圖片總數(shù),本實驗中,類別只有行人一類,所以C=1。表1是對比幾種模型的檢測效果。
表1 Caltech數(shù)據(jù)集下不同模型檢測效果對比
由以上數(shù)據(jù)可知,在本文Caltech數(shù)據(jù)集,輸入圖像尺寸為800×1333的情況下,經(jīng)典算法Faster R-CNN的mAP為74%,高于YOLO和SSD兩種算法,是由于該算法是兩階段再加上RPN,相比于一階段檢測算法網(wǎng)絡(luò)更加精準(zhǔn),但檢測速度僅為4.2,遠(yuǎn)遠(yuǎn)低于其它算法,更不滿足交通場景行人檢測實時性要求。一階段算法YOLO的mAP為66.7%,F(xiàn)PS為22,相比于其它算法,精度和速度都不高。對于原始FCOS算法,其mAP比基于anchor的目標(biāo)檢測算法SSD和 YOLOV4分別提高了9.6%和6.7%,但FPS卻低于YOLOV4算法的26.5%,因此為了提高檢測速度滿足實時性,本文算法將骨干網(wǎng)絡(luò)替換為MobileNetV2輕量型網(wǎng)絡(luò),總的計算量下降了大約9倍,F(xiàn)PS也有了顯著提升,為32.3幀/s。當(dāng)引用SyncBN時,在幾乎不損失速度的情況下,mAP相比于FCOS-V2提升了5.5%,這主要是得益于SyncBN時多卡同步處理數(shù)據(jù),使用全局的樣本進(jìn)行歸一化,相當(dāng)于增大了批量大小,因此模型的整體性能提升了。最后,增加了C2淺層特征層進(jìn)行特征融合,同時去掉P7深層特征層,mAP提升了3.2%,是因為Caltech數(shù)據(jù)集是車載攝像頭拍攝,行人尺寸較小,增加淺層特征層,注入了更多幾何細(xì)節(jié)信息,更有利于小尺寸行人的檢測。
為驗證改進(jìn)算法是否適應(yīng)于國內(nèi)交通場景下的行人檢測,本文采用香港中文大學(xué)CUHK行人數(shù)據(jù)集進(jìn)行訓(xùn)練和驗證,此數(shù)據(jù)集包含了1063張行人圖片。表2為CUHK數(shù)據(jù)集下的行人檢測效果。
通過表2數(shù)據(jù)可知,改進(jìn)后的FCOS的mAP值提高了5.3%,F(xiàn)PS提升了87.1%,主要是因為FCOS算法逐像素?zé)o錨的檢測方式,不需要預(yù)先設(shè)定大小去匹配行人框,因此泛化能力強,同時采用輕量型網(wǎng)絡(luò)進(jìn)行特征提取提高了檢測速度,并且改變訓(xùn)練過程以及增加淺層特征層進(jìn)一步提升了檢測率,使得模型魯棒性更高。
表2 CUHK數(shù)據(jù)集下行人檢測效果
圖7為檢測效果。從效果圖可以看出,對于復(fù)雜的交通道路環(huán)境中,改進(jìn)后的FCOS算法能夠準(zhǔn)確的識別出行人目標(biāo)。具體來分析,圖7(a)中第一幅圖包含大尺寸行人目標(biāo)和小尺寸行人目標(biāo),改進(jìn)的FCOS算法都能很好識別,主要是因為FCOS算法中特征金字塔結(jié)構(gòu),將不同尺寸目標(biāo)分配到不同層進(jìn)行檢測;圖7(a)中第二、三幅圖目標(biāo)尺寸較小并伴隨非目標(biāo)的輕微遮擋,第四幅圖行人屬于重疊目標(biāo),但改進(jìn)的FCOS算法能夠準(zhǔn)確檢測。為了進(jìn)一步體現(xiàn)本文改進(jìn)之處,圖7(b)進(jìn)行了效果對比,圖中存在尺寸非常小的行人,在未增加C2特征層時很難檢測出來,在增加C2特征層時,由于淺層特征層感受野較小并包含更豐富的行人細(xì)節(jié)信息,再與深層特征層進(jìn)行特征融合,這對于小尺寸目標(biāo)的檢測是有利的,因此最后一行圖小尺寸行人都有了很好的檢測。圖7(c)為國內(nèi)交通行人檢測效果圖,包括了小尺度行人、遮擋行人、密集行人,檢測結(jié)果較好。綜合圖7(a)、圖7(b)、圖7(c)可知,改進(jìn)的FCOS算法在復(fù)雜道路場景中都具有較好的魯棒性,模型具有一定的泛化能力。
圖7 檢測效果
為了進(jìn)一步體現(xiàn)本文提出的策略對模型的影響,采用消融實驗的方法對每一組實驗分別進(jìn)行訓(xùn)練,訓(xùn)練采用的數(shù)據(jù)集相同,然后將每一組訓(xùn)練好的模型分別在同一測試集進(jìn)行驗證,為了結(jié)果更加可靠,增加了3000張的小尺度測試集,得出每一組實驗的mAP值以及檢測速度FPS的值,其結(jié)果見表3。
表3 消融實驗
如表3所示,共分為8組實驗,2、3、4組實驗是在第1組實驗的基礎(chǔ)上分別加入一種策略,將主干網(wǎng)絡(luò)換為MobileNetV2(表3縮寫為V2)時,計算量大大減少,在損失一點平均精度的基礎(chǔ)上FPS相對提高了94.1%。當(dāng)采用SyncBN時,mAP值均大于其它兩種類型,且FPS幾乎不下降,主要得益于同步歸一化計算全局梯度,相當(dāng)于增大了batchsize值,使得訓(xùn)練更加穩(wěn)定的收斂,得到更好的模型效果。第4組在第1組模型中加入了C2層,主要是為了有利于小目標(biāo)的檢測,從表中可知,對于尺度小的行人,mAP值得到了顯著的提高,為84%,提高了6%。第5、第6、第7這3組分別加入了兩種策略,當(dāng)加入MobileNetV2時,F(xiàn)PS值都得到了很大的提升,mAP的值略有下降,但是行人檢測技術(shù)最終要得到兩者的平衡。當(dāng)加入其它兩種策略時,mAP值相比于加入一種策略都有了提高。第8組實驗是加入了3組策略,其mAP值較于第7組有所下降,但是檢測速度提高了96.8%,保持了速度和精度的平衡。相比于第1組,也就是原FCOS,最終的mAP值提高了7.2%,F(xiàn)PS提高了85.3%。通過分析實驗可知,本文改進(jìn)的算法是有效且合理的。
本文基于FCOS算法,提出了一種改進(jìn)型的行人檢測算法。首先采用MobileNetV2輕量型網(wǎng)絡(luò)進(jìn)行行人的特征提取,提高了檢測速度;然后引用SyncBN規(guī)范化的處理方式解決了訓(xùn)練過程中BN帶來網(wǎng)絡(luò)層失效問題;最后,在網(wǎng)絡(luò)結(jié)構(gòu)層上增加C2淺層特征層并與深層特征層進(jìn)行特征融合,提升小尺度行人的檢測率,最終得到本文的行人檢測模型。
在Caltech數(shù)據(jù)集進(jìn)行了訓(xùn)練并驗證,實驗結(jié)果表明,相比于基于anchor的算法,本文算法減少了與anchor有關(guān)的超參設(shè)計,也避免了由于anchor自身設(shè)計帶來的網(wǎng)絡(luò)泛化能力弱等問題,其mAP值與傳統(tǒng)的算法相比分別提高了16.8%和13.9%,相比于改進(jìn)前FCOS算法,在精度提升7.2%的同時,速度上提高了85.3%,滿足行人檢測實時性的要求。但是,行人檢測技術(shù)所涉及的課題具有一定的廣度和深度,本文基于FCOS的行人檢測算法研究工作有待于進(jìn)一步完善。