目前因为做人脸识别的一个小项目,用到了AdaBoost的人脸识别算法,因为在网上找到的所有的AdaBoost的简介都不是很清楚,让我看看头脑发昏,所以在这里打算花费比拟长的时间做一个关于AdaBoost算法的详细总结。希望能对以后用AdaBoost的同学有所帮助。而且给出了关于AdaBoost实现的一些代码。因为会导致篇幅太长,所以这里把文章分开了,还请见谅。
第二局部的地址请见:
辛苦打字截图不容易,请标明出处。
提到AdaBoost的人脸识别,不得不提的几篇大牛的文章可以看看,但是大牛的文章一般都是只有主要的算法框架,没有详细的说明。
大牛论文推荐:
1. Robust Real-time Object Detection, Paul Viola, Michael Jones
2. Rapid Object Detection using a Boosted Cascade of Simple Features, 作者同上。
还有一篇北大的本科生的毕业论文也不错:基于 AdaBoost 算法的人脸检测,赵楠。
另外,关于我写的AdaBoost的人脸识别程序的下载地址:
1. C++版本:
说明:需要自己配置opencv, 自己配置分类器。在程序运行前会捕捉10帧用户图像,计算人脸平均面积,这个过程不会有显示,但是程序没有出问题,稍等一会就会出现摄像头信息。
2. C#版本:
说明:使用了emgucv的库,需要自己重新添加引用动态库文件。
两个版本的程序都能正确运行,没有任何问题。
1. Adaboost方法的引入
Boosting方法的提出和开展
在了解Adaboost方法之前,先了解一下Boosting方法。
回答一个是与否的问题,随机猜想可以获得50%的正确率。如果一种方法能获得比随机猜想稍微高一点的正确率,如此就可以称该得到这个方法的过程为弱学习;如果一个方法可以显著提高猜想的正确率,如此称获取该方法的过程为强学习。1994年,Kearns和Valiant证明,在Valiant的PAC〔Probably ApproximatelyCorrect〕模型中,只要数据足够多,就可以将弱学习算法通过集成的方式提高到任意精度。实际上,1990年,SChapire就首先构造出一种多项式级的算法,将弱学习算法提升为强学习算法,就是最初的Boosting算法。Boosting意思为提升、加强,现在一般指将弱学习提升为强学习的一类算法。1993年,Drucker和Schapire首次以神经网络作为弱学习器,利用Boosting算法解决实际问题。前面指出,将弱学习算法通过集成的方式提高到任意精度,是Kearns和Valiant在1994年才证明的,虽然Boosting方法在1990年已经提出,但它的真正成熟,也是在1994年之后才开始的。1995年,Freund提出了一种效率更高的Boosting算法。
AdaBoost算法的提出
1995年,Freund和Schapire提出了Adaboost算法,是对Boosting算法的一大提升。Adaboost是Boosting家族的代表算法之一,全称为Adaptive Boosting。Adaptively,即适应地,该方法根据弱学习的结果反应适应地调整假设的错误率,所以Adaboost不需要预先知道假设的错误率下限。也正因为如此,它不需要任何关于弱学习器性能的先验知识,而且和Boosting算法具有同样的效率,所以在提出之后得到了广泛的应用。
首先,Adaboost是一种基于级联分类模型的分类器。级联分类模型可以用如下图表示:
级联分类器介绍:级联分类器就是将多个强分类器连接在一起进展操作。每一个强分类器都由假如干个弱分类器加权组成,例如,有些强分类器可能包含10个弱分类器,有些如此包含20个弱分类器,一般情况下一个级联用的强分类器包含20个左右的弱分类器,然后在将10个强分类器级联起来,就构成了一个级联强分类器,这个级联强分类器中总共包括200假如分类器。因为每一个强分类器对负样本的判别准确度非常高,所以一旦发现检测到的目标位负样本,就不在继续调用下面的强分类器,减少了很多的检测时间。因为一幅图像中待检测的区域很多都是负样本,这样由级联分类器在分类器的初期就抛弃了很多负样本的复杂检测,所以级联分类器的速度是非常快的;只有正样本才会送到下一个强分类器进展再次检验,这样就保证了最后输出的正样本的伪正(false positive)的可能性非常低。
也有一些情况下不适用级联分类器,就简单的使用一个强分类器的情况,这种情况下一般强分类器都包含200个左右的弱分类器可以达到最
ADABOOST算法 来自淘豆网m.daumloan.com转载请标明出处.