李巖, 孟令軍
(中北大學(xué) 電子測試技術(shù)國防科技重點實驗室, 山西 太原 030051)
隨著人們對公共安全領(lǐng)域日益重視,行人檢測技術(shù)在智能監(jiān)控和無人駕駛領(lǐng)域得到了廣泛的應(yīng)用[1]。傳統(tǒng)的行人檢測方法依賴于從訓(xùn)練樣本中手動提取特征,精度低、模型泛化性差,難以適應(yīng)復(fù)雜的行人場景[2]。相對于傳統(tǒng)方法,行人檢測方法的性能隨著卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展得到了極大的提高。
然而,在公共安全領(lǐng)域,檢測智能監(jiān)控下不同大小的行人目標(biāo)仍然是一個挑戰(zhàn)。當(dāng)待檢測行人目標(biāo)送入具有自上而下結(jié)構(gòu)的檢測模型中,小尺度行人目標(biāo)隨著卷積層數(shù)的增加,特征圖逐漸變小,丟失可識別特征信息,較難被檢測。大尺度行人目標(biāo)由于面積和感受野較大,特征信息也更豐富,較容易被檢測。針對多尺度檢測問題,有兩種常用的方法:圖像和特征金字塔。前者,將圖片縮放為不同大小,并對縮放后的圖片提取特征。后者把輸入圖像轉(zhuǎn)換為特征圖,在不同尺度上進(jìn)行特征融合,將特征信息與空間性互補(bǔ)。
相對于圖像金字塔,特征金字塔不需要識別多種分辨率的圖像,具有速度快、精度高的特點,被廣泛應(yīng)用于目標(biāo)檢測任務(wù)中。典型的網(wǎng)絡(luò)有特征金字塔網(wǎng)絡(luò)(FPN)[3]、物體檢測骨干網(wǎng)絡(luò)(DetNet)[4]和反卷積單發(fā)多框檢測網(wǎng)絡(luò)(DSSD)[5]。FPN采取級聯(lián)融合上采樣得到的特征圖,形成金字塔結(jié)構(gòu);DetNet利用空洞卷積與殘差結(jié)構(gòu),使得多個融合后的特征圖尺寸相同,避免上采樣操作;DSDD在SSD[6]的基礎(chǔ)上,在對應(yīng)的通道上將深淺特征圖作乘法運(yùn)算。
為了提高在智能監(jiān)控下行人檢測的精度,本文在YOLOv3[7]的基礎(chǔ)上,引入SPP和ASFF結(jié)構(gòu),融合不同特征圖中的位置和分類信息,同時采用k-means算法,修改錨框的尺寸。實驗表明,引入改進(jìn)策略的算法,在INRIA和VOC混合行人數(shù)據(jù)集有更好的檢測性能。
YOLOv3是一種基于端到端的檢測算法,由神經(jīng)網(wǎng)絡(luò)基本結(jié)構(gòu)CBL_n和殘差網(wǎng)絡(luò)Res搭建而成,如圖1所示。
圖1 YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)圖
其中,n代表卷積層卷積核的大小,標(biāo)準(zhǔn)歸一化層可以加快網(wǎng)絡(luò)速度,抑制梯度爆炸,防止過擬合,激活函數(shù)可以提高模型表達(dá)能力,Res可以改善網(wǎng)絡(luò)退化問題,CBL_Y表示多個神經(jīng)網(wǎng)絡(luò)基本結(jié)構(gòu)相連接。YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)主要分為三個部分,首先Darknet-53提取固定尺寸的輸入圖像,將特征送入檢測網(wǎng)絡(luò)。然后檢測網(wǎng)絡(luò)借鑒了FPN的思想,以上采樣級聯(lián)的方式融合不同網(wǎng)絡(luò)層,輸出19×19、38×38和76×76三種不同尺度的特征圖,獲得了更好的細(xì)粒度特征[8]。最后預(yù)測網(wǎng)絡(luò)對目標(biāo)位置信息和類別的置信度進(jìn)行預(yù)測,使用非極大值抑制算法確定真實目標(biāo)框。
當(dāng)圖像中的行人目標(biāo)差異較大,YOLOv3算法提取特征能力不足,漏檢率高,精度降低。本文借鑒YOLOv3-SPP和SPP-net[9]的空間金字塔思想,在三個尺度檢測YOLO層前引入SPP層,融合不同大小的特征,提高模型精度。最大池化層利用大小為5×5、9×9、13×13過濾器在n×n的特征圖上滑動,大小為1的步長保證了特征圖輸入與輸出的大小一致,最后在融合層將四個特征圖的通道進(jìn)行拼接,如圖2所示。
圖2 SPP層網(wǎng)絡(luò)結(jié)構(gòu)
SPP采用級聯(lián)融合的方式,融合后特征圖的通道變?yōu)樵瓉淼乃谋?,并保留了原始特征[10],如式(1)。
ycat=fcat(xa,xb,xc,xd)
(1)
SPP層引入位置的不同,對模型的檢測精度和參數(shù)量有不同的影響,經(jīng)過多次綜合實驗,將圖1中,三條分支的CBL_Y網(wǎng)絡(luò)替換為圖3中對應(yīng)y1,y2,y3網(wǎng)絡(luò),效果最優(yōu),如圖3所示。
圖3 YOLOv3引入SPP
CBL_131代表三個帶有標(biāo)準(zhǔn)歸一化層和激活函數(shù)的卷積層相連接,卷積核大小分別為1×1、3×1、1×1。
SPP層通過池化操作,特征拼接,實現(xiàn)局部特征和全局特征相融合,豐富了特征圖的提取能力,有效防止了過擬合現(xiàn)象。
YOLOv3采用多尺度檢測,在不同的尺度特征圖中分別檢測大小目標(biāo)。一旦目標(biāo)與一個特征圖有關(guān),其他相關(guān)的位置被視為一個負(fù)樣本。因此,一旦圖像中含有大目標(biāo)和小目標(biāo),不同的特征層就會發(fā)生沖突,影響參數(shù)在模型傳遞中的梯度計算,降低了多尺度檢測的有效性。
本文采用ASFF[11]算法,解決不同尺度特征之間的不一致性。首先,通過下采樣的方式,將y2,y3的特征圖調(diào)整為和y1一樣的大小。然后,通過加權(quán)的方式,將y1,y2,y3的特征圖融合得到融合特征ASFF1(ASFF2、ASFF3同理),如圖4所示。
圖4 ASFF網(wǎng)絡(luò)結(jié)構(gòu)圖
以ASFF1為例,不同層的特征與權(quán)重相乘并相加,可以得到新的融合特征,如式(2)。
(2)
ASFF算法通過學(xué)習(xí)不同特征圖之間的聯(lián)系,過濾掉融合特征ASFF1、ASFF2、ASFF3空間位置矛盾的信息,同時增強(qiáng)帶有區(qū)分性線索的特征,提高了尺度不變性,具有實現(xiàn)簡單,附加計算成本小的優(yōu)點。
原始錨框的寬高比適用于檢測多類別目標(biāo),不適用于混合行人數(shù)據(jù)集單類別檢測。利用k-means調(diào)整錨框的尺寸,可以有效提高檢測精度。
k-means使用歐式距離調(diào)整錨框的尺寸計算時,檢測結(jié)果易受到尺寸的影響,從而降低了精度。為了避免這一影響,本文用IOU距離替代歐式距離,如式(3)。
d(b,c)=1-IOU(b,c)
(3)
其中,b為數(shù)據(jù)集中行人數(shù)據(jù)的目標(biāo)框信息;c為聚類中心;IOU為目標(biāo)框與聚類中心框的平均交并比。數(shù)據(jù)集利用算法進(jìn)行100次迭代聚類,可以得到較好的錨框尺寸,如圖5所示。
(a) 算法迭代1次
(b) 算法迭代100次
通過聚類得到聚類中心,與輸入圖像的尺寸進(jìn)行乘積運(yùn)算可以得到聚類后的錨框尺寸,如表1所示。
表1 聚類后的錨框尺寸
改進(jìn)后的算法流程,如圖6所示。
圖6 改進(jìn)后算法流程
將行人圖像經(jīng)過預(yù)處理得到608×608固定大小的輸入,經(jīng)過Darknent53卷積池化,送入改進(jìn)的檢測網(wǎng)絡(luò),待使用ASFF進(jìn)行特征融合后,得到預(yù)測網(wǎng)絡(luò)。
當(dāng)訓(xùn)練好改進(jìn)的模型,將行人圖像大小和錨框尺寸送入模型,得到特征圖y1,y2,y3(N×N×[3×(4+1+1)])。其中N表示輸出特征圖的大小,將原始圖片劃分成N×N的網(wǎng)格。(cx,cy)表示網(wǎng)格左上角坐標(biāo);4表示錨框的邊框坐標(biāo)(tx,ty,tw,th);3表示每個網(wǎng)格上有3個錨框;1表示邊框置信度conf;1表示對象類別class。利用公式計算預(yù)測框的位置,如式(4)。
bx=σ(tx)+cx
by=σ(ty)+cy
bw=pwetw
bh=pheth
(4)
同時利用Simgoid函數(shù)解碼置信度和類別,設(shè)置閾值過濾無用的預(yù)測框,最后經(jīng)過NMS算法,得到行人目標(biāo)置信度最高的預(yù)測框,如表2所示。
表2 行人檢測流程
本文實驗環(huán)境為:Inter?Xeon?E5-2689 CPU @3.60GHz,16GB內(nèi)存,NVIDIA GeForce RTX 2070Ti,Ubuntu16.04系統(tǒng),PyTorch深度學(xué)習(xí)框架,GPU加速庫為CUDA10.2和CUDNN8.0.4。實驗中,數(shù)據(jù)集分布如表3所示。
表3 混合行人數(shù)據(jù)集
實驗采用檢測精度(AP)、查準(zhǔn)率(precision)、查全率(recall)對模型效果進(jìn)行評估,即式(5)。
(5)
其中,TP和FP分別表示真假正例;FN表示假負(fù)例。
實驗中輸入圖像尺寸為608×608,采用adam優(yōu)化器自動調(diào)節(jié)學(xué)習(xí)率,初始超參數(shù)設(shè)置如表4所示。
表4 初始超參數(shù)設(shè)置
損失函數(shù)如圖7所示。
圖7 損失函數(shù)曲線圖
從圖中可以看出,隨著eporch次數(shù)增加,總損失下降較快,經(jīng)過200 eporch后,總損失趨于穩(wěn)定。
以AP和eporch為y軸和x軸來繪制,準(zhǔn)確率曲線圖如圖8所示。
圖8 準(zhǔn)確率曲線圖
將YOLOv3算法與不同改進(jìn)策略算法,在P、R、AP上進(jìn)行比較。通過對YOLOv3的網(wǎng)絡(luò)進(jìn)行修改,在三個尺度檢測分支加入SPP層,融合不同大小的特征,提取特征提取能力。相對于YOLOv3-spp,查全率和準(zhǔn)確率分別提高2.8%和1.7%,如表5和圖9所示。
表5 不同改進(jìn)策略測試結(jié)果
圖9 不同改進(jìn)策略結(jié)果對比
此外,引入了自適應(yīng)多尺度特征融合,使用采樣方式,融合三個尺度特征圖的語義信息,增加特征的豐富度,提高對不同大小行人的檢測能力。相對于YOLOv3-spp,查全率和準(zhǔn)確率分別提高2.7%和1%。
在輸出預(yù)測框之前,采用k-means算法,可以有效提高檢測能力,提高檢測網(wǎng)絡(luò)的查全率。相對于YOLOv3-spp,查準(zhǔn)率、查全率和精度分別提高10.2%、1.5%和3.3%。
在輸出預(yù)測框之前,采用k-means算法,可以有效提高檢測能力,提高檢測網(wǎng)絡(luò)的查全率。相對于YOLOv3-spp,查準(zhǔn)率、查全率和精度分別提高10.2%、1.5%和3.3%。
神經(jīng)網(wǎng)絡(luò)通常采用浮點運(yùn)算次數(shù)(FLOPS)和模型參數(shù)量或模型體積表示模型的時間和空間復(fù)雜度。對YOLOv3和本文算法進(jìn)行復(fù)雜度對比,可以看到本文算法的浮點運(yùn)算次數(shù)減少0.3GFLOPS,減少了模型訓(xùn)練和預(yù)測的時間,降低了時間復(fù)雜度。當(dāng)輸入相同時,本文算法在前后向傳播過程中所占GPU顯存降低了10.32MB,模型權(quán)重內(nèi)存占用增加了2.4MB,總占用降低了7.92MB,降低了空間復(fù)雜度,如表6所示。
表6 復(fù)雜度分析
為了提高智能監(jiān)控下,對不同大小行人目標(biāo)的檢測精度。本文借鑒特征融合思想,通過引入SPP和ASFF結(jié)構(gòu),增加模型的特征提取和表達(dá)能力。在結(jié)果預(yù)測階段,改進(jìn)錨框的尺寸,提高了錨框與行人目標(biāo)的匹配能力。實驗結(jié)果表明,引入單一的SPP或ASFF結(jié)構(gòu),可以提高模型的檢測精度。引入全部的改進(jìn)策略后,檢測精度得到了3.3%的提高。