人脸检测----Adaboost学习方法
有了haar特征,有了提升性能的积分图,是不是已经可以很好的解决人脸检测问题了?答案是:no. 因为,计算每一个特征值的时候速度都大幅提升了,但是,一个小小的24*24是人脸图像根据不同的位置,
以及不同的缩放,可以产生超过160,000个特征!这个数量太庞大了,所以肯定要舍弃大量的特征。那么,如何保证使用少量的特征,而又能得到精确的结果呢?
大神永远有解决方法,viola等人使用adaboost来进行分类。声明一下,adaboost并不是viola等人提出的,而是Freund和Schapire提出。但是viola的伟大正是因为他将这个模型首次用到了人脸识别中,这使得
人脸识别在嵌入式系统应用成为一个可能的事情。
什么是adaboost呢?
AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,是一种机器学习方法,由Yoav Freund和Robert Schapire提出。[1]AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。
AdaBoost方法对于噪声数据和异常数据很敏感。但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。AdaBoost方法中使用的分类器可能很弱(比如出现很大错误率),但只
要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。而错误率高于随机分类器的弱分类器也是有用的,因为在最终得到的多个分类器的线性组合中,可以给它们赋予负
系数,同样也能提升分类效果。
AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确
地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分(更富信息)的样本上。
在具体实现上,最初令每个样本的权重都相等,对于第k次迭代操作,我们就根据这些权重来选取样本点,进而训练分类器Ck。然后就根据这个分类器,来提高被它分错的的样本的权重,并降低被正确分类的样本权重。
然后,权重更新过的样本集被用于训练下一个分类器Ck[2]。整个训练过程如此迭代地进行下去。
人脸检测使用adaboost的流程是什么呢?
首先是要把级联的概念搞清楚。所有伟大的东西,其思想都是很简单的。
级联结构:
将多个强分类器连接在一起进行操作。每一个强分类器都由若干个弱分类器加权组成。例如,一个级联用的强分类器包含20个左右的弱分类器,然后在将10个强分类器级联起来,就构成了一个级联强分类器,
这个级联强分类器中总共包括200个(20*10)分类器。因为每一个强分类器对负样本的判别准确度非常高,所以一旦发现检测到的目标位负样本,就不在继续调用下面的强分类器,减少了很多的检测时间。因为一幅
图像中待检测的区域很多都是负样本,这样由级联分类器在分类器的初期就抛弃了很多负样本的复杂检测,所以级联分类器的速度是非常快的;只有正样本才会送到下一个强分类器进行再次检验,这样就保证了最后
输出的正样本的伪正(false positive)的可能性非常低。
最优弱分类器:
寻找合适的阈值,使该分类器对所有样本的判断误差最小。对于每个特征f,计算所有训练样本的特征值并排序:
遍历排序后的特征值,对于序列中的每个元素,计算以下值:
1.全部人脸样本的权重和t1
2.全部非人脸样本的权重和t0
3.在此元素之前的人脸样本的权重和s1
4.在此元素之前的非人脸样本的权重和s0
5.此元素的分类误差:r=min{[s1+(t0-s0)],[s0+(t1-s1)]}
找出r值最小的元素作为最优阈值,最优分类器就产生了。
强分类器:
For T轮迭代:
1.重新统一权重
2.训练出本轮的最优弱分类器(详见上一P)
3.根据本轮迭代中的分类结果重新分配样本权重(增加错误分配样本的权重)
这样,T轮之后将产生T个最优弱分类器
组合T个最优弱分类器得到强分类器:
相当于让所有弱分类器投票,再对投票结果按照弱分类器的错误率加权求和,将投票加权求和的结果与平均投票结果比较得出最终的结果。
级联分类器的训练过程:

参考文档:
1 https://wizardforcel.gitbooks.io/dm-algo-top10/content/adaboost.html
2 https://zh.wikipedia.org/wiki/AdaBoost
3 https://blog.csdn.net/cyh_24/article/details/39755661
人脸检测----Adaboost学习方法的更多相关文章
- 基于Haar特征Adaboost人脸检测级联分类
		基于Haar特征Adaboost人脸检测级联分类 基于Haar特征Adaboost人脸检测级联分类,称haar分类器. 通过这个算法的名字,我们能够看到这个算法事实上包括了几个关键点:Haar特征.A ... 
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
		浅析人脸检测之Haar分类器方法 一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸 ... 
- 基于Haar特征的Adaboost级联人脸检测分类器
		基于Haar特征的Adaboost级联人脸检测分类器基于Haar特征的Adaboost级联人脸检测分类器,简称haar分类器.通过这个算法的名字,我们可以看到这个算法其实包含了几个关键点:Haar特征 ... 
- 照片美妆---基于Haar特征的Adaboost级联人脸检测分类器
		原文:照片美妆---基于Haar特征的Adaboost级联人脸检测分类器 本文转载自张雨石http://blog.csdn.net/stdcoutzyx/article/details/3484223 ... 
- 基于MATLAB的adaboost级联形式的人脸检测实现
		很早之前就做过一些关于人脸检测和目标检测的课题,一直都没有好好总结出来,趁着这个机会,写个总结,希望所写的内容能给研究同类问题的博友一些见解和启发!!博客里面涉及的公式太繁琐了,直接截图了. 转载请注 ... 
- 基于AdaBoost的人脸检测
		原地址:http://blog.csdn.net/celerychen2009/article/details/8839097 人脸检测和人脸识别都是属于典型的机器学习的方法,但是他们使用的方法却相差 ... 
- Adaboost的几个人脸检测网站
		[1]基础学习笔记之opencv(1):opencv中facedetect例子浅析 http://www.cnblogs.com/tornadomeet/archive/2012/03/22/2411 ... 
- 基于AdaBoost算法——世纪晟结合Haar-like特征训练人脸检测识别
		AdaBoost 算法是一种快速人脸检测算法,它将根据弱学习的反馈,适应性地调整假设的错误率,使在效率不降低的情况下,检测正确率得到了很大的提高. 系统在技术上的三个贡献: 1.用简单的Haa ... 
- 人脸检测之Haar-like,Adaboost,级联(cascade)
		最新版本整理完毕,见: http://face2ai.com/MachineLearning-Haar-like-Adaboost-cascade 0:写在前面的话 写在前面的牢骚 ... 
随机推荐
- .do的消除
			其实就是在web.xml中去掉.do即可 那里有拦截器作用,什么样的文件可以进入前端控制器1 
- Windows 10 系统,配置jdk系统环境变量
			1. 下载jdk包,下载路径为:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html, ... 
- JAVA数据库连接池C3p0 以及阿里Druid提供的连接池
			一:连接池的定义 本质上就是个容器(集合) 存放数据库连接的容器,当系统初始化后,容器被创建,容器中就会申请一些连接对象,当用户来访问数据库的时候,从容器中取连接对象,用户用完之后,归还. 二:常用的 ... 
- TPL DataFlow初探(二)
			上一篇简单的介绍了TDF提供的一些Block,通过对这些Block配置和组合,可以满足很多的数据处理的场景.这一篇将继续介绍与这些Block配置的相关类,和挖掘一些高级功能. 在一些Block的构造函 ... 
- 大数据学习笔记2 - 分布式文件系统HDFS(待续)
			分布式文件系统结构 分布式文件系统是一种通过网络实现文件在多台主机上进行分布式存储的文件系统,采用C/S模式实现文件系统数据访问,目前广泛应用的分布式文件系统主要包括GFS和HDFS,后者是前者的开源 ... 
- kubernetes 基础
			官网 kubernetes.io 有中文 中文网站 http://docs.kubernetes.org.cn kubectl 详细情况 https://kubernetes.io/docs/ref ... 
- Python练习-迭代-2018.11.28
			#遍历list L=['a','b','c','d'] l=[] a=0 for n in L: l.insert(a,n) a=a+1 print(l) #遍历dict里的key,导出为list L ... 
- crontab命令详解 含启动/重启/停止
			linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ... 
- mencached
			是一个免费开源的,分布式内存对象缓存系统数据库. 是一个非关系型数据库形式,属于NOSQL NOT OLNY SQL ,不仅仅是关系数据库 它属于K V 存储 KEY VALUE 相对应的存储 KEY ... 
- 通过Solr所提供的Dataimporthandler实现数据源的导入
			如需要使用到Solr中的dataimporthandler增量导入功能,则还需要引入两个所依赖的jar包,在上一篇随笔中所提到的下载的Solr项目文件solr-4.10.3\dist目录下可以找到所依 ... 
