ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:1.93MB ,
资源ID:11374659      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11374659.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机视觉作业.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机视觉作业.docx

1、计算机视觉作业计算机视觉作业姓名: 学号: 学院:自动化工程学院专业:控制工程基于 AdaBoost 算法的人脸检测1 引言PAC 学习模型的提出,计算学习理论得到了很大的发展,从而使“学习”有了计算上的判定方法。PAC 模型中提出了弱学习和强学习的概念,后来证明通过某种方法(后称为Boosting)可以将弱学习提升为强学习这使得训练机器学习来得更加方便。1995 年,Freund 和Schapire 提出了AdaBoost 算法。AdaBoost 全称为Adaptive Boosting,作者说取名叫作AdaBoost 是因为这个算法和以前的Boosting 算法都不同(原先的Boostin

2、g 算法需要预先知道假设的错误率下限),它根据弱学习的反馈适应性地(adaptively)调整假设的错误率也就是说,AdaBoost 算法不需要任何关于弱学习器性能的先验知识,加上它和原来Boosting 算法的效率一样,因此可以非常容易地应用到实际问题中。AdaBoost 算法提出后在机器学习领域受到了极大的关注,实验结果显示无论是应用于人造数据还是真实数据,AdaBoost 都能显著提高学习精度。2 人脸检测方法的性能评测2.1 人脸图像数据库人脸图像数据库可用于人脸检测的训练和测试。大部分的人脸检测方法都需要人脸训练图像数据,原先用于人脸识别实验的据库现在都可以用来进行人脸检测的训练。通

3、常人脸识别实验所采用的人脸库不大,一般仅包括100 幅左右的人脸图像,如MIT 库、Yale 库、CMU 库等都是小型库。下表列出了常见的一些人脸识别图像数据库:表 1 常用的人脸图像数据库数据库描述位置MIT共有 16 个人的脸,每个人有27 幅在不同光线、不同尺度、不同头部角度情况下的图像ftp:/whitechapel.media.mit.edu/pub/imagesFERET收集了大量的男性、女性人脸,每张图像包含了一张特定表情的人脸http:/www.nist.gov/humanid/feretUMIST分为 20 个主题,共564 张图像,每个主题包括从侧面到正面的不同人脸姿态ht

4、tp:/images.ee.umist.ac.uk/danny/database.htmlUniv.of Bern30 个人的300 张正面人脸(每人10 张)和150 张侧面人脸(每人5 张)ftp:/ianftp.unibe.ch/pub/images/faceimages/Yale在不同光照条件下,戴眼镜的表情人脸http:/cvc.yale.eduAT&T(Olivetti)40 个主题,每个主题10 张图像HarvardHarvard 在不同光照条件下的剪裁好的人脸图像ftp:/ftp.hrl.harvard.edu/pub/facesM2VTS一个包含不同图像序列的多态数据库htt

5、p:/poseidon.csd.auth.gr/m2vts/index.htmlPurdue AR3276 张在不同光照条件下的表情和有遮挡的人脸图像http:/rvl1.ecn.purdue.edu/aleix/aleix_face_db.html图 1 典型的正面人脸图像数据库中的人脸图像如图1,就是MIT 的一个典型的正面人脸数据库中的图像,图像的尺寸都为2020。本论文的检测算法所用的训练图像即为这个数据库中的。由于不同研究任务的需要,必要时可以设计和建立具有特色的专用数据库。2.2 性能评测由于不同人脸库所取得的图像条件和质量不同,因此不同的识别程序之间很难进行比较。为促进人脸识别算

6、法的深入研究和实用化,美国国防部发起了人脸识别技术(Face Recognition Technology,FERET)工程,它包括一个通用人脸库和一套通用测试标准,用于定期对各种人脸识别算法进行性能测试,其分析测试结果对未来的工作起到了一定的指导作用。图 2 左侧为测试图像,右侧为检测结果。不同的标准会导致不同的检测结果对于人脸检测来说,一般关注两个指标:1. 人脸检测率(Detection Rate):在给定图像中,检测出来的人脸和人脸总数的比率。但是,“人脸”的定义并没有统一标准,例如,如果一个人脸被遮挡,那么究竟遮挡了多大部分后,就能判定剩余部分不再是一个“人脸”?;2. 错误检测数(

7、False Detection):有多少的非人脸被当成是人脸检测出来了。这个指标非常重要,有些检测算法可以给出甚至100%的检测率,但是其错误检测的数量可能非常巨大。一个理想化完美的人脸检测算法,应该有100%的人脸检测率和0 错误检测数。现阶段也许只有人的大脑有这个能力。虽然现在有很多检测算法,但是它们中的大部分还没有经过大量的图像数据集测试。而且,这些方法的实验结果大都是用不同的测试集得出的。即使采用了相同的训练集和测试集,由于研究者对“检测成功”的看法不尽相同,使得检测率的标准不唯一,也会导致对不同检测算法评测的困难。如图4,假设右图中的所有子图像都被检测器认为是人脸,那么一个宽泛的标准

8、会认为检测到的这所有的人脸都是成功的,但是一个严格标准可能认为这些检测到的人脸有很多是错误的。为了公平地比较和评价这些方法,也有必要像FERET 一样定义一套标准的测试数据集和测试方法。3 PAC 学习模型3.1 概述可学习理论可以分为统计学习理论和计算学习理论两大部分。统计学习理论与经验过程有着密切的联系,而计算学习理论是概率理论中发展比较成熟的一个重要分支,它主要用于处理在实验的基础上进行的各种量的估计,研究当采样越来越多的时候,这些估计值是否收敛到未知的真值的问题,它的理论基础主要是概率理论;计算学习理论主要研究如何构造有效的学习算法以及讨论学习算法的计算复杂性问题。PAC(Probab

9、ly Approximately Correct)模型是计算学习理论中常用的模型,它是由Valiant于1984年首先提出来的。这篇论文认为“学习”是当明显清晰的过程或模式不存在时仍能获取知识的一种“过程”,并给出了一个从计算角度来获得这种“过程”的方法,这种方法包括:(1)适当信息收集机制的选择;(2)学习的协定;(3)对能在合理步骤内完成学习的概念的分类。虽然内在的算法复杂性限制了能够学习的概念的范围,论文仍然给出了一些有现实意义的,重要的,能够学习的概念例子。PAC学习的实质就是在样本训练的基础上,使算法的输出以概率接近未知的目标概念。PAC学习模型是考虑样本复杂度及计算复杂度2的一个基

10、本框架,成功的学习被定义为形式化的概率理论。3.2弱学习与强学习如何根据观测数据来学习并得到精确的假设是机器学习领域中人们非常关注的一个问题,机器学习的一个重要目标就是对新的样本尽可能给出精确的估计。随机猜测一个是或否的问题,将会有50%的正确率。如果一个假设能够稍微地提高猜测正确的概率,那么这个假设就是弱学习算法,得到这个算法的过程称为弱学习。可以使用半自动化的方法为好几个任务构造弱学习算法,构造过程需要数量巨大的假设集合,这个假设集合是基于某些简单规则的组合和对样本集的性能评估而生成的。如果一个假设能够显著地提高猜测正确的概率,那么这个假设就称为强学习。生成只比随机猜测好一点的弱学习算法很

11、容易,但是构造一个强学习算法却是一件相当困难的事情。Kearns提出了弱学习算法与强学习算法间的等价问题是否能把弱学习算法转化为强学习算法。如果两者等价,则只需要找到一个弱学习算法就可以直接将其提升为强学习算法。Kearns 和Valiant 证明:只要有足够的数据,弱学习算法就能通过集成的方式生成任意高精度的假设(强学习方法)。4 Boosting 方法Boosting 原意为提升、加强。现在一般指的是将弱学习算法提升为强学习算法的一类算法。Boosting 算法是在Kearns 和Valiant 证明后才真正成熟起来的。1990 年,Schapire 最先构造出一种多项式级的算法,即最初的

12、Boosting算法。这种算法可以将弱分类规则转化成强分类规则。一年后,Freund 提出了一种效率更高的Boosting 算法。1993 年,Drucker 和Schapire 第一次以神经网络作为弱学习器,应用Boosting 算法来解决实际的OCR 问题。Boosting 算法在分类、建模、图像分割、数据挖掘等领域均已得到简单而有效的应用。1995 年,Freund 和Schapire 提出的Adaboost,是对Boosting 算法的一大提高。下面章节将逐步具体说明AdaBoost 算法。5.矩形特征本章节描述了对 AdaBoost 人脸检测训练算法速度很重要的两方面,特征的选取和特

13、征值的计算。将矩形作为人脸检测的特征向量,称为矩形特征。本算法选取了最简单的5个矩形特征模板进行训练,以得到一套用于人脸检测的最适合的矩形特征,事实证明,这种特征选取方法的训练速度虽然不快,但是检测效率很高。Viola 提出将积分图(integral image)应用到特征值的计算之中。积分图的引用,可以只对图像进行一次遍历计算,就能够在用常量时间完成每个特征值的计算,这使得训练和检测的速度大大提升。在给定有限的数据情况下,基于特征的检测能够编码特定区域的状态,而且基于特征的系统比基于象素的系统要快得多。矩形特征对一些简单的图形结构,比如边缘、线段,比较敏感,但是其只能描述特定走向(水平、垂直

14、、对角)的结构,因此比较粗略。如图3,脸部一些特征能够由矩形特征简单地描绘,例如,通常,眼睛要比脸颊颜色更深;鼻梁两侧要比鼻梁颜色要深;嘴巴要比周围颜色更深。对于一个 2424 检测器,其内的矩形特征数量超过160,000 个,必须通过特定算法甄选合适的矩形特征,并将其组合成强分类器才能检测人脸。 图3 矩形特征在人脸上的特征匹配。其中上面一行是2424 子窗口内选出的矩形特征,下面一行是子窗口检测到的与矩形特征的匹配。6 程序实现及结果6.1 样本集AdaBoost 算法效果如何的重点在于前期训练时候的弱分类器的选取,而弱分类器的选取在一定程度上依赖于样本集的选取。因而训练样本集显得十分重要

15、。在前面提到了一些图像库,最大最全的是FERET 数据库,但是其由美国军方开发,在美国以外地区无法获得。本文使用的是一套 MIT 的人脸训练样本库,共有样本7,087 个,其中人脸样本2,706 个,非人脸样本4,381 个。其中人脸图像的示例参见图3,非人脸图像的示例参见图4。图 4 训练用的非正面人脸图像这个样本库中的人脸样本都是2020 像素、正面正向人脸,有同一个人的多种光照条件下的样本。非人脸样本尺寸和人脸样本相同,是从图像中随机自动截取的。这个样本库的将侧面人脸、非正向人脸、有遮挡的人脸都归入了非人脸样本。因此,依此样本库训练的强分类器只对正面正向人脸敏感。6.2 训练难点及优化6

16、.2.1 计算成本由于特征数量极其多,训练的时间和空间开销特别大。在每轮循环中,都要计算所有样本对所有特征的特征值,则需要运算:78,4607,087 = 556,046,020次在我的电脑上实测得到,上述运算共花时675 秒(11分钟15 秒)。为了训练200 个弱分类器,则需要进行200 轮运算,则共需要37.5小时。但这并不是最终的运算时间,最终的运算时间要加上每轮运算中选择最佳阈值所要进行的排序、遍历等运算。时间的开销是巨大的。因为一个特征对一幅图像的特征值是固定的,那么可以只运行一次上述运算,将得到的特征值结果都保存在硬盘上,这样可以减少每次计算的时间开销,需要的磁盘空间为(采用4

17、字节的unsigned long 存储):556,046,020 4 = 2,224,184,080Bytes=2.07 Gbytes空间开销是巨大的。但是,对于一般的PC 机,硬盘的峰值读取速度为66Mb/s,则读取上述内容的时间开销仍有32 秒。6.2.2 减少矩形特征的数量为了提高训练速度,得从其他方面考虑。分析知道,除了算法效率外,影响运算次数的因素只有训练集数量和特征数量,而训练集数量不可能减少,这样会直接影响最后得到的强分类器效果;因此必须得减少特征数量才能减少训练时间。对于特征数量的减少,主要有两个途径:第一是在特征生成阶段人为剔出。例如,完全不必考虑宽度为一个像素的矩形特征,因

18、为显然用这样的特征计算特征值随机性太大,不可能寻找到合适的阈值。这一步,特征数量可以减少6,520 个,变成71,940 个。又因为训练集的人脸特征都集中在中部,边缘上的矩形特征的贡献不会特别大,因此可以适当减少边缘的矩形特征,例如不考虑涉及到边缘1 像素的矩形特征,则矩形特征的数量可以进一步减少到46,953 个。第二步是在训练过程中动态地减少矩形特征。对于在训练中,阈值的选取对错误率降低成效不大的那些矩形特征,被认为是对人脸和非人脸区分能力很低的,可以设定一个错误率范围(逐轮改变),在每轮训练中按照这个范围,对矩形特征进行排除。进行了上述处理后,运算速度可以得到40%以上的提升。6.2.3

19、 样本预处理为了减小图像本身由于灰度分布12带来造成的影响,需要对训练样本做归一化处理。对于 MIT 训练库中的所有样本,采用直方图归一化处理所有的样本(见图5)。进行人脸检测时,也可以按此值进行归一化。原图像 归一化后图 5 样本归一化前后对比6.3 检测结果6.3.1 检测器用于检测的图像一般都大于子窗口2020 的分辨率。于是,在对一副图像作检测的时候需要从不同的尺度和不同的位置逐个检测。对于不同尺度的检测,我们选择对检测器进行缩放而不是对图像本身进行缩放,因为在任何尺度下,特征都可以用同样的代价求出。我们的使用的检测器基本大小为2020,实验结果表明,检测器每次放大1.25 倍是最佳的

20、。此外,检测器还需要在不同的位置逐个检测。每一次,检测器平移k 个象素;如果放大后的检测器尺度为S,则检测器窗口每次平移kS。这里,k 的选择非常重要,它既影响检测的精度,又影响检测的速度。如果k 取的较大,检测速度可以很快,但是同时很多人脸由于检测器的移动步长较大最终被忽略了;反之,如果k 取的较小,虽然可能会提高检测的精度,但是将使检测速度大大降低。在实际检测中,按照人脸结构的“三庭五眼”准则,选择k = 20 = 4。由于检测器对于尺度和位置上的微小变化不敏感,所以,对于同一张人脸,检测结果中可能会把它检测出很多次,因而我们需要对检测结果进行消减。消减的方法十分简单:对于边界有相交区域的

21、检测结果,对它们的四个顶点分别取平均值作为新的顶点,从而合成一个检测结果。6.3.2 实验结果首先与 Viola 实验的结果进行了比较。Viola 的结果本文结果图 6 与Viola 实验结果比较1:总数15/漏检0/错检5Viola 的结果本文结果图 7 与Viola 实验结果比较:总数7/漏检1/错检4更多实验结果如下:图 8 多人图像检测结果:总数14/漏检2/错检1图 9 多人图像检测结果:总数6/漏检1/错检4图 10 多人图像检测结果:总数33/漏检0/错检4图 11 不含人脸图像检测结果:总数0/漏检0/错检457 结论Viola 由于采用了层级处理方法,大大提高了检测速度,在同

22、一台计算机上,对于384288 像素的图像,检测速度可以达到15 帧/秒。本文的算法检测384288 像素的图像,约需要30 秒,比Viola 的层级处理方法慢了许多。另外,本方法的漏检和错检率还比较高。这只要是因为训练集数量太少,而且非人脸样本比重偏低。事实上,世界上的非人脸样式要远远大于人脸样式,因此有足够多的非人脸样本,才能够让分类器对非人脸图案的“分辨”能力大大提高。8 Matlab源码function test_targets, E = ada_boost(train_patterns, train_targets, test_patterns, params)% Classify

23、using the AdaBoost algorithm% Inputs:% train_patterns - Train patterns% train_targets - Train targets% test_patterns - Test patterns% Params - NumberOfIterations, Weak Learner Type, Learners parameters% Outputs% test_targets - Predicted targets% E - Errors through the iterations% NOTE: Suitable for

24、only two classes%k_max, weak_learner, alg_param = process_params(params);Ni,M = size(train_patterns);W = ones(1,M)/M;IterDisp = 10;full_patterns = train_patterns, test_patterns;test_targets = zeros(1, size(test_patterns,2);%Do the AdaBoostingfor k = 1:k_max, %Train weak learner Ck using the data sam

25、pled according to W: %.so sample the data according to W randnum = rand(1,M); cW = cumsum(W); indices = zeros(1,M); for i = 1:M, %Find which bin the random number falls into loc = max(find(randnum(i) cW)+1; if isempty(loc) indices(i) = 1; else indices(i) = loc; end end %.and now train the classifier Ck = feval(weak_learner, train_patterns(:, indices), train_targets(indices), full_patterns, alg_param); %Ek - Training error of Ck E(k) = sum(W.*(Ck(1:M) = train_targets); if (E(k) = 0), break end %alpha_k 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1