北京大学本科生毕业论文 的。这个样本库的将侧面人脸、非正向人脸、有遮挡的人脸都归入了非人脸样本。因此,依此样本库训练的强分类器只对正面正向人脸敏感。
7.2 训练难点及优化
7.2.1 计算成本
由于特征数量极其多,训练的时间和空间开销特别大。在每轮循环中,都要计算所有样本对所有特征的特征值,则需要运算:
78,460×7,087 = 556,046,020 次
在 PIII 850MHz、512Mb 的机器上实测得到,上述运算共花时 675 秒(11 分钟 15 秒)。为了训练 200 个弱分类器,则需要进行 200 轮运算,则共需要 37.5 小时。但这并不是最终的运算时间,最终的运算时间要加上每轮运算中选择最佳阈值所要进行的排序、遍历等运算。时间的开销是巨大的。
因为一个特征对一幅图像的特征值是固定的,那么可以只运行一次上述运 算,将得到的特征值结果都保存在硬盘上,这样可以减少每次计算的时间开销,需要的磁盘空间为(采用 4 字节的 unsigned long 存储):
556,046,020× 4 = 2,224,184,080Bytes=2.07Gbytes
空间开销是巨大的。但是,对于一般的 PC 机,硬盘的峰值读取速度为 66Mb/s,则读取上述内容的时间开销仍有 32 秒。
7.2.2 减少矩形特征的数量
基于 AdaBoost 算法的人脸检测 赵楠
59
北京大学本科生毕业论文 为了提高训练速度,得从其他方面考虑。分析知道,除了算法效率外,影响运算次数的因素只有训练集数量和特征数量,而训练集数量不可能减少,这样会直接影响最后得到的强分类器效果;因此必须得减少特征数量才能减少训练时间。
对于特征数量的减少,主要有两个途径。
第一是在特征生成阶段人为剔出。例如,完全不必考虑宽度为一个像素的矩形特征,因为显然用这样的特征计算特征值随机性太大,不可能寻找到合适的阈值。这一步,特征数量可以减少 6,520 个,变成 71,940 个。又因为训练集的人脸特征都集中在中部,边缘上的矩形特征的贡献不会特别大,因此可以适当减少边缘的矩形特征10,例如不考虑涉及到边缘 1 像素的矩形特征,则矩形特征的数量可以进一步减少到 46,953 个。
第二步是在训练过程中动态地减少矩形特征。对于在训练中,阈值的选取对错误率降低成效不大的那些矩形特征,被认为是对人脸和非人脸区分能力很低的,可以设定一个错误率范围(逐轮改变),在每轮训练中按照这个范围,对矩形特征进行排除。
进行了上述处理后,运算速度可以得到 40%以上的提升。
7.2.3 样本预处理
10
这种减少和训练集有相当的关系,如果训练集的人脸样本的截取已经考虑了边缘效应,那么本方法将增
加训练的难度
基于 AdaBoost 算法的人脸检测 赵楠 60
北京大学本科生毕业论文 为了减小图像本身由于灰度分布11带来造成的影响,需要对训练样本做归一化处理。
对于 MIT 训练库中的所有样本,采用直方图归一化处理所有的样本(见图 21)。进行人脸检测时,也可以按此值进行归一化。
原图像 归一化后
图 21 样本归一化前后对比
7.3 检测结果
7.3.1 检测器
用于检测的图像一般都大于子窗口 20×20 的分辨率。于是,在对一副图像作检测的时候需要从不同的尺度和不同的位置逐个检测。
11
这种灰度值分布偏差往往是因为拍摄时的光线、曝光等因素造成的。直方图归一化也可以由 Photoshop
处理完成
基于 AdaBoost 算法的人脸检测 赵楠 61
北京大学本科生毕业论文 对于不同尺度的检测,我们选择对检测器进行缩放而不是对图像本身进行缩放,因为在任何尺度下,特征都可以用同样的代价求出(5.3.2.2)。我们的使用的检测器基本大小为 20×20,实验结果表明,检测器每次放大 1.25 倍是最佳的。 此外,检测器还需要在不同的位置逐个检测。每一次,检测器平移 k 个象素; 如果放大后的检测器尺度为 S,则检测器窗口每次平移 kS。这里,k 的选择非常重要,它既影响检测的精度,又影响检测的速度。如果 k 取的较大,检测速度可以很快,但是同时很多人脸由于检测器的移动步长较大最终被忽略了;反之,如果 k 取的较小,虽然可能会提高检测的精度,但是将使检测速度大大降低。在实
际检测中,按照人脸结构的“ 三庭五眼” 准则12,选择k
。
由于检测器对于尺度和位置上的微小变化不敏感,所以,对于同一张人脸, 检测结果中可能会把它检测出很多次,因而我们需要对检测结果进行消减。消减的方法十分简单:对于边界有相交区域的检测结果,对它们的四个顶点分别取平均值作为新的顶点,从而合成一个检测结果。
12
“ 三庭” 指脸的长度比例,把脸的长度分为三个等分,从前额发际线至眉骨,从眉骨至鼻底,从鼻底至
下颏,各占脸长的1/3。“ 五眼” 指脸的宽度比例,以眼形长度为单位,把脸的宽度分成五个等分,从左侧发际至右侧发际,为五只眼形。两只眼睛之间有一只眼睛的间距,两眼外侧至侧发际各为一只眼睛的间距,各占比例的1/5。这来自中国古代画家总结出来的规则。按照这个准则,检测器的移动基本上总可以包含一个人脸。
基于 AdaBoost 算法的人脸检测 赵楠
62
北京大学本科生毕业论文
7.3.2 实验结果
7.3.2.1 实验对比本节和 Viola 实验的结果[19]
进行了比较。 Viola 的结果
本文结果
基于 AdaBoost 算法的人脸检测 赵楠 63