王力++劉子龍++張帥旗+
摘要:提出一種基于梯度方向直方圖與AdaBoost+SVM的行人檢測算法。方向梯度直方圖用于描述和提取行人的外觀及運動特征,并使得外觀、運動特征實現相互融合。在分類器的選擇上使用SVM作為AdaBoost的弱分類器對行人檢測器進行分類訓練,最終得到分類效果好的行人檢測器,實現更好的檢測性能。
關鍵詞:行人檢測;HOG算法;AdaBoost算法;支持向量機
DOIDOI:10.11907/rjdk.171991
中圖分類號:TP312文獻標識碼:A文章編號:16727800(2017)010006804
0引言
行人檢測是指對所需檢測的圖像采用一定的方法從而確定行人存在與否,若存在,則返回樣本并給予精確定位(包括行人的位置、大小、形態等)。近年來,隨著科學技術蓬勃發展,電子商務在人們生活中的應用逐漸深入,行人檢測在人臉識別、智能交通、身份確認、內容檢索等方面具有重要價值。雖然行人檢測技術已經相當成熟,并且應用也十分廣泛,但該技術依然面臨著巨大挑戰。這些挑戰來自于多個方面:一是圖像的復雜程度,比如一張圖像里每個行人的行為動作各不相同,有的跳,有的蹲,動作各異,在特征提取時難度和工作量就會增加,動作差異所帶來的影響較大;二是圖像里行人穿戴的衣服和頭飾,穿的衣服是寬松還是緊身、有沒有戴帽子等因素都會對特征的提取產生較大影響;三是圖像背景的不同對檢測結果造成差異,不同背景可能會造成誤檢,比如,行人和雕像或者人形樹(或者外觀類似人的一些物體)一起拍攝,則很有可能造成誤檢。還有一些其它外在因素,比如攝像頭拍攝角度、光照強弱等。但隨著科學技術的不斷發展,行業專家學者對行人檢測核心算法也在逐漸完善和改進,并取得了一系列突破,使得行人檢測技術的應用領域更加寬廣。
2005年,Dalal和Triggs[1]提出了一種基于梯度方向直方圖(Histograms ofOriented Gradients, HOG)的方法,對特征提取有很好效果。HOG算法主要思想是:先將一張待檢測的圖像分成64個像素塊,每個像素塊都被簡稱為一個單元,每個單元形成9個方向(bin)上的直方圖,每4個單元構成一個block,在處理過程中使每個block間存在重疊部分,最終在滑動檢測窗口(由幾個block構成)會得到空間上的特征向量。這就是特征提取基本原理,如圖1、圖2所示。
本方案采用的方法是:在特征提取部分采用基于自適
應的滑動窗口HOG。梯度直方圖特征提取基本思想是:即使沒有確切的相關梯度或者邊緣位置信息,物體局部外觀和形狀也往往深受局部強度梯度或者邊緣方向的影響。在實際應用中,其通過將圖片窗口劃分成小的空間區域(細胞元)實現,對于每一個胞元,都要對其中像素的一維梯度方向直方圖或是邊緣方向進行累積統計,合并后的直方圖就構成了被檢測物的特征。為了使其對光照、陰影等條件更加不敏感,在使用它們之前進行對比度歸一化尤為必要。此歸一化是指通過對更大的空間區域(塊)中某一特征的局部直方圖的“能量”進行累積統計,進而對塊上的每一個胞元進行歸一化實現,將歸一化之后的描述子塊作為方向梯度直方圖(HOG)描述子。在分類器選擇上,本文對AdaBoost級聯分類器算法[2]加以改進創新,將SVM[3]作為AdaBoost的弱分類器,將SVM和AdaBoost各自優點進行融合,然后選擇適宜的核函數參數(該核函數和參數下文會給出),從而提高特征分類的精準度,直接去除一部分非人形區域,進而減少了實驗訓練時間。實驗結果表明,這種行人檢測方法性能好,且準確性、誤檢率和漏檢率等均優于傳統行人檢測方法。
1方向梯度直方圖
HOG算法是基于表面局部信息統計的特征描述子,在特征提取部分采用滑動窗口機制,如圖1所示。HOG算法的核心思想是將一幅圖中局部目標的形狀及表象通過梯度或邊緣的方向密度分布描述出來。首先將一幅圖片均勻劃分為多個互不重疊的單元cell(細胞),每一個cell的大小為n×n,然后分別計算出每一個像素的梯度,并且使用直方圖統計每個cell的梯度,最后將多個cell進行合并,組成一個block(塊),將每個細胞的直方圖組合起來就可以構成特征描述器。該算法原理如圖3所示。
HOG算法包含5個步驟[4]:
(1)圖像標準化。前人經過大量的實驗得出結論,圖像顏色所提供的信息作用不大,可先轉化為灰度圖,一方面便于處理,減少工作量,再者可以減少光照因素的影響,提高檢測器對光照的魯棒性。將圖像進行壓縮處理轉化為灰度圖可以使原本某些局域光線亮度和陰影部分的反差不那么明顯,因此處理圖片信息的第一步是將圖像轉化為灰度圖,如圖4所示。
(2)計算梯度。圖像中像素點(x,y)的梯度為:
Gx(x,y)=H(x+1,y)-H(x-1,y)
Gy(x,y)=H(x,y+1)-H(x,y-1)
梯度幅值和方向分別為:
G(x,y)=Gx(x,y)2+Gy(x,y)2
α(x,y)=tan-1Gy(x,y)2Gx(x,y)2
上式中,Gx(x,y)、Gy(x,y)、H(x,y)表示輸入圖像中像素點(x,y)處的水平方向梯度、垂直方向梯度和像素值。
(3)單元格梯度投影。計算每個像素對基于以自身為中心的方向梯度元素邊緣方向直方圖的加權投影,并且將這些投影累積到cell的局部空間區域中的方向區間,細胞元可以是長方形或者環形,方向區間在0~180°(無符號梯度)或是0~360°(有符號梯度)之間均勻分布。本文將cell的梯度方向360°分成9個方向塊進行,從而為每個細胞單元構建梯度方向直方圖。
(4)塊內歸一化梯度直方圖。由于圖像局部陰影使得各部分光照強弱不同,還存在前景背景對比差異,梯度幅值將會分布在一個很寬的范圍之內,因此有效的局部對比度歸一化對性能檢測效果尤為重要。本文將歸一化之后的塊描述符稱之為HOG描述符。endprint
(5)收集HOG特征。在得到歸一化的梯度直方圖之后,還需要對滑動檢測窗口中所有重疊的block收集其HOG特征,形成特征向量,然后才能送入AdaBoost+SVM組成的分類器中進行分類訓練,得到最終結果。
例如,對于一個40*40的訓練圖片,單元格=8*8像素,塊=2*2單元格,塊每次滑動一個單元格,則特征維數=4*4*(2*2*9)=576維。
2算法實現
2.1Adaboost算法
Boosting是一種用于提高學習算法準確度,將弱學習方法提升為強學習方法的算法。Boosting算法的核心思想是把若干個分類器整合為一個分類器,它是AdaBoost算法的前身,繼承了Boosting算法的思想[5]。
AdaBoost算法描述如下:
首先輸入樣本集(x1,y1),…,(xN,yN),其中yi∈{1,-1},迭代次數為T;然后進行初始化,樣本集上樣本的初始分布D1(i)=1N,也即樣本的權重為1N;For t=1 to T。
(1)訓練弱分類器h1:X→{-1,1},該弱分類器分布在Di上的誤差為:
ε1=PD1htxi≠yi
(2)計算該弱分類器的權重:
α1=12In1-εtεt
(3)更新訓練樣本的分布:
Dt+1(i)=Dt(i)exp(-αtyiht(xi))Zt
其中,Zt為歸一化常數。zt=∑Ni=1Dt(i)exp(-αtyihi(xi))
最后輸出強分類器:
Hfinal(x)=sign∑Tt=1αtht(x)
2.2支持向量機(SVM)
支持向量機算法于1995年由Vapnik提出,該算法在解決小樣本、非線性及高維的模式識別上有許多獨特優勢。SVM是建立在統計學習理論的VC維理論(所謂VC維是對函數類的一種度量,可以簡單理解為問題的復雜程度,VC維越高,一個問題就越復雜。)和結構風險最小原理基礎上,根據有限的樣本信息在模型的復雜性和學習能力之間尋找一個最佳折衷,從而得到最優的泛化能力[5]。
支持向量機其實也是基于最優分類面的思想訓練出的一種分類算法,簡言之,它是一個兩類分類模型,依賴預處理后的數據,最終可轉化為一個凸二次規劃問題的求解,在n維空間中找到一個分類超平面,將空間上的點進行分類。圖5是線性分類的一個例子。
圖5線性可分情況下的最優分類線
2.3AdaBoost+SVM算法
上文分別介紹了AdaBoost和SVM算法。本文研究的重點在分類器的選擇上,對AdaBoost級聯分類器的算法加以改進,使用SVM作為AdaBoost的弱分類器,通過選擇并確定合適的核函數參數,從而提高分類精度,減少訓練時間,達到比較快速的檢測目的。本文SVM的核函數選取的是徑向基函數,其函數表達式為[7]:
k(x,xi)=exp-‖x-xi‖22σ2
算法步驟可簡化為:
(1)SVM核函數的參數σ={σ1,σ2…},C={C1,C2…}。訓練樣本S={(x1,y1),…,(xn,yn)},循環次數為T。
(2)樣本的權重設定為:
ω1i=1/N,i=1,…,N
(3)訓練一個基于徑向基核函數的SVM弱分類器。
(4)對錯誤率進行計算。錯誤率εt為:
εt=∑Ni-1ωti,yi≠ht(xi)
如果錯誤率大于50%,則返回上一步重新訓練,否則進行下一步。
(5)重置分類器的權重:
αt=12ln1-εtεt
(6)對訓練樣本集的權重進行重置:
ωt+1i=ωtiexp-αtyihtxi Ct
說明:i=1,K、N、Ct均為歸一化參數。
(7)T次循環或者達到預期精確度后,輸出經過訓練后的分類器:
fx=sign∑Tt-1αthtx
3實驗結果與分析
3.1實驗數據庫
實驗數據庫樣本之一來自于自拍的行人圖片數據庫,該數據庫包含了多種場所,背景各異。為了體現該算法的優越性,本文采用的實驗數據庫也包括比較專業的INRIA行人庫[8](http://pascal. inri一alpes. fr/data/human)。訓練集有正樣本614張,其中包含2 416個行人,負樣本1 218張;測試集有正樣本288張,其中包含1 126個行人,負樣本453張。圖片中人體大部分為站立姿勢且高度大于100個像素。圖片主要來源于個人照片、谷歌等。照片清晰度較高,可用OpenCV正常讀取和顯示。具體實驗樣本組成如表1所示。
3.2實驗過程
本文算法驗算是在OpenCV和Visual C++開發環境中實現。為了充分說明該算法在行人檢測上確實有較大優勢,將得到的實驗結果與文獻[1]和文獻[2]中的傳統算法分別基于HOG+AdaBoost、基于HOG+SVM進行比較。為了更好對比實驗結果,提出兩種衡量標準下的漏檢率和誤檢率。漏檢率(MR)是指未檢測出來的行人樣本數與行人樣本總數的比值,誤檢率(FPR)是指不是行人樣本卻被檢測為行人的數量與非行人樣本總數的比值。圖6為在被檢測樣本數據庫中隨機選取的一張檢測成功圖片。
3.3實驗結果
在樣本庫中隨機選取1 000個樣本作為測試樣本集,總共進行6次試驗,每次測試所得到的漏檢率和誤檢率分別如圖7、圖8所示。
取6次試驗的平均值作為結果,算法的漏檢率、誤檢率、運行時間與傳統方法對比如表2所示。endprint
4結語
行人檢測是機器視覺和人工智能領域的研究熱點,隨著該領域技術的日漸成熟,其重要性及應用價值正為人們所了解,它在智能交通、樓宇智能監控系統、高級人機接口、機動車輔助系統等領域都具有重要應用。本文將兩種傳統的分類器重新組合在一起,設計出一種新的算法分類器,該算法分別繼承了AdaBsoot和SVM算法的優點,在檢測的正確率上得到了很大提升,在訓練時間上也有明顯縮短。實驗結果表明,該算法具有檢測精度高、實時性好等優點,應用前景極其廣泛。但是行人檢測領域還有很多困難仍需克服,比如,如何正確快速地檢測被遮擋的行人等。相信隨著科學技術的進步及算法的改進,目前存在的問題會得到解決,行人檢測技術也會在更多領域得到應用和推廣。
參考文獻參考文獻:
[1]DALAL NTRIGGS B.Histograms of oriented gradients for human detection[C].Proceedings of IEEE Computer Society Conference on Computer Vision and Pattern Recognition,2005:886893.
[2]DAMIEN SIMONNET,SERGIO A VELASTIN. Pedestrian detection based on Adaboost algorithm with a pseudo calibrated camera[C].2010 International Conference on Image Processing Theory,Tolls and Application,2010:5459.
[3]B WU,R NEVATIA.Cluster boosted tree classifier for multiview.multipose object detection[C].IEEE 11th International Conference on computer Vision,2007:18.
[4]張旭東.行人檢測技術研究[D].成都:電子科技大學,2011.
[5]錢惟賢,楊力,胡楷,等.一種基于AdaBoost的弱分類器內部結構調整方法[Z].CN,CN 103246897 A,2013.
[6]VAPNIK V.統計學習理論的本質[M].張學工,譯.北京:清華大學出版社,2000.
[7]張莉.基于SVMAdaboost算法的行人檢測方法[J].工業儀表與自動化裝置,2016(4):117120.
[8]張春風,宋加濤,王萬良.行人檢測技術綜述[J].電視技術,2014,38(3):157162.
責任編輯(責任編輯:孫娟)endprint