面部識別系列-二期-Adaboost 自適應增強含代碼例子

背景

面部識別系列-二期-Adaboost 自適應增強含代碼例子

上一期開啟了面部識別系列。對於面部畫面捕捉大概使用的是 Viola–Jones object detection framework。這個模型框架是 HAAR 特徵提取 + Adaboost 自適應增強 。

其中HAAR特徵還有兩個問題沒有解決,所以本期先帶來Adaboost自適應增強。 這個概念比我想象的簡單一些。

另外申請,本文圖片來源於 Jocelyn D'Souza。

AdaBoost自適應增強

Adaboost的思路是通過 某種方式增強一些 Weak Classfier(比較弱的分類算法,比如次數比較低)。

舉個例子比如我們需要區分下圖的 減號 和 加號。 假設我們的classfier 只能是橫線或者豎線。

面部識別系列-二期-Adaboost 自適應增強含代碼例子

假設我們的第一次分類,將大部分的 加號 和 減號 能夠區分開來。 但是對於一小部分區分是錯誤的。

面部識別系列-二期-Adaboost 自適應增強含代碼例子

第二次分類前,我們在分類前,將上一個步驟中錯誤的 加號 和 減號 的權重增加,這意味著下一個classifier會更注重將上一次分類錯誤的數據。

面部識別系列-二期-Adaboost 自適應增強含代碼例子

第二次分類,由於我們加重了第一次分類錯誤數據的權重,可能第三次的classfier 像下圖所示。

面部識別系列-二期-Adaboost 自適應增強含代碼例子

最後,我們可能在三次分類後形成了 最終的一個classifier。 從下圖所示,最終的classifier能夠將 加號 和 減號 區分開來。

面部識別系列-二期-Adaboost 自適應增強含代碼例子

總結下

Adaboost 的思路就是,將多個weak classifier 按照順序組合起來,形成一個strong classifier。 其中很重要的一步是,將前一個classifier 區分錯誤的數據 權重增加。

最終,就會形成一個“多層次”的classifier ,可能每一層的分層都不理想。但是組合起來的效果會好很多

代碼例子

下面是從scikit learn 調用adaboost classifier

其中參數n_estimators 的意思是 指定50層weak classifier

另外,下面的例子使用的是sklearn自帶的 Iris數據庫。

最終的準確率在 96%

from sklearn.ensemble import AdaBoostClassifier
from sklearn import datasets
from sklearn.metrics import accuracy_score
import matplotlib as plt
iris = datasets.load_iris()
X = iris.data
y = iris.target
clf = AdaBoostClassifier(n_estimators=50,
learning_rate=1,
random_state=0)
model = clf.fit(X, y)
prd_r = model.predict(X)
test_acc = accuracy_score(y, prd_r) * 100.
print(test_acc)

下期預告

應該是HAAR Feature吧


分享到:


相關文章: