卓 力, 張時(shí)雨, 寇墨林, 閆 璞, 張 輝
(北京工業(yè)大學(xué) 信息學(xué)部,北京 100124)
行人檢測是計(jì)算機(jī)視覺領(lǐng)域的一個(gè)重要研究方向,可以廣泛應(yīng)用于智能監(jiān)控、無人駕駛、機(jī)器人等多個(gè)領(lǐng)域。受到光照、視角、尺度、環(huán)境、遮擋、姿態(tài)變化等多種復(fù)雜因素的影響,行人檢測面臨著巨大的技術(shù)挑戰(zhàn)。
近年來,人們開展了行人檢測技術(shù)的研究。整個(gè)研究工作可以分為兩個(gè)階段:第一階段是采用傳統(tǒng)的手工特征+分類器框架進(jìn)行行人檢測,關(guān)鍵技術(shù)是行人特征提取和分類器。其中HOG(Histogram of Oriented Gradient)是針對行人特點(diǎn)設(shè)計(jì)的特征,它與SVM(Support Vector Machine)相結(jié)合是一種最具代表性的行人檢測方法,在此基礎(chǔ)上王謙等[1]又融入遺傳算法(GA)和粒子群優(yōu)化算法(PSO)進(jìn)一步優(yōu)化參數(shù)。但是手工特征主要依賴于設(shè)計(jì)者的先驗(yàn)知識或者經(jīng)驗(yàn),特征的表達(dá)和區(qū)分能力有限,因此這類方法的檢測性能難以令人滿意。 第二階段是基于深度學(xué)習(xí)的行人檢測,該方法把行人看作是一種特定的目標(biāo),對通用的目標(biāo)檢測方法進(jìn)行改進(jìn),如R-CNN(Region-Based Convolutional Neural Network)系列[2-5]、YOLO(You Only Look Once)系列[6-8]和SSD(Single Shot Multi-Box Detector)系列[9-10]等,使之適用于行人目標(biāo)的檢測。基于深度學(xué)習(xí)的目標(biāo)檢測方法是在大數(shù)據(jù)背景下產(chǎn)生的方法,該方法通過模仿人類大腦的多層抽象機(jī)制實(shí)現(xiàn)對目標(biāo)的抽象表達(dá)和解釋,將特征學(xué)習(xí)和分類器整合在一個(gè)框架下,通過海量的訓(xùn)練數(shù)據(jù)和構(gòu)建多隱層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),可以大幅提高目標(biāo)檢測的準(zhǔn)確性。
目前基于深度學(xué)習(xí)的行人檢測取得了諸多的研究進(jìn)展,但是還面臨著以下兩個(gè)問題:① 由于實(shí)際應(yīng)用中的應(yīng)用場景復(fù)雜,對于小尺度行人,漏檢率非常高。這是因?yàn)樾〕叨刃腥税囊曈X信息非常有限,難以提取行人目標(biāo)的魯棒視覺特征表達(dá)。② 基于深度學(xué)習(xí)的方法可以獲得很好的性能,但是往往是以復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)作為代價(jià),網(wǎng)絡(luò)層數(shù)過多,導(dǎo)致計(jì)算復(fù)雜度太高,難以得到推廣應(yīng)用。
為此,針對目前基于深度學(xué)習(xí)的行人檢測方法存在的不足,提出了一種基于深度卷積神經(jīng)網(wǎng)絡(luò)特征層融合的小尺度行人檢測方法。其基本思想是借鑒YOLO端到端的思想,搭建了一個(gè)包含9個(gè)卷積層和一個(gè)全連接層的CNN網(wǎng)絡(luò)架構(gòu),對不同層級的特征進(jìn)行融合,提升小尺度行人的檢測準(zhǔn)確度。在Caltech[11]、INRIA[12]兩個(gè)公共行人數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明,本文提出的行人檢測方法能夠有效檢測小尺度的行人,且網(wǎng)絡(luò)架構(gòu)的參數(shù)量更少,檢測速度更快。
本文搭建的基于CNN的小尺度行人檢測整體框架如圖1所示。首先,為了提升小尺度行人的檢測精度,采用了分塊的預(yù)處理操作,減少小尺度行人圖像的視覺信息損失。進(jìn)而將CNN第5層與第8層的卷積特征進(jìn)行級聯(lián),充分利用不同層級卷積特征的表征能力,提升檢測性能。
圖1 基于CNN的小尺度行人檢測整體框圖
對于基于深度學(xué)習(xí)的行人檢測方法來說,較大尺寸的行人目標(biāo)往往可以獲得較為準(zhǔn)確的檢測結(jié)果,而對于小尺度行人,則難以獲得理想的檢測結(jié)果。針對這一問題,本文首先對輸入圖像進(jìn)行分塊預(yù)處理操作,將每張圖像切分成4塊,之后再和原圖一起歸一化到同一尺寸共同輸入到網(wǎng)絡(luò)中,然后再根據(jù)不同的尺度縮放系數(shù)將其映射回原圖并融合得到最終結(jié)果,如圖2所示。目的就是利用簡單的分塊操作,避免損失原始圖像中的視覺信息,有效提升對小尺度行人的檢測性能。
圖2 行人檢測框架
整個(gè)檢測過程分為兩個(gè)階段:訓(xùn)練階段和檢測階段。
(1) 訓(xùn)練階段。
雖然目前有許多公開的行人數(shù)據(jù)集,但是它們的圖像格式、標(biāo)注方式、標(biāo)注內(nèi)容都不完全一致,因此需要首先對來自不同數(shù)據(jù)集的行人圖像進(jìn)行預(yù)處理,成為統(tǒng)一格式。本文參照PASCAL VOC數(shù)據(jù)集[13]的標(biāo)注格式,將所需的兩個(gè)行人數(shù)據(jù)集全部進(jìn)行了轉(zhuǎn)換。并采用數(shù)據(jù)擴(kuò)充的方式,增加不同類型的樣本數(shù)量,以提升網(wǎng)絡(luò)的訓(xùn)練性能。之后將數(shù)據(jù)集中的訓(xùn)練圖像樣本進(jìn)行預(yù)處理后,輸入到網(wǎng)絡(luò)進(jìn)行有監(jiān)督訓(xùn)練,得到行人檢測模型。
(2) 檢測階段。
在檢測階段,輸入待檢測圖像,進(jìn)行分塊預(yù)處理后得到一組相同大小的圖像,將這組圖像一同輸入到網(wǎng)絡(luò),利用訓(xùn)練得到的行人檢測模型進(jìn)行預(yù)測,最后融合每塊的預(yù)測結(jié)果得到最終的行人檢測結(jié)果。
如前所述,CNN已經(jīng)被廣泛應(yīng)用于各種計(jì)算機(jī)視覺任務(wù)中,并獲得了遠(yuǎn)超過傳統(tǒng)方法的性能。大量的研究結(jié)果表明,利用CNN網(wǎng)絡(luò)提取的深度特征對于平移、旋轉(zhuǎn)、縮放等形變具有很好的魯棒性,不同卷積層能夠提取不同層級的特征,可以有效表征圖像的局部和全局特性。
為此,參考YOLO網(wǎng)絡(luò)架構(gòu),搭建了一種CNN網(wǎng)絡(luò)架構(gòu),用于行人檢測,如圖3所示。該網(wǎng)絡(luò)共包含9個(gè)卷積層、6個(gè)池化層和1個(gè)全連接層,并且將第8個(gè)卷積層特征上采樣后與第5個(gè)卷積層特征進(jìn)行級聯(lián),充分利用不同層級特征的表達(dá)能力,以達(dá)到更好的檢測效果。本文提出的CNN網(wǎng)絡(luò)模型的參數(shù)量大小為34.7 MB,僅有YOLO模型的1/3左右,大大減小了參數(shù)量。
圖3 基于深度卷積神經(jīng)網(wǎng)絡(luò)特征層融合的行人檢測網(wǎng)絡(luò)結(jié)構(gòu)圖
深度神經(jīng)網(wǎng)絡(luò)模型的參數(shù)量集中在大的卷積核和全連接層。本網(wǎng)絡(luò)多選用3×3的卷積核,既可以保證感受野,又能有效減少卷積層的參數(shù)。在前6個(gè)卷積層后均增加一個(gè)最大池化層,能夠有效進(jìn)行特征降維、壓縮數(shù)據(jù)和參數(shù)數(shù)量,抑制過擬合,同時(shí)提高模型的容錯(cuò)性。
所提出的行人檢測網(wǎng)絡(luò)中卷積層、池化層和全連接層的具體參數(shù)在圖3中給出,其中每層名稱之后的數(shù)字表示“核尺寸/步長/卷積核數(shù)量”,網(wǎng)絡(luò)中的全連接層采用1×1的卷積層實(shí)現(xiàn)。
訓(xùn)練過程中各項(xiàng)參數(shù)的選擇對網(wǎng)絡(luò)的性能起著非常關(guān)鍵的作用。在訓(xùn)練優(yōu)化網(wǎng)絡(luò)的過程中采用了隨機(jī)梯度下降法,初始學(xué)習(xí)率(learning_rate)設(shè)置為 0.0001,momentum設(shè)置為0.9,之后在迭代固定次數(shù)后減小學(xué)習(xí)率。為了防止過擬合,將權(quán)重衰減(weight decay)設(shè)置為0.0005,每次迭代訓(xùn)練的圖像數(shù)量(batch)大小為64,最大迭代次數(shù)(max_batches)設(shè)置為500200。
目前行人檢測的公開數(shù)據(jù)集大致分為兩類:一類是動(dòng)態(tài)數(shù)據(jù)庫,以車載視頻數(shù)據(jù)為主,如Caltech[11]等;另一類是靜態(tài)數(shù)據(jù)庫,是用于研究靜態(tài)圖像行人檢測的圖像數(shù)據(jù)集,如MIT[14]、INRIA[12]等。為了驗(yàn)證所提出的行人檢測方法的有效性,在INRIA[12]、Caltech[11]兩個(gè)代表性的行人數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn)。
(1) Caltech行人數(shù)據(jù)庫。
Caltech行人數(shù)據(jù)庫[11]是目前最大的車載視頻數(shù)據(jù)庫,共包含約10 h的道路視頻,分辨率為640像素×480像素,幀率為30 f/s。其中137 min的圖像內(nèi)容被標(biāo)注,涉及250000 f,其中行人數(shù)量為2300,矩形框數(shù)量為350000,包含行人遮擋情況。由于Caltech只包含視頻文件,所以需要先將視頻中的行人圖像截取出來進(jìn)行標(biāo)注。其中set06~set10的標(biāo)注信息尚未公開,所以本文僅使用了set00~set05子集,每個(gè)子集中具體圖像數(shù)量由表2所示。
表2 Caltech數(shù)據(jù)集子集的圖像數(shù)量
(2) INRIA數(shù)據(jù)庫。
這是最為常用的靜態(tài)行人圖像數(shù)據(jù)庫。因其樣本圖像均有標(biāo)注好的標(biāo)簽文件,并有訓(xùn)練集合測試集的劃分,所以在對比算法效果時(shí),更具有說服力。訓(xùn)練集包含正樣本614張,負(fù)樣本1218張;測試集包含正樣本288張,負(fù)樣本453張。圖像中行人多為站立姿勢且大于100像素,主要來源于GRAZ-01、個(gè)人照片和Google,因此圖像的清晰度較高。
這兩個(gè)數(shù)據(jù)集有不同的標(biāo)注格式,所以在進(jìn)行訓(xùn)練時(shí),對數(shù)據(jù)集進(jìn)行了預(yù)處理,統(tǒng)一轉(zhuǎn)換為標(biāo)準(zhǔn)PASCAL VOC格式[13],便于訓(xùn)練和測試。
評價(jià)一個(gè)行人檢測算法是否有效,可以通過在某一數(shù)據(jù)集上的準(zhǔn)確性來進(jìn)行驗(yàn)證。而衡量準(zhǔn)確性的兩個(gè)最重要的指標(biāo)就是查準(zhǔn)率(Precision,又稱精確率)和查全率(Recall,又稱召回率)。除此之外,漏檢率(Miss Rate)也常被用來評價(jià)行人檢測算法的性能。本文采用查準(zhǔn)率、查全率和漏檢率作為性能評價(jià)指標(biāo)。
在行人檢測中,檢測為“是”的正樣本為True Positive,記為TP;檢測為“否”的負(fù)樣本為True Negative,記為TN;錯(cuò)誤檢測為“是”的負(fù)樣本為False Positive,記為FP;錯(cuò)誤檢測為“否”的正樣本為False Negative,記為FN。則上述3個(gè)指標(biāo)的定義如下:
(1)
(2)
(3)
大量的研究結(jié)果表明,對于特定的計(jì)算機(jī)視覺任務(wù)來說,有標(biāo)注的訓(xùn)練樣本往往比較有限。在此情況下,采用預(yù)訓(xùn)練策略可以有效提升網(wǎng)絡(luò)性能。為了探究預(yù)訓(xùn)練策略對于行人檢測性能的影響,首先在大型目標(biāo)檢測數(shù)據(jù)庫——PASCAL VOC數(shù)據(jù)集[13]上進(jìn)行了預(yù)訓(xùn)練,然后再在本節(jié)的2個(gè)數(shù)據(jù)集上進(jìn)行微調(diào)。
本文將兩個(gè)數(shù)據(jù)集中的訓(xùn)練數(shù)據(jù)進(jìn)行合并之后用于模型訓(xùn)練,在訓(xùn)練過程中迭代了500200次后,loss為0.0573,平均loss為0.1152。訓(xùn)練得到的模型很小,參數(shù)量為34.7 MB,檢測單張圖像用時(shí)0.003 s,檢測速度很快。
圖4和圖5為在未采用預(yù)訓(xùn)練策略的情況下,不同的迭代次數(shù),得到的訓(xùn)練過程中的平均損失avg_loss和平均交并比avg_iou曲線。圖6和圖7為采用了預(yù)訓(xùn)練策略的情況下,不同的迭代次數(shù)后得到的訓(xùn)練過程中的avg_loss和avg_iou曲線。通過對比可以看出,采用了預(yù)訓(xùn)練策略,訓(xùn)練過程中avg_loss會(huì)迅速下降,最終loss值由0.0573降為0.0178,avg_loss由0.1152下降為0.0235。
圖4 訓(xùn)練過程的avg_loss
圖5 訓(xùn)練過程的avg_iou
圖6 預(yù)訓(xùn)練后訓(xùn)練過程的avg_loss
圖7 預(yù)訓(xùn)練后訓(xùn)練過程的avg_iou
表3為在INRIA數(shù)據(jù)集上,采用和未采用預(yù)訓(xùn)練策略對行人檢測性能的影響對比結(jié)果??梢钥闯觯捎妙A(yù)訓(xùn)練策略,查準(zhǔn)率提升了4.98%,查全率提升了4.56%,分別達(dá)到了97.29%和98.14%。可見在標(biāo)注樣本有限的情況下,預(yù)訓(xùn)練策略對于行人檢測性能的提升起著非常重要的作用。
表3 預(yù)訓(xùn)練模型對檢測性能的影響
所提出的行人檢測方法是將第8個(gè)卷積層特征上采樣后與第5個(gè)卷積層特征進(jìn)行級聯(lián),以充分利用不同卷積層特征的表征能力,達(dá)到更好的檢測效果。為了驗(yàn)證第5層卷積特征與第8層卷積特征級聯(lián)方式的有效性,本節(jié)還將與直接用第8層卷積特征進(jìn)行行人檢測的方式進(jìn)行了對比。未添加級聯(lián)層的網(wǎng)絡(luò)結(jié)構(gòu)如圖8所示。
圖8 未添加級聯(lián)特征層的網(wǎng)絡(luò)結(jié)構(gòu)圖
圖9和圖10為采用圖8所示的結(jié)構(gòu),在相同的數(shù)據(jù)集下訓(xùn)練迭代了500200次后,得到的訓(xùn)練過程中的avg_loss和avg_iou。最終loss為0.9318,avg_loss為0.7636,查全率為85.92%,查準(zhǔn)率為90.65%。通過與表3的實(shí)驗(yàn)結(jié)果進(jìn)行對比,可以看出,與僅使用第8層的卷積特征相比,采用本文提出的第5層卷積特征與第8層卷積特征級聯(lián)的方式可以獲得更優(yōu)的檢測性能。
圖9 未級聯(lián)特征結(jié)構(gòu)訓(xùn)練過程的avg_loss
圖10 未級聯(lián)特征結(jié)構(gòu)訓(xùn)練過程的avg_iou
由表4所示的實(shí)驗(yàn)結(jié)果可知,采用第5層卷積特征與第8層卷積特征級聯(lián)的方式,可以將查全率提升6.81%,查準(zhǔn)率提升2.51%。由此可證明,采用本文提出的卷積特征級聯(lián)的方式能夠有效利用不同層級特征的表征能力,從而提升行人檢測的性能。
表4 網(wǎng)絡(luò)結(jié)構(gòu)對檢測性能的影響
INRIA數(shù)據(jù)集[12]作為目前被使用最多的公開數(shù)據(jù)集,大多數(shù)算法都會(huì)在此數(shù)據(jù)集上通過對比,展示自己的優(yōu)越性。本文同樣在此數(shù)據(jù)集上進(jìn)行驗(yàn)證對比,實(shí)驗(yàn)平臺(tái)為 Ubuntu 16.04,其擁有 Intel i5 6400 CPU,以及 16 GB內(nèi)存和 GeForce Titan XP GPU。進(jìn)行對比的算法既包括傳統(tǒng)算法中的代表算法——HOG算法[14],也包括了利用輕型CNN網(wǎng)絡(luò)架構(gòu)的深度學(xué)習(xí)算法代表——AlexNet算法[3,16]和PCANet算法[17]。
HOG是最具代表性的行人檢測手工特征,可以獲得較好的檢測性能。AlexNet包含5層卷積層和3層全連接層,其中前兩個(gè)卷積層使用了11×11和5×5大小的卷積核,以減少特征維度,增大局部感受野,后3層的卷積核大小為3×3。雖然網(wǎng)絡(luò)結(jié)構(gòu)簡單,但是在行人檢測方面同樣有較好的應(yīng)用。PCANet則是通過兩層都是5×5的較大卷積核搭建的輕型網(wǎng)絡(luò)進(jìn)行行人檢測[18-19]。
表5是在INRIA數(shù)據(jù)庫上分別采用不同的方法得到的行人檢測性能對比結(jié)果,由表中結(jié)果可以看出,本文方法在查準(zhǔn)率上均高于其他3個(gè)算法。雖然在漏檢率上來看,本文算法的漏檢率不是最低的,但考慮到模型的大小和參數(shù)量,本文算法仍具有一定的優(yōu)勢。
表5 不同方法在INRIA數(shù)據(jù)庫上的行人檢測性能對比結(jié)果
將訓(xùn)練好的行人檢測模型在不同數(shù)據(jù)集上進(jìn)行測試,隨機(jī)選取了INRIA數(shù)據(jù)庫[12]、Caltech數(shù)據(jù)庫[11]、MIT[15]數(shù)據(jù)庫中的行人圖像進(jìn)行檢測,檢測效果如圖11所示。從圖11中可以看出,采用本文提出的方法對小尺寸行人目標(biāo)具有較好檢測結(jié)果。
圖11 數(shù)據(jù)庫示例檢測結(jié)果
本文針對目前已有的基于深度學(xué)習(xí)的行人檢測技術(shù)存在的不足,提出了一種基于CNN的行人檢測算法。該方法利用YOLO算法端到端的思想,搭建了一種包含9個(gè)卷積層和一個(gè)全連接層的深度卷積網(wǎng)絡(luò)架構(gòu),網(wǎng)絡(luò)參數(shù)量更少,檢測速度更快。同時(shí),該方法還利用分塊對圖像進(jìn)行預(yù)處理以提升不同尺度行人的檢測精度。實(shí)驗(yàn)表明,與其他方法相比,本文提出的方法在檢測精度上具有良好的表現(xiàn),并且處理一幀640像素×480像素的圖像平均僅需0.003 s,可為行人檢測算法系統(tǒng)的工程化實(shí)現(xiàn)提供參考。
雖然本方法在查準(zhǔn)率上高于對比方法,但在漏檢率上卻高于傳統(tǒng)方法,這可能是由于本方法僅融合中間層特征進(jìn)行預(yù)測,未考慮到底層特征,并且僅采用特征級聯(lián)作為融合方式。因此未來工作可從利用多層特征結(jié)構(gòu)和特征的融合方式這兩個(gè)方面進(jìn)行深入研究。同時(shí),本方法雖然使用淺層網(wǎng)絡(luò)大大降低了計(jì)算量,但是針對于實(shí)際應(yīng)用來說,對于硬件設(shè)備的依賴還是較大,無法應(yīng)用于未配備GPU的移動(dòng)設(shè)備,今后仍需要對該算法的網(wǎng)絡(luò)架構(gòu)進(jìn)行優(yōu)化,以滿足不同硬件設(shè)備的處理需求。