1. 程式人生 > >ADABOOST做人臉檢測程式與原理

ADABOOST做人臉檢測程式與原理

ADABOOST做人臉識別原理+程式詳解

**注意:**adaboost演算法的目的是做一個目標檢測,舉個例子在人臉識別中,adaboost只能檢測出一張圖片中的人臉,並不能區分這些人臉分別是誰。

*1. 演算法的整體流程*
人臉檢測(face detection)是指對於任意一幅給定的影象,採用一定的策略對其進行搜尋以確定其中是否有人臉,如果有人臉則返回人臉的位置、大小和姿態。

這是matlab中訓練一個級聯分類的過程,整個流程和adaboost的流程很像。
演算法的整體流程如下圖所示:

*2. 演算法詳解*
基於adaboost的人臉檢測演算法來說,訓練分類器的部分,主要分成以下四步:
1. step1 樣本初始化


給定一系列的訓練樣本(x1,y1), (x2,y2), ···,(xn,yn) 其中, yi=1表示樣本為人臉,yi=0表示樣本為非人臉。設人臉正樣本的數量為n1,非人臉負樣本的數量為n2

2. step2 權重初始化
**目的:**adaboost採用多個弱分類組成的強分類器,這裡的權重初始化,是對所有的樣本進行的初始化,當第i個弱分類器對第j個樣本分類錯誤時,則增大第j個樣本在後續分類器中的權重。通俗的講,就像我們在學習的時候要準備一個錯題本,注意前面的錯題一樣。
對所有樣本的權重初始化為:

3. step3 最佳弱分類器選擇
設共需從原有的N個弱分類器中選擇T個弱分類器,用t來進行當前弱分類器的計數,則t=1,2,···,T;用以下步驟訓練第t輪的最佳弱分類器:
>
- 權重歸一化:

  • 弱分類器訓練:
    對於每個特徵E(就是應用各種不同尺度的Harr特徵),訓練一個對應的弱分類器h(x,E,p,theta),該分類器對所有樣本進行分類時對應於各樣本的加權錯誤率為:

  • 最佳弱分類器選取:
    上一步計算的是一個特徵對所有樣本的分類錯誤率,這裡就計算所有的特徵(選用20x20的人臉影象是,共有78460個特徵)
    虛擬碼:
    for t = 1:T
    for j = 1:num_of_feature
    計算每個feature對n個樣本的加權錯誤率,選取加權錯誤率最小的feature作為t個弱分類器;
    最小錯誤率為:


  • 權重更新:
    目的:為了提高前面錯誤分類樣本的權重
    計算更新因子:


    權重更新:

    其中:
    當樣本xi被正確分類時, = 0;
    當樣本xi被錯誤分類時, = 1。

4. step4 合成強分類器
經過T輪訓練之後,獲得了T個最佳弱分類器,其中,每個弱分類器有對應的特徵、閾值和方向指示符,最後,通過對T個弱分類器進行線性加權合成強分類器:

其中:

而其中的theta為通過率閾值,一般取為0.5*at。

參考: