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