1. 程式人生 > >【機器學習】傳統目標檢測演算法之級聯分類器Cascade

【機器學習】傳統目標檢測演算法之級聯分類器Cascade

先附上參考文章吧。

文章其實是“P. Viola, M. Jones. Rapid Object Detection using a Boosted Cascade of Simple Features[J].CVPR, 2001”的學習筆記,下面第二個連結是文獻的中英文版本。

基於AdaBoost的特徵選擇

實際應用中,對分類產生較大影響的往往只有少數的特徵,比如傳統的主成分分析方法(PCA)就是用來尋找這些對分類影響較大的特徵,而論文中提取了180000多的特徵,遠遠過完備(180000>>24*24),所以選擇主要的特徵是必要的。文中使用adaboost中的弱分類器實現特徵的選擇,在設計弱分類器時,僅考慮一維特徵,選擇誤差最小的那個分類器作為該輪迭代產生的弱分類器,而對應的維度就是該輪迭代選擇出的特徵。其過程如下表:

在之前的文章中已經介紹過adaboost的演算法模型了,其有很重要的一點就是可以用來做特徵選擇。這裡的adaboost每一輪只選出一個特徵。通過迭代一定輪數,就可以構建出一個adaboost的強分類器,同時也自動做了特徵選擇。

級聯分類器

為了提高人臉檢測的速度和精度,最終的分類器還需要通過幾個強分類器級聯得到。在一個級聯分類系統中,對於每一個輸入圖片,順序通過每個強分類器,前面的強分類器相對簡單,其包含的弱分類器也相對較少,後面的強分類器逐級複雜,只有通過前面的強分類檢測後的圖片才能送入後面的強分類器檢測,比較靠前的幾級分類器可以過濾掉大部分的不合格圖片,只有通過了所有強分類器檢測的圖片區域才是有效人臉區域。

到這裡,應該能搞懂級聯分類器Cascade做了什麼事情。

AdaBoost訓練出來的強分類器一般具有較小的誤識率,但檢測率並不很高。正確率就是TPR,誤檢率就是FPR。

較小的誤實率的意思就是給我一個人臉特徵,我有很大的概率可以把它判別為人臉特徵。檢測率不是很高的意思就是給我一個不是人臉的特徵,我也有不小的概率將它劃分為人臉特徵。

一般情況下,高檢測率會導致高誤識率,這是強分類閾值的劃分導致的,要提高強分類器的檢測率就要降低閾值,要降低強分類器的誤識率就要提高閾值,這是個矛盾的事情。據參考論文的實驗結果,增加分類器個數可以在提高強分類器檢測率的同時降低誤識率,所以級聯分類器在訓練時要考慮如下平衡,一是弱分類器的個數和計算時間的平衡,二是強分類器檢測率和誤識率之間的平衡。

假設AdaBoost分類器要實現99%的正確率,1%的誤檢率需要200維特徵,而實現具有99.9%正確率和50%的誤檢率的AdaBoost分類器僅需要10維特徵,那麼通過級聯,假設10級級聯,最終得到的正確率和誤檢率分別為(這個例子既考慮了特徵個數既弱分類器個數又考慮了分類器檢測率與誤識率):

這個公式應該很好理解,因為多個強分類器之間是序列的。

可以看到通過級聯adaboost分類器們能夠使用較少的特徵和較簡單的分類器更快更好的實現分類。

另外在檢測的過程中,因為TPR較高,所以一旦檢測到某區域不是目標就可以直接停止後續檢測。由於在人臉檢測應用中非人臉區域佔大部分,這樣大部分檢測視窗都能夠很快停止,是分類速度得到很大的提高。

級聯分類器的訓練過程

這個訓練流程與普通的訓練稍微有點不一樣。

第一層強分類器的樣本的為全部樣本,有正有負,第二層強分類的樣本為第一層分類器預測正的那一部分,其中錯分的作為負樣本,正確的就是正樣本,一次類推。