王 飛 王 林 張儒良 趙 勇 王全紅
(1.貴州民族大學(xué)人文科技學(xué)院,貴陽,550025;2.貴州民族大學(xué)數(shù)據(jù)科學(xué)與信息工程學(xué)院,貴陽,550025;3.北京大學(xué)深圳研究生院信息工程學(xué)院,深圳,518055)
近年來,隨著深度學(xué)習(xí)(Deep learning,DL)這股浪潮的興起,計(jì)算機(jī)視覺領(lǐng)域逐漸采用深度學(xué)習(xí)算法來研究目標(biāo)檢測。2013年,Sermanet等[1]提出一種基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional neural networks,CNN)的OverFeat算法,該算法主要采用滑窗來實(shí)現(xiàn)對目標(biāo)的定位檢測。2014年,Girshick等[2]提出RCNN(Region convolutional neural network)算法。該算法首先采用選擇性搜索(Selective search,SS)[3]從圖像中提取2 000個(gè)可能包含目標(biāo)的候選區(qū)域,即感興趣區(qū)域(Region of interest,RoI);然后將這些RoI壓縮到統(tǒng)一大?。?27×227),并傳遞給CNN進(jìn)行特征提取;最后把提取到的特征送入支持向量機(jī)(Supported vector machine,SVM)分類器,以獲得該RoI的種類。2015年,Girshick等[4]提出Fast R-CNN算法,該算法首先采用SS算法從原始圖像中提取2 000個(gè)RoI,然后對整幅圖像進(jìn)行卷積計(jì)算,得到卷積特征圖,最后使用感興趣區(qū)域池化層從卷積特征圖中提取每個(gè)候選框的特征向量。2015年,Ren等[5]提出Faster R-CNN算法,該算法采用區(qū)域建議網(wǎng)絡(luò)(Region proposal network,RPN)替代SS算法進(jìn)行候選框選擇,使整個(gè)目標(biāo)檢測實(shí)現(xiàn)了端到端的計(jì)算。深度學(xué)習(xí)目標(biāo)檢測也可以采用回歸的思想。最具有代表性的是YOLO[6](You only look once)和SSD[7](Single shot multibox detector)兩種算法。
行人檢測是通用目標(biāo)檢測的一種特例。針對行人檢測自身的特性,研究人員提出一些基于深度學(xué)習(xí)的行人檢測算法。2013年,Ouyang等[8]提出Joint deep算法,該算法將行人檢測的特征提取、變形處理、遮擋處理和分類組合成一個(gè)聯(lián)合的深度學(xué)習(xí)框架。2016年,Zhang等[9]提出一種結(jié)合RPN和RF(Roosted forests)的行人檢測算法,該算法有效地克服了R-CNN用于行人檢測的兩個(gè)限制:處理小實(shí)例的特征映射的分辨率不足和缺乏用于挖掘難例的引導(dǎo)策略。2017年,Mao等[10]提出一種HyperLearner網(wǎng)絡(luò)架構(gòu),其聯(lián)合學(xué)習(xí)行人檢測以及給定的額外特征。通過多任務(wù)訓(xùn)練,其能夠利用給定特征的信息來提高檢測性能,而不需要額外的推理輸入。
針對多尺度行人檢測的問題,本文對特征金字塔網(wǎng)絡(luò)[11](Feature pyramid networks,F(xiàn)PN)和Faster R-CNN進(jìn)行融合,提出一種基于融合FPN和Faster R-CNN的行人檢測算法。
基于Faster R-CNN的行人檢測的整體網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1所示,該網(wǎng)絡(luò)結(jié)構(gòu)的輸入是一幅包含行人的圖像,輸出是行人的概率得分和邊界框。RPN生成300個(gè)候選區(qū)域輸入給行人檢測網(wǎng)絡(luò)Fast RCNN,考慮到RPN和Fast R-CNN網(wǎng)絡(luò)的前部分都采用若干卷積層來計(jì)算特征圖。因此,此網(wǎng)絡(luò)結(jié)構(gòu)把這兩個(gè)網(wǎng)絡(luò)統(tǒng)一成一個(gè)網(wǎng)絡(luò),使得RPN和Fast R-CNN卷積層參數(shù)共享,最終形成一個(gè)端到端的目標(biāo)檢測網(wǎng)絡(luò)結(jié)構(gòu)。
圖1 基于Faster R-CNN的行人檢測的整體網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.1 Overall network structure diagram of pedestrian detection based on Faster R-CNN
當(dāng)前,用于圖像特征提取的主流網(wǎng)絡(luò)有 AlexNet,GoogLeNet,VGGNet,ResNet和 DenseNet。綜合考慮網(wǎng)絡(luò)的復(fù)雜度以及分類精度,本文采用VGG16網(wǎng)絡(luò)來提取圖像特征,即采用在ImageNet數(shù)據(jù)集上預(yù)訓(xùn)練的權(quán)值作為初始值進(jìn)行網(wǎng)絡(luò)訓(xùn)練。
Faster R-CNN使用CNN直接生成候選區(qū)域,該網(wǎng)絡(luò)稱之為RPN,如圖2所示。在RPN中,最后一個(gè)卷積層有512個(gè)卷積核,因此,特征圖有512個(gè),特征維度為512維,每個(gè)特征圖的大小約為40×60。采用3×3的滑窗來滑動(dòng)特征圖,當(dāng)滑窗滑到每個(gè)位置時(shí),預(yù)測輸入圖像3種尺度{128,256,512}和3種長寬比{1∶1,1∶2,2∶1}的候選區(qū)域,因此,每個(gè)滑動(dòng)的位置有k=9個(gè)候選區(qū)域,一幅圖像會(huì)生成約40×60×9個(gè)候選區(qū)域。在卷積層之后接有兩個(gè)全連接層,一個(gè)為分類層(Cls-layer),其輸出2k個(gè)得分,用于判定候選區(qū)域是行人還是背景;另一個(gè)為邊界回歸層(Reg-layer),其輸出4k個(gè)坐標(biāo),用于對候選區(qū)域的邊界進(jìn)行微調(diào)。雖然由RPN選取的候選區(qū)域約有2 000個(gè),但是,該網(wǎng)絡(luò)結(jié)構(gòu)依據(jù)候選區(qū)域的得分高低篩選出前300個(gè)輸入到行人檢測網(wǎng)絡(luò)中。
圖2 區(qū)域建議網(wǎng)絡(luò)Fig.2 Region proposal network
R-CNN是將提前生成好的每個(gè)RoI作為一幅圖像輸入到網(wǎng)絡(luò)中進(jìn)行后續(xù)操作。本文先對整幅圖像提取一次卷積層特征,接著把RoI在原始圖像的位置映射到卷積層的特征圖上,以獲得各個(gè)RoI的特征圖。由RoI在原始圖像的位置到特征圖映射任務(wù)的層,稱之為感興趣區(qū)域池化層(RoI pooling layer),如圖3所示。在映射出每一個(gè)RoI的特征圖后,需要把它們輸入給全連接層,但是,全連接層要求大小一樣的特征輸入,而RoI的大小卻是不相同的,為了通過該層映射輸出大小一樣的特征,本文網(wǎng)絡(luò)結(jié)構(gòu)對文獻(xiàn)[12]中SPP-Layer進(jìn)行了改進(jìn),采用單尺度輸出7×7的特征圖,若輸入的候選區(qū)域?yàn)?r,c,h,w),RoI pooling layer首先產(chǎn)生7× 7個(gè)r×c×(h/7)×(w/7)的塊,然后利用Max pooling方式求出每一個(gè)塊的最大值,這樣輸出的都是7×7的特征圖。
圖3 感興趣區(qū)域池化層Fig.3 Region of interest pooling layer
對于多尺度行人檢測的問題,傳統(tǒng)的方法是先構(gòu)建一幅圖像的金字塔,然后通過提取特征來形成特征金字塔,最后在每一層特征圖上進(jìn)行預(yù)測(如圖4(a)),其缺點(diǎn)是計(jì)算開銷比較大。神經(jīng)網(wǎng)絡(luò)的方法僅需要在最后一層特征圖上進(jìn)行預(yù)測(如圖4(b)),也能夠獲得較好的效果,但是,對于小的行人,其表現(xiàn)還是不太好,因此,仍然需要考慮金字塔。SSD采用從多層的特征圖上進(jìn)行預(yù)測(如圖4(c)),為了避免利用太低層的特征,SSD選擇從CNN中的高層開始構(gòu)建金字塔,同時(shí)還往后增加了幾層,以分別抽取每一層特征進(jìn)行綜合利用。SSD未再使用高分辨率的低層特征,而這些層對于檢測小的行人卻是十分重要的。FPN使用自下而上路徑(Bottom-up pathway)、自上而下路徑(Top-down pathway)以及橫向連接(Lateral connections)的方式(如圖4(d))將低分辨率、高語義信息的高層特征與高分辨率、低語義信息的低層特征結(jié)合在一起,使每一個(gè)尺度下的特征均擁有十分豐富的語義信息。
圖4 4種特征金字塔Fig.4 Four feature pyramids
卷積神經(jīng)網(wǎng)絡(luò)的前饋計(jì)算便是自下而上路徑,特征圖經(jīng)卷積核計(jì)算后,往往越變越小。不過,也存在一些特征層的輸出與原來大小相同,稱之為相同網(wǎng)絡(luò)階段。對于本文的特征金字塔,首先為每個(gè)階段定義一個(gè)金字塔等級(jí);然后把每個(gè)階段的最后一層的輸出當(dāng)成特征圖的參考集。具體而言,對于VGG16網(wǎng)絡(luò),首先使用每個(gè)階段的最后一層的特征激活輸出;然后把它們表示為{C2,C3,C4,C5},其與Conv2,Conv3,Conv4以及Conv5的輸出相對應(yīng),同時(shí)相對于輸入圖像具有{4,8,16,32}像素的步長。由于內(nèi)存占用比較大,故沒有將Conv1包含于金字塔。
自上而下路徑,即先將更抽象、語義更強(qiáng)的高層特征圖進(jìn)行上采樣,然后將此特征橫向連接到前一層特征。因此,高層特征得以加強(qiáng)。橫向連接的兩層特征在空間尺寸上要相同,主要是為了利用低層的定位細(xì)節(jié)信息。
構(gòu)建自上而下路徑和橫向連接的示意圖如圖5所示。首先,使用較粗糙的分辨率特征圖將空間分辨率上采樣為2倍;然后,按照元素相加的方式將上采樣圖和自下而上圖合并。重復(fù)迭代此過程,直到產(chǎn)生最精細(xì)的特征圖。為了使迭代開始,在C5后附加一個(gè)1×1的卷積核層,用于產(chǎn)生最粗糙的分辨率圖。最后,需要在每個(gè)合并的圖上附加一個(gè)3×3的卷積,用于產(chǎn)生最終的特征圖,以減少上采樣的混疊效應(yīng)。最終的特征映射集為{P2,P3,P4,P5},對應(yīng)于具有相同空間大小的{C2,C3,C4,C5}。
與傳統(tǒng)的圖像特征金字塔一樣,本文金字塔的每一層均采用共享的分類器或回歸器,需要在每一個(gè)特征圖中固定特征維度(即通道數(shù),記為d)。本文中,設(shè)定d=256,因而所有額外的卷積層具有256個(gè)通道的輸出。
圖5 構(gòu)建自上而下路徑和橫向連接的示意圖Fig.5 Diagram of building top-down pathway and lateral connections
Faster R-CNN主要由RPN和Fast RCNN構(gòu)成,對FPN和Faster R-CNN進(jìn)行融合時(shí),可以將FPN分別融合到RPN和Fast RCNN中。
式中:224表示ImageNet數(shù)據(jù)集預(yù)訓(xùn)練圖像大小,k0表示映射到w×h=2242的RoI的目標(biāo)水平,本文中將k0設(shè)置為4。式(1)意味著若RoI的尺度變?。ㄈ纾?24的1/2),則其應(yīng)該被映射到更精細(xì)的級(jí)別(如:k=3)。
RPN是在密集的3×3的滑窗上評估一個(gè)小的子網(wǎng)絡(luò),同時(shí)在單尺度的卷積特征圖的頂部執(zhí)行目標(biāo)或非目標(biāo)二進(jìn)制分類以及邊界框回歸。它是使用一個(gè)3×3卷積層后跟兩個(gè)用于分類、回歸的1×1卷積實(shí)現(xiàn)的,稱為網(wǎng)絡(luò)頭部。目標(biāo)或非目標(biāo)標(biāo)準(zhǔn)以及邊界框回歸目標(biāo)是相對于一組稱為錨的參考框定義的。錨具有多個(gè)預(yù)定義的比例尺和縱橫比,以覆蓋不同形狀的目標(biāo)。
本文使用FPN替代單尺度特征圖以適應(yīng)RPN。在特征金字塔的每個(gè)等級(jí)上附加一個(gè)一樣設(shè)計(jì)的頭。由于頭部在每一個(gè)金字塔等級(jí)的每一個(gè)位置密集地滑動(dòng),故不需要在特定水平上有多尺度的錨點(diǎn)。相反,本文為每一個(gè)等級(jí)分配一個(gè)單尺度的錨點(diǎn)。在形式上,{P2,P3,P4,P5}所對應(yīng)的錨點(diǎn)的尺度為{642,1282,2562,5122}。本文仍然使用這3種長寬比{1∶1,1∶2,2∶1},因此在金字塔中共有12個(gè)錨點(diǎn)。
訓(xùn)練過程中,本文將重疊率(Intersection over union,IoU)大于0.7的當(dāng)作正樣本,小于0.3的當(dāng)作負(fù)樣本。由于FPN之間有參數(shù)共享,故使所有層級(jí)具有相似的語義信息。
Fast R-CNN采用RoI pooling layer來提取特征,其通常在單尺度特征圖上執(zhí)行。如果要將其與FPN一起使用,那么需要把不同尺度的RoI分配給金字塔等級(jí)。在形式上,可以通過式(1)將寬度w和高度h(在輸入圖像上的網(wǎng)絡(luò))的RoI分配給特征金字塔的等級(jí)Pk,即有
Caltech數(shù)據(jù)集是一個(gè)使用車載攝像機(jī)所拍攝的行人視頻數(shù)據(jù)集,視頻時(shí)長約為10 h,分辨率是640×480,幀率是30幀/s。該數(shù)據(jù)集標(biāo)注了約250 000幀,350 000個(gè)矩形框,2 300個(gè)行人,其包含11個(gè)子集(Set00~Set10),6個(gè)子集(Set00~Set05)用作訓(xùn)練集,剩余的子集用作測試集,訓(xùn)練集、測試集都給定了標(biāo)注信息??紤]到該行人數(shù)據(jù)集是視頻形式,連續(xù)兩幅圖像之間的相似度比較大,故本文分別在訓(xùn)練集、測試集上間隔3幀選取1幀當(dāng)作訓(xùn)練圖像、測試圖像。本文的訓(xùn)練圖像為42 782幅,測試圖像為4 024幅。
在Caltech數(shù)據(jù)集的訓(xùn)練集上進(jìn)行訓(xùn)練時(shí),將初始學(xué)習(xí)率設(shè)定為0.000 2,當(dāng)?shù)螖?shù)達(dá)到50 000次時(shí),學(xué)習(xí)率變?yōu)?.000 02,繼續(xù)迭代20 000次;動(dòng)量為0.9,權(quán)重衰減為0.000 1。
本文算法在Caltech數(shù)據(jù)集的測試集上的mAP如表1所示。在相同訓(xùn)練集、測試集的情況下,本文算法與Faster R-CNN,SSD和PVANET[13]等算法進(jìn)行了比較。由表1可知,本文算法在Caltech數(shù)據(jù)集的測試集上的mAP比PVANET算法高0.62%,比SSD算法高10.13%,比Faster R-CNN算法高1.15%。
表1 Caltech數(shù)據(jù)集測試對比實(shí)驗(yàn)結(jié)果Tab.1 Caltech dataset test comparison experiment results
KITTI數(shù)據(jù)集由7 481幅訓(xùn)練圖像和7 518幅測試圖像構(gòu)成,其主要包含汽車(Car)、行人(Pedestrian)和自行車(Cyclist)等目標(biāo)類別。由于測試圖像沒有給定標(biāo)注信息,故在進(jìn)行訓(xùn)練、測試時(shí),需要將7 481幅訓(xùn)練圖像分為訓(xùn)練和測試兩部分。本文的訓(xùn)練圖像為3 740幅,測試圖像為3 741幅。
在KITTI數(shù)據(jù)集的訓(xùn)練集上進(jìn)行訓(xùn)練時(shí),將初始學(xué)習(xí)率設(shè)定為0.000 25,當(dāng)?shù)螖?shù)達(dá)到50 000次時(shí),學(xué)習(xí)率變?yōu)?.000 025,繼續(xù)迭代40 000次;動(dòng)量為0.9,權(quán)重衰減為0.000 1。
本文算法在KITTI數(shù)據(jù)集的測試集上的mAP如表2所示。在相同訓(xùn)練集、測試集的情況下,本文算法與Faster R-CNN,SSD和PVANET等算法進(jìn)行了比較。由表2可知,本文算法在KITTI數(shù)據(jù)集的測試集上的mAP比PVANET算法高1.92%,比SSD算法高9.53%,比Faster RCNN算法高2.49%。
表2 KITTI數(shù)據(jù)集測試對比實(shí)驗(yàn)結(jié)果Tab.2 KITTI dataset test comparison experiment results
ETC數(shù)據(jù)集是一個(gè)由多個(gè)數(shù)據(jù)集組合而成的數(shù)據(jù)集,其包含ETH數(shù)據(jù)集、TudBrussels數(shù)據(jù)集和部分Caltech數(shù)據(jù)集。本文對多個(gè)數(shù)據(jù)集進(jìn)行組合的原因:(1)ETH數(shù)據(jù)集和TudBrussels數(shù)據(jù)集給定標(biāo)注信息的圖像數(shù)量比較少,ETH數(shù)據(jù)集給定標(biāo)注信息的圖像有1 804幅,而TudBrussels數(shù)據(jù)集給定標(biāo)注信息的圖像有508幅,若單獨(dú)進(jìn)行訓(xùn)練,則可能會(huì)產(chǎn)生過擬合現(xiàn)象。(2)對多個(gè)數(shù)據(jù)集進(jìn)行組合,可以增加數(shù)據(jù)集的多樣性,這樣有利于CNN進(jìn)行特征學(xué)習(xí),但是,由于Caltech數(shù)據(jù)集的圖像分辨率比較低,檢測復(fù)雜度比較高,因此,本文只選擇Caltech數(shù)據(jù)集的1個(gè)子集(Set00)進(jìn)行組合,并且間隔30幀選取1幀。本文的訓(xùn)練圖像為2 646幅,測試圖像為515幅。
在ETC數(shù)據(jù)集的訓(xùn)練集上進(jìn)行訓(xùn)練時(shí),將初始學(xué)習(xí)率設(shè)定為0.000 25,當(dāng)?shù)螖?shù)達(dá)到50 000次時(shí),學(xué)習(xí)率變?yōu)?.000 025,繼續(xù)迭代30 000次;動(dòng)量為0.9,權(quán)重衰減為0.000 1。
本文算法在ETC數(shù)據(jù)集的測試集上的mAP如表3所示。在相同訓(xùn)練集、測試集的情況下,本文算法與Faster R-CNN,SSD和PVANET等算法進(jìn)行了比較。由表3可知,本文算法在ETC數(shù)據(jù)集的測試集上的mAP比PVANET算法高0.42%,比SSD算法高0.72%,比Faster R-CNN算法高8.44%。
表3 ETC數(shù)據(jù)集測試對比實(shí)驗(yàn)結(jié)果Tab.3 ETC dataset test comparison experiment results
本文給出了3個(gè)數(shù)據(jù)集上的部分行人檢測效果圖,如圖6所示。由圖6可知,本文算法在多尺度行人檢測的問題上獲得了較為滿意的檢測效果,并且將目標(biāo)判定為行人的概率得分也比較高。
圖6 本文算法的行人檢測效果圖Fig.6 Pedestrian detection effect diagram of this algorithm
本文針對多尺度行人檢測的問題,將FPN和Faster R-CNN進(jìn)行融合,提出一種基于融合FPN和Faster R-CNN的行人檢測算法。該算法在Caltech數(shù)據(jù)集、KITTI數(shù)據(jù)集和ETC數(shù)據(jù)集上的mAP分別達(dá)到69.72%,69.76%和89.74%。在多尺度行人檢測的問題上,該算法獲得了較為滿意的檢測效果。但是,本文算法對于遮擋的行人還存在漏檢的問題。因此,下一步準(zhǔn)備將高質(zhì)量、高精度的雙目視差圖與RGB圖像進(jìn)行融合,實(shí)現(xiàn)基于深度學(xué)習(xí)的3D行人檢測以解決該問題。