面部识别系列-二期-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吧


分享到:


相關文章: