陳 寧,李夢璐,袁 皓,李云紅,楊 迪,劉志堅
西安工程大學 電子信息學院,西安 710600
行人檢測技術就是計算機對于給定的視頻和圖像,判斷出其中是否有行人存在,同時標記出行人位置。人工智能技術的快速發展使得行人檢測在計算機視覺領域再次掀起熱潮。行人檢測為步態分析、行人身份識別、行人分析等提供技術支撐和基礎,被廣泛地應用在視頻監控、車輛輔助駕駛、智能交通等諸多領域。
雖然行人檢測技術在過去十年內一直不斷前進,但遮擋仍是一大難題。參考最近的調查,在一個街道拍攝的視頻幀中,至少有70%的行人存在遮擋情況[1]。在銀行、商店、火車站、機場等人流量較大的場所,攝像機所拍攝的現實生活中的行人圖像或者視頻往往會出現人群遮擋或者粘連情況,同時復雜背景的干擾或者其他物體的遮擋也增加了行人檢測的難度,這對于商業化的行人檢測系統提出了極高的要求與挑戰。
形變和遮擋一直都是行人檢測的兩個難點,之前絕大多數研究都是針對姿態形變的行人檢測算法,因此,本文研究了遮擋情況下行人檢測算法的優劣。
根據遮擋物的不同,行人遮擋可分為兩大類,即非目標造成的遮擋(Reasonable-Occlusion)及需要檢測的目標造成的遮擋(Reasonable-Crowd),如圖1 所示。前一種遮擋,即為目標和非目標的區別,這種情況往往會導致目標信息的缺失,進而導致漏檢。另一類是行人之間的遮擋和粘連,這樣往往會引入大量的干擾信息,進而導致更多的虛檢。根據行人的遮擋程度,將行人遮擋分為四個等級[2],分別為0 無遮擋,1%~35%部分遮擋、35%~80%嚴重遮擋,≥80%完全遮擋。研究表明,一般的行人檢測算法在遮擋等級為0~10%的情況下,檢測效果較好,隨著遮擋等級的增加,漏檢率也隨之增加。當遮擋程度超過50%時,幾乎無法檢測到行人。

圖1 行人遮擋
對于遮擋下的行人檢測,本文將現有方法分成兩類,如表1所示:(1)基于傳統方法的遮擋行人檢測,人工提取行人特征+分類器[3],比如 Harr+Adaboost[4]、Edgelet+貝葉斯、HOG(Histogram of Oriented Gradients)+SVM(Support Vector Machine)[5]等;(2)基于深度學習[6-8]的遮擋行人檢測,人工提取的特征對于行人多樣性的變化魯棒性較低,且人工提取較為耗時,深度學習算法檢測速度快,檢測精度更高。基于深度學習行人檢測算法主要有三大類別:(1)基于深度置信網絡(Deep Belief Networks,DBN);(2)基于卷積神經網絡(Convolutional Neural Networks,CNN);(3)基于循環神經網絡(Recurrent Neural Networks,RNN)。

表1 遮擋下的行人檢測方法
2000年Papageorgiou和Poggio提出Haar小波特征。Haar 特征值反映了圖像的灰度變化情況,分為四類:邊緣特征、線性特征、中心特征和對角線特征。Haar 小波特征的提出奠定了行人檢測技術的基礎。
傳統檢測方法首先根據大量的行人樣本特征構建行人檢測分類器,提取的行人特征主要有灰度、邊緣、紋理、顏色、梯度直方圖等信息。分類器主要包括SVM、Adaboost等。基本框架如圖2所示。

圖2 傳統方法基本框架
對于行人之間遮擋情況的處理方法,傳統檢測方法主要有兩種思路:一是將檢測目標進行分部處理,利用未被遮擋部分推測行人位置。二是針對日常生活中常見的遮擋物訓練特定分類器,減輕遮擋影響,正確判斷行人位置。
基于部件的方法是處理行人檢測任務中遮擋問題最常見也非常有效的一類方法。該類方法的出發點十分簡單:待檢測的行人有一部分被遮擋,沒有遮擋的部分可以用來判斷行人位置。
Leibe等人[9]提出了擁擠人群中行人檢測算法,相當于遮擋下的行人檢測問題雛形。他們在基于霍夫變換聯合概率模型的基礎上,將行人局部和全局線索結合,生成自頂向下的分割模型,提高了人群中行人檢測的精度。Mohan等人研究發現,若將人的身體分為頭肩、腿、左、右胳膊四部分,處理遮擋時更加有效。Mikolajczyk等人[10]在此基礎上進一步將人分為七部分。Wu和Nevatia[11]受此靈感啟發,使用基于部件的行人特征——Edgelet特征,將行人圖像定義成I,用點來表示身體部分和法向量,k為Edgelet 的長度,圖像I用MI(P)和NI(P)表示。圖像I和Edgelet之間的關系能表示為:

運用此特征在腿部或者其他局部被遮擋的情況下也能檢測到行人。Wang 等通過HOG 結合LBP(Local Binary Pattern)[12]作為特征集,提出了一種能夠處理局部遮擋的新算法。算法中包含兩種檢測器——掃描整個窗口的全局檢測器以及局部區域的部分檢測器,通過全局檢測器構建一個Occlusion Likelihood Map,一旦遮擋的區域被檢測出來,則觸發分部檢測器檢測未遮擋部分,可以最小化遮擋的影響。Enzweiler和Eigenstetter融合了前人的研究成果,提出了一個新的Multi-cue Component-Based Mixture-of-Experts 檢測框架[13],其核心是一組包含深度和運動信息的特定檢測器。該算法在語義分割的基礎上,確定了部分檢測器的權重,將組合決策集中在行人的可見部分,如圖3所示。此方法與Wu 和Nevatia 的方法不同在于,Wu 要求特定的照相機設置,相機的位置是從上往下,并且在他們假設場景中行人的頭部總是可見的。
除了對行人分部處理,推測遮擋位置,利用未遮擋部分檢測行人之外,最大限度地提高遮擋行人檢測質量的另一個常見做法是訓練一組特定于遮擋的分類器,每個分類器針對一定的遮擋類型。

圖3 多線索框架概述
Isard 和MacCormick 在研究行人跟蹤算法時發現,跟蹤器中加入背景外觀模型會更具有魯棒性,此舉能有效處理形變和遮擋。Wojek 等[14]借鑒這種思想,將其應用于3D場景下,提出不僅要檢測行人個體,周圍背景物體也需要被檢測。該方法使用HOG+SVM 訓練特殊遮擋背景的檢測器,然而不足之處是訓練代價太大。Mathias 等針對這一問題,提出了Franken-Classifiers[15],將每個分類器針對每種不同的遮擋物以及不同的遮擋等級加以區分,此外在分類器訓練過程中引入了空間偏置特征選擇的思想,通過不同訓練階段之間重復使用計算,16種特定于遮擋的分類器只需訓練一次完整訓練的1/10。
Felzenszwalb改進了HOG特征,提出了DPM(Deformable Parts Model),對目標的形變具有很強的魯棒性。該模型包括融合了密集特征圖的線性濾波器,濾波器是由d維權重向量數組定義的矩形模,特征映射G中濾波器F的響應(或分數)是濾波器和特征映射的子窗口左上角點(x,y)的點積:

Andriluka 和Schiele 在DPM 方法的基礎上提出了一種新的雙人探測器,不將人人之間的遮擋視為障礙,而是把人人之間重疊時的特殊外觀看作特點,允許預測兩個人的邊界框。這種方法在有明顯的部分遮擋的情況下,比單人檢測器的性能要好得多。
然而行人檢測算法中普遍存在正負樣本不均衡的問題,尤其在行人被遮擋的情況下,更需要大量的行人樣本訓練分類器。為解決這一問題,甘玲等人[16]對于普遍存在正負樣本不均衡的問題,提出一種結合欠采樣和EasyEnsemble 的方法,即聚合支持向量機(Ensemble SVM)分類器的行人檢測方法。該方法將正樣本和經過初始訓練的負樣本劃分為多個平衡子訓練集,在INRIA上的訓練結果表明,該方法相較于經典算法,在檢測速度和檢測率上都有大幅度提升,同時也解決了正負樣本不均衡問題。
基于部件處理和特殊遮擋分類器都能在一定程度上減輕遮擋對算法帶來的影響。前者思路簡單,易于實現,只需將行人分成幾個部分即可,但想最大限度地利用未遮擋部分檢測行人,不同區塊之間的權重占比極為重要,如何正確消除遮擋區域帶來的影響是一大難點;后者實現起來較為復雜,訓練不同的分類器需要較多時間,且隨著場景的變換其魯棒性也會降低,因此如何快速且自適應地訓練特定遮擋分類器是一大難點。
基于深度學習行人檢測算法主要有三大類別:(1)基于深度置信網絡(DBN);(2)基于卷積神經網絡[17](CNN);(3)基于循環神經網絡(RNN)[18]。借鑒傳統算法處理遮擋的思想,深度學習算法對于遮擋的處理一般有兩種思路:(1)引入部件模型,這種方法是將部件模型和深度學習網絡結構結合,綜合部分檢測器分部處理遮擋;(2)基于優化函數,這種方法基于神經網絡結構特點,一般通過優化損失函數處理遮擋[19]。
2006年Hinton等人提出深度置信網絡(DBN)[20],它是一種極其高效的學習算法,也是一種生成模型,通過訓練神經元間的權重,讓整個神經網絡按照最大概率來生成訓練數據,即Pre-training+Fine Tuning。這一思想也成為其后深度學習算法的主要框架。DBN的組成元件是受限玻爾茲曼機(Restricted Boltzmann Machines,RBM)。訓練DBN的過程是一層一層地進行的,在每一層中,用數據向量來推斷隱層,再把這一隱層當作下一層(高一層)的數據向量。結構如圖4所示。

圖4 深度置信網絡結構
Ouyang 和Wang[21]就是在此網絡結構基礎上,運用部件模型和深度特征結合的思路,將特征提取、形變處理、遮擋處理構造成一個聯合的深度學習框架,并提出了一種新的深度網絡體系結構。實驗結果表明,在處理遮擋問題時,行人定位不應該與特征提取和分部模型完全脫離。然而當有遮擋或大變形時,如何整合部分探測器的分數是一個亟待解決的關鍵問題。為了解決零件探測器不完善的問題,他們又提出了一種基于改進RBM的概率模型[22]。通過將部件可見性建模成隱變量,該模型能在部件的可見性得分不準確的情況下得到整體較為準確的檢測得分,如圖5所示。而后他們又在此算法上進行改進,改進后的模型能建模單人檢測器與多人檢測器的關系,從而利用多行人檢測器來幫助單人檢測。

圖5 改進后的檢測器
卷積神經網絡行人檢測器主要分為兩類:一類是兩階段檢測器(two-stage),將目標識別與目標定位分成兩部分分別處理,有R-CNN 系列,它們識別效果較好,但是速度較慢,難以達到實時效果。另一類是單階段檢測器(one-stage),包括SSD[23-24]和YOLO[25-26]系列。YOLO系列的速度很快,但是效果不穩定,在檢測小目標和密集目標時具有先天劣勢,而SSD在保持較快的檢測速度同時,又有較高的準確性。
目前主流的行人檢測算法大多基于兩階段的檢測器框架,如圖6 所示。Ouyang 等人基于R-CNN 提出了用于通用目標檢測的可變形深度卷積神經網絡[27]。該算法使用一種新的預訓練策略,可以學習更適合目標檢測任務的特征表示,提高了算法的平均精度。Tian等人[28]在部分檢測器的啟發下,提出了基于R-CNN的DeepParts,由不同的部分檢測器組成深度部分檢測器。與傳統方法Franken-Classifiers不同的是,Franken-Classifiers的部分檢測器是預定義的,DeepPart的數據根據輸入圖像而確定,魯棒性更高。Zhang 等人[29]則提出使用部件檢測器結合注意機制[30],在Faster R-CNN體系結構中添加一個額外的注意機制來處理不同的遮擋,從而通過引導探測器更多地關注可見的身體部位,可有效提高算法檢測精度。Zhou 等人[31]在部件檢測器上使用多標簽學習方法,利用部件檢測器之間的相關性改進檢測器性能,降低了部分檢測器的計算成本。

圖6 神經網絡結構
除了引入部件檢測這一方法外,基于優化的遮擋處理也十分多。Wang 等人[32]在Faster R-CNN 的基礎上,通過優化損失函數,即提出Repulsion Loss,如式(3)所示,使預測框和真實目標框的距離縮小,與周圍非負責目標框的距離加大,從而實現遮擋下的行人檢測。

Zhang等人[33]在Faster R-CNN的檢測框架基礎上,提出了OR-CNN(Occlusion-aware R-CNN),并設計了一個新的聚合損失函數,同時提出了一個新的部分遮擋感知池化層(PORoI)代替原始的RoI 池化層,改善遮擋物體的檢測問題。
盡管基于CNN 系列算法取得了較好的效果,但其依舊存在局限性:(1)大多數方法只使用卷積神經網絡最后一層特征,不能有效利用卷積網絡不同層的圖像特征。(2)系統運算量會隨著卷積層數增加,計算耗時。針對這一局限性,楊雅茹等人[34]提出將淺層特征融合深層網絡,該算法通過HOG 特征、改進的LBP 特征與深度網絡特征融合,實現淺層學習與深度學習的優勢互補。在消除行人檢測重疊區域時使用非極大值抑制(Non-Maximum Suppression,NMS)降低計算成本,加快檢測速度。而肖艷秋等人[35]則提出將支持向量機與卷積神經網絡相結合,利用聚合通道特征快速獲取圖像候選區域,同時利用主成分分析法處理神經網絡提取到的冗余信息,然后采用支持向量機優化后行人特征,以提高分類精度。該模型避免了復雜的提取特征工程,但在小尺度、遮擋行人檢測方面還需要改進。
循環神經網絡(RNN)是一類以序列數據為輸入,在序列的演進方向進行遞歸且所有節點(循環單元)按鏈式連接的遞歸神經網絡。其中雙向循環神經網絡(Bidirectional RNN,Bi-RNN)和長短期記憶網絡(Long Short-Term Memory networks,LSTM)是常見的循環神經網絡。
傳統神經網絡將原始圖像作為輸入,網絡的復雜程度導致學習時間較長,影響檢測器的性能。崔鵬等[36]提出DSAEN(Deep Sparse Auto-Encoder Network),在輸入層后加了一層感興趣層,提取出充分表示行人信息的混合特征,在處理神經網絡復雜的運算問題時,該算法將通過網絡得到的特征輸入到線性核函數的SVM分類器中進行訓練,并采用非極大值抑制法,降低計算量,能夠對行人的位置進行精確定位。
Stewart 等人提出了一種由over-feat 模型改進而來的方法,如圖7[37]。該方法將圖像解碼成一組人體檢測器,使用一個循環的LSTM 層進行序列生成,并使用一個新的損失函數,同時結合定位和檢測兩方面對模型進行端對端訓練。同時也證明了可以利用LSTM 單元鏈來將圖像內容解碼為可變長度的相干實值輸出,是一個分部處理遮擋的新思路。

圖7 LSTM結構
表2為行人數據庫的詳細介紹。
最早公開的行人檢測數據庫MIT行人數據庫(MITCBCL Pedestrian Database)是由麻省理工學院創建的,共924 張行人圖片(ppm 格式,寬高為64×128),庫中圖片包含正面和背面兩個視角。USC 行人數據庫(USC Pedestrian Detection Test Set)的圖像大多來源于監控視頻,一共包含三組數據集USC-A、USC-B 和USC-C,包含各個角度下的行人和遮擋情況下的行人。戴姆勒行人檢測標準數據庫(Daimler Pedestrian Detection Benchmark)的圖像來源于車載攝像機,均是灰度圖像,其中包含完整的行人和被遮擋的行人。Caltech行人數據庫是目前規模較大的行人數據庫,庫中的圖像來源于車載攝像機,包含一些低分辨率的圖像,其中行人遮擋圖像比較符合生活中的實際情況。INRIA 行人數據庫(INRIA Person Dataset)是目前使用最多的靜態行人檢測數據庫,該行人庫圖片清晰度較高,分為訓練集和測試集,并且區分正負樣本,有相應的標注文件。CUHK遮擋行人數據集(CUHK Occlusion Dataset)由香港中文大學發布,包含了1 063張行人圖片,其中有大量的粘連、遮擋行人圖片。此外香港中文大學還有CUHK Person Re-identification Datasets(CUHK-PRe-D)和CUHK Square Dataset(CHUK-SD)。CUHK-PRe-D數據集使用了兩個視角,記錄了971個行人在不同視角下的取樣。CHUK-SD則是一段長達60 min的交通視頻序列,拍攝于港中大的廣場。CVC 行人數據庫包含CVC-01、CVC-02 和CVC-Virtual三個子集,針對行人檢測的三個不同方面。NICTA行人數據庫是規模較大的靜態圖像行人數據庫,該庫分為測試集和訓練集,包含25 551張含單人的圖片,5 207張高分辨率非行人圖片。CityPerson數據集是CitysCapes數據集的子集,CityPerson 的標注文件只標注了其中Human的類別。TUD行人數據庫所提供的圖像主要便于計算光流信息,該數據庫主要用于評估運動信息在行人檢測中的作用,常用于行人檢測及跟蹤。

表2 行人數據庫
行人數據集眾多且評估算法工具各不相同,從而使直接比較變得困難。Dollar 統計了一般行人遮擋出現的頻率,又根據行人被遮擋的面積,將其分為了4 個遮擋級別[38]:full occlusion(≥ 80%),heavy occlusion(35%~80%),partial occlusion(1%~35%),never occlusion(0)。大多數人認為要對比檢測算法每一個窗口的性能,而Dalal&Triggs建議通過以行人為中心的裁剪窗口與沒有行人的圖像中進行固定密度取樣分類,來評估檢測器的性能。除此之外,他們提出一個統一的框架,對行人檢測技術進行了廣泛的評價。他們組建了一個大型的、注釋完備的單目行人檢測數據集,并且研究了這些數據的大小尺寸、行人位置以及遮擋信息。行人檢測中有兩個指標:MR-FPPI 曲線和 MR-2。MR-FPPI(Miss Rate-False Positive Per Image)曲線:假設N幅圖片中,誤檢窗口為k,那么FPPI(False Positive Per Image)為k/N。MR-2(Miss Rate-2)則使用log-average miss rate來總結探測器的性能,計算方法是在9 個FPPI 值下(在值域[0.01,1.0]內以對數空間均勻間隔)的平均miss rate值。從概念上講,log-average miss rate 與目標檢測的AP(Average Precision)相似,因為它們都是用一個參考值表示整個曲線。MR-2評估檢測器時,分數越低性能越好。
表3 為幾種典型傳統算法和深度學習在檢測遮擋行人時的表現[39]。從表中可以看出,傳統遮擋行人檢測算法HOG 等表現都不如DSAEN 等深度學習算法。深度學習算法在速度和精度方面都有提高。表4 展示了五種深度學習算法在CityPerson 不同遮擋程度子集上的檢測情況。在部分遮擋情況下,算法的檢測精度不會被過多影響,而發生嚴重遮擋時,檢測精度則發生斷崖式下降。圖8 則是幾種算法在Caltech 不同子集的表現[28]。從圖中來看,在無遮擋情況下,不同算法性能差別較大,傳統算法經典HOG表現遠不如深度學習算法,不過隨著遮擋部分增加,傳統算法和深度學習算法[31]的差距縮小,但深度學習算法的表現仍然更加優秀。從圖8結果對比也可發現,同一種算法在不同的數據集上,算法精度也有不同,目前OR-CNN和RPN+BF處理行人遮擋時效果較好,但相較于DSAEN等算法,其神經網絡結構更加復雜,計算量更高。

表3 不同的傳統算法和深度學習算法檢測性能

表4 深度學習算法在CityPerson不同遮擋程度子集上的檢測情況

圖8 不同算法在Caltech三個子集上的表現
此外表5 針對主流處理遮擋的檢測方法進行分析。無論是基于深度學習還是傳統算法,處理遮擋的思路可分為以下幾類:(1)分部處理;(2)訓練特定分類器;(3)在判定是人或背景時對判別函數進行優化(例如深度學習算法里的改進損失函數)。從表中可以看出,在處理遮擋問題時,無論是傳統還是深度學習算法,主要采取分部處理的思想,相較于整體檢查,基于部件的方法的確能夠有效地處理遮擋帶來的影響,提高行人識別率。然而目前算法主要靠手工對行人進行分塊,針對日常生活中的遮擋情況魯棒性還不是很高,需要進一步研究如何更好地對行人進行分塊,并綜合各部分之間關系,更好地利用未遮擋部分推斷行人位置。基于特定分類器的算法雖然可以在一定程度上處理遮擋,但耗費時間過長,且在不同情景下魯棒性略低,因此在深度學習算法中很少再利用這一思想處理遮擋。由于深度網絡的結構特點,除了基于部件算法之外,基于優化的思想處理遮擋也逐漸成為主流,這類算法目的是使預測框能更加接近真實目標框。如何改進判別函數,更好地使預測框和所負責的真實目標框的距離縮小是需要改進的方向。

表5 在Caltech測試集上主流方法對比
本文對遮擋下的行人檢測方法進行了綜述。首先分別介紹了基于傳統方法和基于深度學習的行人檢測算法。其次對于每一類方法,按照對遮擋的不同處理,又進一步地將傳統方法分為兩類,將深度學習方法分為三類。結果表明,傳統方法需要手動提取行人特征,訓練算法耗時較長且魯棒性較低。深度學習方法識別率更高,且檢測速度更快,更加適用于實際應用,具有廣闊的發展前景。
綜上所述,雖然遮擋下的行人檢測已經取得不錯的識別效果,但是在交通情況復雜或者人流量較大的場景下尚有許多問題亟待解決,主要包括:
(1)訓練數據問題。神經網絡在樣本數據量小的情況下無法得到很好的檢測效果。目前大多數算法均是在大數據集中進行訓練,將訓練好的模型進行微調操作,這就使得模型過分依賴大數據。
(2)魯棒性和檢測速度問題。深度學習算法雖然效果更好,其計算復雜程度也更高,如果要保證檢測精度,模型需要充分學習到行人的特征,增加計算量,必然導致檢測速度慢,無法滿足實時性的需求。如果要保證檢測速度,通常需要減少特征金字塔的圖像,減少計算量,然而這會使訓練不夠充分,產生誤檢或者漏檢的情況。因此,設計一種高效的同時兼顧檢測精度與檢測速度的算法,具有重要理論和實際意義。
(3)多變化融合問題。實際應用中,往往不只是遮擋問題,角度變化和形變所導致的誤檢漏檢也是一大棘手問題,目前已有的方法大多只針對一個問題。因此,研究不同因素組合的行人檢測算法,提高行人檢測系統的實用性,也是本領域中值得關注和挑戰的問題。
(4)長時間或者嚴重遮擋問題。從文中的算法對比結果可以看出,針對遮擋的行人檢測算法在輕微或者部分遮擋的情況下,性能良好,但在嚴重遮擋或者長時間遮擋的情況下,精度則會斷崖式下降。因此,針對長時間和嚴重遮擋問題還需進一步研究。