机器学习大报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
现代机器学习理论报告基于AdaBoost算法的人脸检测技术仿真
学院:
学号:
姓名:
任课老师:
基于AdaBoost算法的人脸检测技术仿真
一.引言
人脸检测是指在输人图像中确定所有人脸的位置、大小、位姿的过程。
先进的自动人脸识别系统必须能够对一般环境图像具有一定的适应能力,所以首先要求人脸检测应具有较高的鲁棒性和准确性,这使得人脸检测开始作为一个独立的课题受到研究者的重视。
今天,人脸检测在基于内容的检索、数字视频处理、视觉监测等方面有着重要的应用价值。
图像中的人脸检测可以看作一个分类问题,即分类人脸和非人脸,分类姿态和表情不同的人脸。
应用于人脸检测的算法很多,如人工神经网络、支撑向量机、AdaBoost和稀疏表示等等[1]。
AdaBoost算法基于弱分类器提升为强分类器的思想,在检测速度和准确率上有出色的表现。
本文的主要工作是基于Visual C++和OpenCV开源计算机视觉库,仿真基于AdaBoost算法和Haar-like特征的人脸检测技术。
文章首先对AdaBoost算法原理作介绍,其次说明人脸检测中的类Haar 特征和筛选式级联分类器的原理,然后是训练和检测的算法实现流程,最后附上实验结果和实验分析。
二.AdaBoost算法
1989年,Kearns[2]提出PAC学习模型中弱学习算法与强学习算法的等价问题,即能否通过统计提升从很多弱分类器算法中学习到一个强分类器。
1996年,由Freund和Schapire[3]提出第一种Boosting算法,即AdaBoost算法。
AdaBoost算法的基本原理是训练一系列弱分类器(分类效果仅略好于随机的分类),然后将其整合为一个强分类器。
AdaBoost采取迭代的策略,在每一项弱分类器训练之后,提升其“分错类”样本的权重,在下一分类器的训练中,将“聚焦”于分类较为困难的样本。
在所有弱分类器的训练完结后,按每一弱分类器的错误率决定其在结果判别中所占的权重。
AdaBoost算法的原理图如下所示。
图一 AdaBoost 算法原理图
其中,算法的输入为{ (x ,y ) |1,...}i i i M =,x i 为特征向量,y i 为向量的类别标签,且满足y {1,1}i ∈-,M 为样本总数。
由boosting 算法训练T 个分类器h (x)t ,t {1,...,T}∈。
这些分类器很简单,通常只包括仅有几次分裂的决策树。
()t D i ,(){1,...,T}t D i ∈决定特征向量所占的权重。
在最后做决定时,将赋值权重t α给每一个分类器。
算法具体如下:
1.输入{ (x ,y ) |1,...}i i i M =,初始化()1/,1,...t D i M i M ==;
2.对1,...t T =:
a.寻找使()t D i 总错误t ε最小的分类器h (x)t ;
b.求arg min j H t h j
h ∈∈=,其中1(),(())M
t t i j i i D i y h x ε==≠∑,如果满足0.5i ε<,则继续;
否则退出;
c.设置t h 的权重log[(1)/]t t t αεε=-。
其中t ε为b 中的最小错误率;
d.按照1D ()[D ()exp(())]/Z t t t i t i t i i y h x α+=-更新数据点权重,其中Z t 为所有数据点权重归一化的和。
3.弱分类训练结束,按1()sign ()T t t t H x h x α=⎛⎫
= ⎪⎝⎭
∑接收输入向量,由加权和决定输出类
型。
三. 类Haar 特征
Haar-like 特征最早由Papageorgiou [4]等人应用于人脸表示,Viola 和Jones
在此基础上,使用3种类型4种形式的Haar-like 特征,实现一种Viola-Jones 检测器[5]。
Lienchart R.等人对Haar-like 矩形特征库进一步扩展[6],增加旋转
45度的矩形特征。
类Haar特征分为三类:边缘特征、线性特征、中心特征和对角特征,组合成一组特征蒙板。
在特征模版中,定义有白色和黑色的两种矩形,该模版的特征值定义为白色矩形区域像素和与黑色矩形区域像素和的差。
图二中展示了V-J检测器中所用的Haar特征。
图二类Haar特征模版
通过改变特征模版的大小和位置可以在图像子窗口中穷举出大量的特征。
利用图中的特征模版作为“特征原型”,在图像子窗口中扩展和伸缩得到新的矩形特征及其特征值。
矩形特征的值具体取决于模版的类型,矩形位置和矩形大小三个参数。
图三中展示了在人脸检测中,将特征模版放在合适的位置可以将人脸与非人脸区分开。
中间一幅图表示眼睛区域的颜色比脸颊区域的颜色深,右边一幅图表示鼻梁两侧比鼻梁的颜色要深。
说明使用矩形特征可以表示人脸的某些特征。
图三区分人脸和非人脸的类Haar特征模版
四.Viola-Jones分类算法
实验中采用一种Viola-Jones识别器做人脸的检测,这种识别器将AdaBoost
算法组织为筛选式的级联分类器,每个节点都是由很多树构成的分类器,在每一节点上对人脸的通过率很高,但正确拒绝率也很低。
通过将每一节点级联起来,在任一节点上判定为非人脸的区域不会进入下一节点,只有通过所有节点的区域才被认定为人脸,如图四所示。
故筛选式的级联分类器可以在减少计算量的同时提高正确拒绝率,在最后的检测中获得较高的正确识别率和正确拒绝率。
图四 Viola-Jones分类器的筛选式级联结构
五.人脸检测算法的实现
本实验的仿真程序在Visual Stdio 2010中实现,编程语言为C++,基于OpenCV开源计算机视觉库[7]开发,并借助MFC(MicroSoft Foundation Classes)实现可视化界面。
OpenCV视觉库提供了通用的图像处理算法,也包括常用的机器学习算法。
仿真实验中采用了OpenCV库提供的Haar分类器。
实验中设计的人脸检测程序界面如下图所示。
图五软件操作界面
基于统计学习的人脸识别可以分为训练和检测两个阶段。
在训练阶段,通过事先准备好的样本集训练一组分类器;检测阶段,输入待检测图像,以不同位置和大小的窗口扫描待检测图像,由之前训练的分类器判决窗口中是否含有人脸。
人脸检测算法的具体流程可以表述如图六所示。
图六人脸检测算法流程
训练阶段使用OpenCV提供的Haartraining程序训练数据集,人脸检测的正样本为包含人脸的灰度图像,需事先归一化到相同的尺度,负样本为从不包含人脸的图像中截取与人脸图像尺度相同的灰度图。
程序首先将训练正样本图像转化为特征向量的表述,在这里即为类Haar特征。
在训练阶段,随机选取出一定数量的负样本与正样本一同作为带有标签的训练数据,经由筛选级联式的V-J分类器训练,得到训练的分类器。
程序中训练的分类器保存为.XML格式的文件。
检测阶段,将待检测图像作为输入。
原始图像中过强或过暗的前景或背景会影响检测的效果,因此需要对图像进行预处理,即需对原始图像进行直方图均衡化。
图像中的人脸区域大小和位置通常不确定,为了正确地检测出包含人脸的区域,考虑将原始图像缩放到不同的尺度,即待检测的局部图像区域将具有和分类器一致的尺度。
随后使用统一尺度的矩形滑窗检测人脸区域,对滑窗内的图像区域进行特征提取,并由事先训练好的分类器对图像进行检测,判别该区域为人脸或非人脸。
随后逐次返回包含人脸位置的坐标,并在最终图像中标注出。
实验中人脸检测程序实现的功能包含检测图像的读入和清空,分类器的读入和人脸检测。
操作的步骤如下:
1.读入训练的分类器;
2.读入多幅待检测图像;
3.对读入图像检测人脸区域。
程序左侧窗口显示分类器文件和待检测图像的状态。
当执行检测操作后,弹出多个新的窗口,每一窗口显示检测图像的结果,包含人脸的区域将用彩色方框标注出。
六.仿真结果与分析
实验中的数据集来自开源Olivetti Reseach Lab’s人脸数据库[8]。
实验包含正样本5000张36X36像素分辨率的人脸灰度图像,负样本从275张中不含人脸的图像中随机裁切出来。
部分样本展示如图七和图八所示。
实验中的软硬件环境为:硬件Intel Core I3 M390,运行内存4G,操作系统为Windows7 Ultimate。
OpenCV中提供训练Haar分类器的程序。
在训练阶段,设定正样本数量为5000,负样本数量为15000,级联分类器层数为15层,弱分类器分裂层数为默认的1层,最小检测率为99.5%,最大错误报警率为50%。
在训练之前,将5000张正样本归一化到18X18像素分辨率,建立向量输出文件。
训练阶段,在每一层
分类器训练前,从预先准备好的15000张负样本中随机生成指定数量的负样本,与之前建立的向量输出文件一同,作为分类器的输入,当该层分类器最大错误报警率低于50%时,将从该层跳出,进入下一层分类器的训练。
在所有训练结束之后,将生成的分类器保存为.XML文件。
图七实验中训练样本的部分人脸正样本
图八实验训练样本的部分非人脸负样本
检测阶段,载入之前保存为.XML格式的分类器文件,对待检测的图像做预处理,并采用滑窗可缩放的检测窗口从待检测图像中搜索包含人脸的图像,返回所有包含人脸的区域。
为了确保检测结果的可靠性,选择的检测图像与原训练样本集可靠,选择图像为包含单个或多个人脸图像,也可为不包含人脸的图像。
并对实验中出现的漏报和误报进行统计。
部分的检测图像在图九中展示。
图九人脸检测结果
实验中随机选取与训练集独立的30张图像作为测试集检测分类器的训练效果。
OpenCV中提供了针对人脸正面检测的Haar分类器样例。
实验中训练所得的分类器与OpenCV中提供的分类器效果进行对比,详细的检测结果显示在表一中。
图九中给出训练分类器在第2(左上)、11(左下)、17(右上)、26(右下)张图像中的检测结果。
在测试图片2和11中,人脸都被准确地标识出来。
图片17为彩色图像,检测时首先会转化为灰度图,检测中存在完整的侧脸未被监测到,因为所选的分类器训练对象为正脸,但发现有轻微侧向的人脸被检测到。
在图片
26中,右侧的人脸未被检测到,同时,在图片偏左上的地方存在一处虚警。
由公式如下计算:MA=FN/(TP+FN)
FA=FP/(TP+FP)
其中,MA为漏警率,FA为虚警率,TP为正确判断为正样本的总数,FN为漏检的正样本数,FP为误报的正样本数。
可得出,训练所得的分类器漏警率为16.77%,虚警率为6.29%,作为参照的分类器在此处漏警率为5.59%,虚警率为3.80%。
结合图像结果判断,所训练的分类器对人脸和非人脸具有判别能力,但仍存在较高的漏检率和虚警率,效果不如作为参照的分类器理想。
七.结论
人脸检测与识别是当今计算机视觉领域的热门研究课题。
AdaBoost算法在人脸检测已经得到了广泛应用,并且更加通用的,已经用于训练如汽车[9]、自行车、人体等刚性物体。
本文对基于AdaBoost的人脸检测技术作了仿真。
在试验中选取训练样本数量有限的条件下,基本达到了人脸检测的目的,后期通过改善样本质量、提高样本数量等措施,可以进一步降低漏警率和虚警率,改善检测效果。
参考文献
[1]黄福珍,苏剑波.人脸检测.上海:上海交通大学出版社,2006.
[2]Michael Kearns,Thoughts on Hypothesis Boosting, Unpublished manuscript
Machine Learning class project, December 1988.
[3]Y.Freund,R.R.Schapire, Experiment with a New Boosting Algorithm, Machine
Learning :Proceeding of the Thirteenth International Conference ,Morgan Kauman, San Francisco,1996,148-156.
[4]PapageorgiouCP,OrenM,PoggioT.Ageneralframeworkforobjectdetection,C,Comp
uterVision,1998.SixthInternationalConferenceon.IEEE,1998:555-562. [5]P.Viola and M.J.Jones,Rapid Objection Detection Using a Boosted Cascade of
Simple Features,IEEE CVPR ,2001.
[6]R.Lienhart and J.Maydt,An Extended Set of Haar-like Features for Rapid Object
Detection,IEEE ICIP,900-903.
[7]Gary Bradski,Adrian Kaebler,于仕琪,刘瑞祯(译),清华大学出版社,北京,
2009.
[8]Hopper A ,The Database of Faces ,2010
[9]方文志,方魏,郑钰辉,一种基于类Haar特征和改进AdaBoost分类器的车
辆识别算法,电子学报,2011,39(5).。