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