基于adaboost的人脸检测方法
最近,學(xué)習(xí)了Adaboast,并閱讀了大牛Paul Viola和Michael Jones的《Robust Real-Time Face Detection》這篇文章,盡管文章思路及用到的方法的不難,但是細(xì)細(xì)一整理,還是有很多值得推敲的地方。那么我們就從這篇文章說起。
看完這篇文章,第一感覺是似懂非懂,所以就細(xì)細(xì)地梳理了一下思路。總的來說,這篇文章所涉及的方法,和普通機(jī)器學(xué)習(xí)思路是一樣的,分為訓(xùn)練和測試兩步,其中訓(xùn)練又分為兩步,1,通過Adaboast方法對圖像的特征進(jìn)行降維,選擇出最利于圖像分類的有限個特征(也同時是Adaboast的弱分類器);2,又一次使用Adaboast方法對圖像的特征進(jìn)行組合,成為級聯(lián)偵測器(Cascade);測試就是通過訓(xùn)練好的級聯(lián)偵測器對圖像進(jìn)行人臉檢測,下面,我們就細(xì)細(xì)講明以上幾個步驟:
一,訓(xùn)練之對圖像特征進(jìn)行降維。
(1)Haar-like特征
在這里,我們使用的圖像特征Haar-like特征,Viola和Jones在此基礎(chǔ)上,使用3種類型4種形式的特征。
3種類型分別為:2-矩形特征、3-矩形特征、4-矩形特征。
如上圖所示,這是4種形式的特征模板,內(nèi)有白色和黑色兩種矩形,并定義該模板的特征值為白色矩形像素和減去黑色矩形像素和。通過改變特征模板的大小和位置,可在圖像子窗口中窮舉出大量的特征。上圖的特征模板稱為“特征原型”;特征原型在圖像子窗口中擴(kuò)展(平移伸縮)得到的特征稱為“矩形特征”;矩形特征的稱為“特征值”。那么在一幅訓(xùn)練圖像中,這種特征模板有多少呢?在查找了大量資料,發(fā)現(xiàn)證明過程如下:
所以,我們得出如下表:
(2)積分圖
積分圖主要的思想是將圖像從起點(diǎn)開始到各個點(diǎn)所形成的矩形區(qū)域像素之和作為一個數(shù)組的元素保存在內(nèi)存中,當(dāng)要計(jì)算某個區(qū)域的像素和時可以直接索引數(shù)組的元素,不用重新計(jì)算這個區(qū)域的像素和,從而加快了計(jì)算。點(diǎn)(x,y)處的積分圖,定義為點(diǎn)(x,y)左上角所有像素和。例如圖:
1,2,3,4分別是積分圖的相對應(yīng)位置的圖,所以D區(qū)間的像素和由下列公式得出:
1=A; 2=A+B; 3=A+C; 4=A+B+C+D
所以,D=(4+1)-(2+3);
由給出的harr模板,特征區(qū)域均是黑-白,并且黑白區(qū)域是相鄰的,所以the two-rectanglefeatures可以由6個積分點(diǎn)計(jì)算,three-rectangle features可以由8個積分點(diǎn)計(jì)算,our-rectangle features可以由9個點(diǎn)計(jì)算。
(3)Adaboost特征降維
由上面使用的Harr特征,我們知道特征特別多,所以我們必須要對特征進(jìn)行降維,這里使用了Adaboost方法,其中每一個弱分類器使用了決策樁,決策樁就是使用了一個特征和閾值,對樣本分類,使錯誤率最小,公式如下:
其中,x為輸入圖像,f為Harr特征模板對應(yīng)的那種計(jì)算方法,P是方向因子,取+1或者-1,這影響著不等式的方向,sita是閾值;
Adaboost就是算法的訓(xùn)練過程就是挑選最優(yōu)弱分類器,并賦予權(quán)重;其算法如下:
這是普通的Adaboost訓(xùn)練算法,其中在選擇弱分類器的時候,要遍歷所有的樣本、所有特征值、所有閾值,因此作者給出了一個相對快速的遍歷選擇方法:
這樣,我們就選出了T個弱分類器,也就是我們認(rèn)為的T個最適合判斷是否為人臉的特征,接下來就是通過這T個特征(弱分類器)進(jìn)行組合組成強(qiáng)分類器。
二,級聯(lián)偵測器的組成
實(shí)際上,根據(jù)上面第一個Adaboost就可以組成一個強(qiáng)分類器,但是這樣訓(xùn)練會花費(fèi)大量的時間,因此,作者設(shè)計(jì)出了級聯(lián)偵測器,通過層層強(qiáng)分類器級聯(lián),使訓(xùn)練時間大大減少,示意圖如下圖:
如上圖所示,在每層強(qiáng)分類器訓(xùn)練時所需要的樣本是前面各層級聯(lián)分類器后所剩下的樣本(訓(xùn)練樣本減去前面幾層判斷為非人臉圖像的真實(shí)分人臉圖像—也就是TN),所以樣本為TP,TN和FP,這些樣本的存在使該層強(qiáng)分類器的訓(xùn)練比上一層會更加的嚴(yán)格,算法流程如下:
其實(shí)這也是一個Trade-off的過程,以平衡False positive rate和correct detection rate,使兩個比率均能達(dá)到良好的效果。整個級聯(lián)偵測器作用樣本過程如圖:
這樣對樣本的訓(xùn)練過程就完成了。
三,利用級聯(lián)偵測器測試(作用測試集)
在訓(xùn)練過程中,使用的訓(xùn)練樣本都很小,如該文章所使用的樣本為24*24,但是一般測試樣本會比較大,比說說300*200,這就需要級聯(lián)偵測器與測試集大小匹配,
就這樣,我們用級聯(lián)偵測器對測試集進(jìn)行滑動進(jìn)行判斷,該區(qū)域是否是人臉圖像,最終可以得出結(jié)果,例如:
總結(jié)
以上是生活随笔為你收集整理的基于adaboost的人脸检测方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聚类之K-means均值聚类
- 下一篇: MATLAB2014b下运行cuda6.