吉鵬飛
(浙江理工大學(xué) 信息學(xué)院,杭州 310018)
行人檢測目的是通過計算機自動識別當(dāng)前畫面中的行人并將其標(biāo)定出來,是身份判定、姿態(tài)分析、目標(biāo)追蹤等研究的子任務(wù)。行人檢測在視頻監(jiān)控、車輛輔助駕駛、智能交通等領(lǐng)域應(yīng)用廣泛[1]。影響行人檢測準(zhǔn)確率的主要因素有人員密集、背景繁雜、遮擋嚴(yán)重和目標(biāo)形變等。目前行人檢測主要分為基于傳統(tǒng)機器學(xué)習(xí)和深度學(xué)習(xí)算法兩種。
傳統(tǒng)機器學(xué)習(xí)算法通過提取行人特征,如顏色特征、紋理特征等,通過分類器在圖片中檢測出所有目標(biāo)。Vida 和Jones 等較早的提出了VJ 檢測器并用于行人檢測任務(wù)[2];Dalai 等提出了將HOG 結(jié)合SVM 用于行人檢測[3];Wu 等提出了一種基于人體部件的Edgelet 特征,能夠提高遮擋情景下的準(zhǔn)確率[4];Felzenszwalb 等用DPM(Deformable Parts Model)算法檢測行人,該算法能減弱人員形變帶來的影響[5];P.Dollar 等提出積分通道特征(Integral Channel Feature,ICF)應(yīng)用于行人檢測、速度和精度有了很大提升[6];甘玲等采用聚合支持向量機(Ensemble SVM)分類器解決了正負(fù)樣本數(shù)量相差過大的問題[7]。
深度學(xué)習(xí)算法主要是通過神經(jīng)網(wǎng)絡(luò)對大量的數(shù)據(jù)進行訓(xùn)練得到一個模型,圖片輸入后能直接找到所有目標(biāo)?;谏疃葘W(xué)習(xí)的行人檢測算法可分為3類:
(1)基于深度置信網(wǎng)絡(luò)(Deep Belief Networks,DBN),通過訓(xùn)練神經(jīng)元間的權(quán)重,讓整個神經(jīng)網(wǎng)絡(luò)按照最大概率來生成訓(xùn)練數(shù)據(jù)[8];
(2)基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)。雙階段CNN算法有 Faster-RCNN、MaskRCNN、CascadeRCNN 等,需要用算法先生成一定數(shù)量的候選框后才進行分類和回歸,因此two-stage 準(zhǔn)確率更高。單階段CNN 算法如SSD,YOLO 等則直接進行分類和回歸;
(3)基于循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN),是一類在其演進方向進行遞歸且所有節(jié)點按鏈?zhǔn)竭B接的神經(jīng)網(wǎng)絡(luò)[9];LSTM(Long ShortTerm Memory networks)是最常見的循環(huán)神經(jīng)網(wǎng)絡(luò)。
雖然目前行人檢測準(zhǔn)確率已經(jīng)較高,但仍然存在許多問題:
(1)預(yù)測目標(biāo)框不佳,盡管能夠檢測出目標(biāo),但包圍框有較大冗余或和實際目標(biāo)框存在一定程度偏移;
(2)漏檢,當(dāng)目標(biāo)在檢測畫面中較小或遮擋較多,難以查詢出所有目標(biāo);
(3)誤檢,將一些類人目標(biāo)錯誤的判別成行人。
Faster-RCNN 是一種雙階段目標(biāo)檢測網(wǎng)絡(luò),其結(jié)構(gòu)如圖1 所示。Faster-RCNN 與單階段網(wǎng)絡(luò)不同的是在通過由多個卷積層、激勵層和池化層組成的骨干特征提取網(wǎng)絡(luò)后,不是直接進行分類和回歸,而是要經(jīng)過一個RPN 網(wǎng)絡(luò),圖1 中紅線標(biāo)注的部分即是RPN 網(wǎng)絡(luò),其目的是為后續(xù)精確的分類和回歸網(wǎng)絡(luò)提供一定數(shù)量的候選框。ROI Pooling 的作用是將RPN 生成的候選框轉(zhuǎn)變成某一特定大小的框,為之后更細(xì)致的分類和回歸任務(wù)提供方便。
圖1 Faster-RCNN 網(wǎng)絡(luò)圖Fig.1 Faster-RCNN network diagram
Cascade RCNN 是由Faster-RCNN 改進而來的,其結(jié)構(gòu)如圖2 所示。與Faster-RCNN 相比其最大的改進是級聯(lián)多個不同IOU(Intersection over Union,預(yù)測框和實際框的交并比)的分類回歸網(wǎng)絡(luò)。通常IOU值較低時,會學(xué)習(xí)到很多背景特征信息,降低模型預(yù)測的準(zhǔn)確率;而IOU值較高時盡管能夠減小匹配的錯誤率,但這樣會造成有效樣本占比太小,出現(xiàn)過擬合的問題。Cascade R-CNN 是一種stage-bystage 的結(jié)構(gòu),上一個檢測網(wǎng)絡(luò)輸出是后一個檢測模型的輸入,并且每個階段的IOU閾值依次增加。與Faster-RCNN 一樣,輸入圖片經(jīng)過一個特征提取網(wǎng)絡(luò)CNN 后,通過RPN 網(wǎng)絡(luò)產(chǎn)生一定數(shù)量的proposals,圖2 中B0就是proposals,與faster-Rcnn 一樣要對這些proposals 進行精細(xì)的分類和回歸,C 和B 分別代表分類和回歸網(wǎng)絡(luò),H 代表網(wǎng)絡(luò)頭部。
圖2 Cascade RCNN 網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Cascade RCNN network structure
Cascade RCNN 的損失函數(shù)(1)為:
其中,pi和pi?分別表示預(yù)測類別的概率和正負(fù)樣本標(biāo)簽;ti和分別表示預(yù)測框和實際框的坐標(biāo);λ是回歸損失占整個損失函數(shù)的比重。分類損失函數(shù)(2)為:
位置回歸函數(shù)(4):
通常為了提升檢測精度,會選擇更加復(fù)雜的骨干特征提取網(wǎng)絡(luò),但這樣會引入過多的參數(shù),增加計算量。ResNet 是一種常用的特征提取網(wǎng)絡(luò),其結(jié)構(gòu)如圖3 左側(cè)所示,學(xué)習(xí)的目標(biāo)是目標(biāo)值和輸入的“差值”,這樣能有效解決網(wǎng)絡(luò)加深帶來的梯度消失問題[10]。本文選用ResNeXt101 代替ResNet 作為最終模型的骨干特征提取網(wǎng)絡(luò),其結(jié)構(gòu)如圖3(b)所示,ResNeXt 瓶頸結(jié)構(gòu)是在ResNet 基礎(chǔ)上改進而來的。ResNext 用多路與ResNet 類似的拓?fù)浣Y(jié)構(gòu)的blocks 提取特征,最后融合多路特征,這樣不僅可以減少計算量,而且模型擬合能力也得到了進一步提升。實踐已經(jīng)證明增加分組卷積的分支數(shù)比加深或加寬網(wǎng)絡(luò)對準(zhǔn)確率的提升更大。
與faster-rcnn 一樣,為了更好地適應(yīng)圖片中目標(biāo)形狀、大小的變化,Cascade RCNN 也引入了anchor 機制,如圖4 所示。在特征圖上每個位置生成多個不同比例、不同尺度的anchor,每個anchor 都對應(yīng)著原圖一定大小形狀的區(qū)域。Cascade RCNN有默認(rèn)的anchor 尺度、長寬比,但如果用默認(rèn)參數(shù)可能難以生成與實際需要相匹配的目標(biāo)框。為此本文采用kmeans 聚類算法得到更適應(yīng)實驗數(shù)據(jù)集的anchor 長寬比例,其詳細(xì)步驟為:
圖4 anchor 機制Fig.4 Anchor mechanism
(1)將訓(xùn)練集中bounding box 對角坐標(biāo)轉(zhuǎn)變成高和寬的數(shù)據(jù);
(2)在訓(xùn)練集中挑選k個bounding boxes 對k個anchor-box 初始化;
(3)算出所有的bounding box 和每個anchorbox 的IOU,將所有的bounding box 分類給與其誤差d最小的anchor-box。用d(n,k)(d =1-IOU)來刻畫第n個bounding box 和第k個anchor-box 間的誤差;
(4)根據(jù)分類的結(jié)果找出每個anchor box 對應(yīng)的bounding box 的長寬的中值,并用其來更新anchor box;
(5)重復(fù)上面的步驟,直到bounding box 的分類已經(jīng)不再更新。
本文采用了多尺度訓(xùn)練和測試的方法,能夠?qū)W習(xí)不同尺度目標(biāo)下的特征,提高了模型的適應(yīng)能力。實驗中將訓(xùn)練集和測試集同時放大一定比例(雙線性插值)一定程度上可以提高小尺度目標(biāo)的檢測準(zhǔn)確率。
對于同一目標(biāo),根據(jù)模型可能會在其周圍生成若干重疊率較高的預(yù)測框,如圖5 所示。通常本文用NMS 只留下置信度最高的框,將其余的框排除。本文通過WBF(Weight BoxFusion)方式融合多個模型的結(jié)果,提高了目標(biāo)檢測的準(zhǔn)確率,其可以修正單個模型預(yù)測不精確的問題,消除冗余的邊界框,最終預(yù)測框坐標(biāo)是多個模型預(yù)測框的坐標(biāo)加權(quán)和,權(quán)重為相應(yīng)的邊界框置信度[11]。
圖5 NMS 和WBF 處理重疊框Fig.5 NMS and WBF processing overlapping boxes
WBF 的主要步驟:
(1)將N個模型的所有預(yù)測框按得分降序輸入到List B 中;
(2)新建兩個空的ListL和ListF。遍歷B,在F中尋找和其匹配的框(IOU >閾值),如果找到,就將其插入到L[i]中,i表示該框在F中的下標(biāo);如果未找到,直接將其插入到L和F的末尾;
(3)利用L[i]處所有的m個框(L與F可能是一對多的關(guān)系)加權(quán)計算F[i]框的坐標(biāo)(x1,y1,x2,y2)和得分C,式(5)~式(7):
(4)如果B 中每個框都處理完了,再次對F得分更新,式(8):
為了提高訓(xùn)練出的模型的穩(wěn)定性和泛化能力,本文采用了SWA(Stochastic Weight Averaging)方法融合多個訓(xùn)練周期的模型,該方法可以在一定程度上提高目標(biāo)檢測的準(zhǔn)確率,并且不會增加額外的計算量[12],融合第i輪模型后的公式(9):
本文一共訓(xùn)練20 輪得到20 個模型。根據(jù)式(9),本文采用第9~19 輪階段參數(shù)模型加權(quán)融合為最終模型。
實驗基于CentOS 操作系統(tǒng),Python3.6,pytorch1.4,cuda10.1,GPU 型號為tesla T4,顯存為15G,CPU 型號為Intel(R)Xeon(R)Silver 4110,2.10GHz。實驗用的人體檢測數(shù)據(jù)集是Crowd-Human,訓(xùn)練和測試的圖片有1.5w 和5k 張,共340k 個人體目標(biāo),并且有場景多樣、尺度各異,部分目標(biāo)還存在一定的遮擋。
為了增加數(shù)據(jù)集的多樣性,提高模型的泛化能力,本文嘗試了一些數(shù)據(jù)增強方法,如水平翻轉(zhuǎn)、GridMask、高斯模糊、顏色抖動等。實驗學(xué)習(xí)率初始值為12×10-4,一共經(jīng)歷20 輪訓(xùn)練。
CrowdHuman 數(shù)據(jù)集采用JI(Jaccard Index)評測,被定義為式(10):
其中,|D |和|G |分別表示預(yù)測框和標(biāo)注框的數(shù)量,|Matchiou(D,G)|是兩者匹配的數(shù)量(評判標(biāo)準(zhǔn)是IOU >Threshold),本文IOU閾值為0.5。
為了證明提出的改進之處的實用性,本文主要設(shè)計了3 個實驗:ResNeXt101 代替ResNet 實驗、kmeans 聚類算法生成anchor 長寬比實驗和引入WBF 算法實驗。
通過觀察訓(xùn)練集,發(fā)現(xiàn)大多數(shù)對象的縱橫比都大于1.0,為了得到更好的縱橫比的anchor,本文采用kmeans 聚類算法得到anchor 的長寬比為[1.05,1.84,3.21],為了使用方便,本文將其取整[1.0,2.0,3.0](Cascade- RCNN 默認(rèn)的比例為[0.5,1,2])。由于實驗數(shù)據(jù)集中的圖片尺度差異較大,其短邊幾百像素至幾千像素不等。為此,本文通過多尺度訓(xùn)練的方式將訓(xùn)練集中的圖片短邊做一定程度的縮放或放大,長邊按相同比例縮小或放大,結(jié)果見表1。
表1 kmeans 得到anchor 比例前后對比結(jié)果Tab.1 Comparison results before and after the anchor ratio obtained by kmeans
從表1 中對比發(fā)現(xiàn)1 440~1 760 的訓(xùn)練尺度較較小的704~1 024 尺度得分大幅提高,提高了4.7%(數(shù)據(jù)集中有較多的小目標(biāo)),用kmeans 聚類算法能夠獲得更好的包圍框,其準(zhǔn)確率提升了0.7%。
為測試不同骨干特征提取網(wǎng)絡(luò)的性能,本文選擇了Res50、Res101 和ResNeXt101 作為特征提取網(wǎng)絡(luò)。同時為了提高準(zhǔn)確率,將Res101 和ResNeXt101 得到的模型通過WBF 算法融合預(yù)測框,最后加入kmeans聚類算法,得到最終目標(biāo)檢測結(jié)果,見表2。
表2 不同特征提取網(wǎng)絡(luò)對比實驗Tab.2 Comparison experiments of different feature extraction networks
從表2 可以看出,更深層次的Res101 比淺層的Res50 特征提取網(wǎng)絡(luò)效果要好,融合多路特征的ResNeXt101 網(wǎng)絡(luò)比Res101 得分提高3.7%,使用WBF 融合后得分提高約1.2% 。實驗結(jié)果顯示ResNeXt 作為骨干網(wǎng)絡(luò)比ResNet 性能有很大提升,用ResNeXt101 和Res101 做WBF 融合后較未融合前準(zhǔn)確率也有一些提升,最后加入kmeans 聚類算法,較基礎(chǔ)Cascade RCNN 整體性能提升近6%。提升前后的對比如圖6 所示,圖6(a)標(biāo)注的1 和2 框均要比左側(cè)的更好,同時發(fā)現(xiàn)當(dāng)遮擋較嚴(yán)重時,本文的算法也很難檢測出來。
圖6 算法提升前后對比圖Fig.6 Comparison chart before and after algorithm upgrade
在人員密集的場景下,難免會發(fā)生遮擋、較大程度的形變等問題,本文提出的基于改進的Cascade-RCNN 的目標(biāo)檢測網(wǎng)絡(luò)能夠有效提高目標(biāo)檢測的準(zhǔn)確率,減小漏檢的概率。實驗結(jié)果表明用ResNeXt101網(wǎng)絡(luò)作為基礎(chǔ)骨干網(wǎng)絡(luò),在不增加計算量的基礎(chǔ)上融合多路特征,能夠獲得更細(xì)致的特征進而提高檢測的準(zhǔn)確率。用本文所述的kmeans 聚類算法得到的anchor 比例能得到更適合當(dāng)前數(shù)據(jù)集的目標(biāo)框,通過WBF 算法融合多個模型的檢測結(jié)果能夠得到更加準(zhǔn)確的預(yù)測框。整體而言,改進的Cascade-RCNN 算法較基礎(chǔ)的Cascade- RCNN 算法的人員檢測性能有很大提升,但對于一些重疊較大、尺度過小的目標(biāo),本文的方法依舊無能為力,這也是后續(xù)研究的難點。