闫 斌,梁岚珍,2
(1.新疆大学电气工程学院,新疆乌鲁木齐830047;2.北京联合大学自动化学院,北京100101)
人脸检测是人脸识别研究中的首个环节,人脸检测性能的好坏直接影响整个应用系统的性能。AdaBoost算法是一种基于学习的方法,2001 年,P.Viola[1]将其应用于人脸检测,是第一个实时的人脸检测算法。使用AdaBoost算法训练分类器的缺点在于特征数目过多,且训练耗时较大。因此,许多研究者则致力于改进Ada-Boost分类器的训练算法。文献[2]提出用多块LBP特征(MB-LBP)替代Haar特征,在同样大小的窗口中,MB-LBP特征数量较Haar特征要少很多,从而加快了训练和检测速度。文献[3]采用Floating搜索方法优化AdaBoost算法,用较少的分类器提高了分类性能。文献[4]利用粒子群算法优化 AdaBoost算法的训练过程(PSO-AdaBoost),采用提取最佳阈值和最佳特征的方式,避免了穷举搜索,有效地提高了训练速度。但是该算法的初始化过程是随机的,不能够保证粒子个体质量,并且粒子运行会出现“惰性”,容易陷入局部最优解。
本文在PSO-AdaBoost算法基础上,结合混沌运动的优点,提出使用混沌粒子群算法结合AdaBoost人脸检测算法(CPSO-AdaBoost),来训练人脸检测分类器,改善了PSO-AdaBoost算法搜索最佳特征的能力,算法的收敛速度和精度也得到了提高。
AdaBoost算法的核心思想是将训练出来的分类器,通过筛选、确定一系列分类性能较好的弱分类器,然后通过线性叠加的方式将它们提升为强分类器。训练流程如图1所示。
从流程图中可以看出,训练的关键任务在于寻找到若干个性能较好的弱分类器ht。若这些分类器选择得当,后续所获得的强分类器性能则会更好。式中:x为子窗口图像;f为特征;p为偏置;θ为阈值。
图1 AdaBoost算法训练流程图
对于每一个特征f,训练对应的弱分类器,即寻找并确定阈值 θ和偏置p,使其分类错误率函数 εt=|h(xi,f,p,θ)- yi|的值最小(qi为归一化后的权
弱分类器的数学结构为重),然后再从所有的弱分类器中寻找出最优弱分类器。
AdaBoost算法训练弱分类器时,是对每个特征进行穷举搜索。然而一个检测窗口的特征数量是巨大的,一幅24×24的图像中就含有162 336个特征,训练过程中,每循环一次都要计算一次目标函数来寻找最优弱分类器,这将导致时间和内存上的巨大开销。
PSO算法是通过对鸟群某些行为的观察研究而提出的一种进化算法[5]。算法中,每个粒子是由相应的目标适应度函数值决定其适应值,并由其速度调整粒子的移动方向和距离,通过迭代寻找全局最优解。迭代中,粒子根据下面的公式更新自己的速度和位置
式中:ω为惯性权重;c1和c2为加速常数;r1和r2为[0,1]范围内的随机数。
由此可见,PSO-AdaBoost算法在训练过程中能够自动衍变出一组良好的特征和弱分类器,从而改善Ada-Boost算法的性能。然而,若待优化函数较为复杂,包含多个局部极值点,或算法中的参数选择不当,容易导致粒子的“早熟”现象,从而不能达到全局极值点。另外,由于算法迭代过程中仅仅依赖于pid和gid这两个参数信息,没有淘汰机制,而影响了算法的收敛速度。
混沌是在确定系统中出现的一种看似混乱无规则,实则存在精细规律的类似随机的现象[6]。混沌变量具有随机性、遍历性和对初始条件高度敏感性等特点。混沌优化不要求目标函数具有连续性和可微性的性质。
Logistic映射函数就是一个经典的混沌系统,在式(4)中,当μ=4,0<z0<1时,系统完全处于混沌状态。
由于粒子群算法的随机初始化过程仅能保证解群的均匀分布,但不能保证个体的质量(如果离最优解较远),初始化的效果将影响到搜索的效率和解的质量。另外通过分析式(3)可发现,当粒子的当前位置xid及局部最优值pid靠近全局最优值gid时,vid的迭代仅依靠ω进行,当ω<1时,它的速度会越来越慢,而出现“惰性”,在接下来的迭代中,其他粒子会逐渐靠近此粒子完成进化,而无法达到全局最优。
因此CPSO算法提出以下改进措施:
1)利用混沌序列对粒子进行初始化,保证了粒子的个体质量和种群多样性。具体作法为:随机产生一个n维每个分量数值在[0,1]之间的向量,z1=(z11,z12,…,z1n),n为目标函数中的变量个数,根据式(4)得到N个向量z1,z2,…,zN。并将zi的各个分量加载到对应变量的取值区间。
2)用当前最优位置产生混沌序列,将该粒子与其他任意位置的某粒子互换位置,以帮助惰性粒子摆脱局部极值点。具体做法为:当粒子陷入局部最优解Pg时,将pgi(i=1,2,…,D)映射到 Logistic方程的定义域[0,1],并通过式(5)把其变换到优化变量的取值区间
式中:ai,bi为第i维变量的取值范围,用Logistic方程迭代产生混沌变量序列(m=1,2,…),再把通过逆映射到原解空间,得到
对每个混沌变量p(m)g经历的可行解计算适应值,并保存性能最好的可行解p*。最后用p*随机取代群体中任意粒子的位置。
为了测试CPSO的性能,本文使用测试函数GriewankFunction来进行试验,并与PSO算法的试验结果进行比较。试验中各情况运行了50次,维数n取30,求得平均最优适应值和最优适应值作为比较的依据。
GriewankFunction函数为
式中:当xi=0时,达到全局极小点;当xi=±kπ,i=1,2,…,n,k=1,2,…,n时,达到局部极小点。
2种算法计算结果见表1。
表1 GriewankFunction的2种算法测试值
GriewankFunction函数平均适应值随迭代次数变化曲线如图2所示。
图2 GriewankFunction平均值/迭代次数曲线
从试验结果和图2可以看出,CPSO算法性能优于PSO算法,不但拥有较快的收敛速度,而且也有很强的全局搜索能力,CPSO的最优适应值和适应值都比PSO的小,因此它的精度更高、更稳定。从上述结果来看,CPSO方法适应于复杂函数的优化问题,能够获得一定精度的全局最优解。
将弱分类器中的一组参数看成是搜索空间中的一个粒子,第i个粒子Pi可表示为式中:typei为矩形特征类型(取值范围是[0,4]的整数),xi,yi为矩形特征左上角的坐标值,wi,hi为矩形特征的宽和高,ci为矩形特征值对正、负样本的均值的均值[7]。
粒子的目标函数为
式中:iter表示当前迭代次数;itermax表示最大迭代次数;ωmax表示惯性权重初值;ωmin为终值[8]。
用CPSO优化AdaBoost训练算法的流程如下:
1)准备n个样本集合,(x1,y2),(x2,y2),…,(xn,yn),并标示yi=0时为非人脸样本,标示yi=1时为其为人脸样本。
2)样本权重初始化。
对于m个正样本Dt(i)=1/2m,对于q个负样本Dt(i)=1/2q。
粒子的初始速度和位置均由混沌迭代出的序列初始化。ω取线性递减惯性权重
While:
(1)混沌初始化粒子位置和速度。
(2)计算矩形特征与ci的大小,矩形特征大于ci,表示属于正样本,否则属于负样本,再计算各粒子的适应值。
(3)任意粒子,如果其fitness<pid,则将其设置为局部最优值。
(4)任意粒子,如果其fitness<gid,则将其设置为全局最优值。
(5)根据式(3)调整粒子的速度和位置。
(6)对最优位置Pg进行混沌优化。
(7)若达到搜索的停止条件,则输出全局最优位置及其fitness值(即最佳弱分类器),否则返回步骤(2)继续搜索。
4)更新每个样本对应的权重。
5)形成强分类器。
为了对比效果,笔者使用传统AdaBoost算法、PSO-AdaBoost算法和CPSO-AdaBoost算法,从分类器的训练和人脸检测两个方面进行比较。所用样本来自MIT CBCL样本库和网上下载的图片,其中训练集样本包括2 305个人脸样本和3 216个非人脸样本,测试集包括2 138个人脸样本和3 623个非人脸样本,并对样本进行尺寸调整和灰度归一化的预处理操作。部分样本如图3所示。
图3 部分人脸和非人脸样本图
首先进行参数设置,CPSO的粒子个数设定为20个,终止迭代代数为100代,当特征的适应值在50代以内没有明显改变的情况下,迭代提前终止,c1,c2均为2.05。训练指标为检测率≥0.99,误检率≤0.01。
本次试验训练了一个强分类器,训练数据包括训练指定性能的分类器所需要的平均特征数量和训练耗时。表2中列出了3种算法的训练结果。AdaBoost算法训练时,由于最后一层的错误率下降速度过慢,且时间超过了4天,因此选择了手动终止。
表2 平均特征数量和训练时间的对比
从表2中可以看出,本文算法较其他算法在训练的过程中所需要的平均特征数要少很多,训练的时间复杂度也得到了降低。
检测过程采用训练出来的强分类器对测试集中的样本进行检测,并统计检测结果,表3中列出了检测结果,部分检测效果如图4所示。测试性能曲线如图5所示。
表3 检测结果的对比
从检测结果来看,本文算法相对另外两种算法的检测性能是最好的,只需要少量的弱分类器就能达到与其他算法相同的检测率。究其原因,是因为CPSO-Ada-Boost算法在构造弱分类器具有比其他两种算法更强的最佳特征搜索能力,这些最佳特征包括人脸的眼睛,鼻子和嘴巴周围的特征,具有明显的区分人脸和非人脸的特性,CPSO-AdaBoost算法有效地将这些特征挑选出来训练分类器,从而获得较高的检测性能。
本文提出使用混沌粒子群算法优化AdaBoost算法的分类器训练过程,解决了仅使用粒子群优化算法中存在的容易陷入局部最优解的困扰,增强了系统的稳定性,总体性能优于PSO-AdaBoost算法。针对同一训练及测试样本集,训练时间减少了23%,检测率提高了0.94%。下一步需要研究的问题是如何通过对训练样本集的选择,或对特征旋转特性的扩展,来解决对侧面和倾斜的人脸检测难题。
:
[1] VIOLA P,JONES M.Robust real-time face detection[J].International Journal of Computer Vision,2004,57(2):137-154.
[2] ZHANG L,CHU R,XIANG S,et al.Face detection based on multiblock LBP representation[EB/OL].[2014-01-16].http://link.springer.com/chapter/10.1007%2F978-3-540-74549-5_2.
[3] LI S Z,ZHANG Z Q.Floatboost learning and statistical face detection[J].IEEE Trans.Pattern Analysis and Machine Intelligence,2004,26(9):1112-1123.
[4] MOHEMMED A W,ZHANG Mengjie,JOHNSTON M.Particle swarm optimization based AdaBoost for face detection[C]//Proc.IEEE Congress on Evolutionary Computation.Piscataway,NJ:IEEE Press,2009:2494-2501.
[5] MOHEMMED A W,ZHANG M J,JOHNSTON M.Particle swarm optimization based AdaBoost for face detection[EB/OL].[2014-01-16].http://www.researchgate.net/publication/221008163_Particle_Swarm_Optimization_based_Adaboost_for_face_detection.
[6]孙子文,王鑫雨,白勇.基于信度和早熟检验的混沌粒子群优化定位算法[J].传感器与微系统,2013,33(9):43-46.
[7] 李睿,张九蕊,毛莉.基于EREF的PSO-AdaBoost训练算法[J].计算机应用研究,2012,29(1):127-129.
[8] SHI Y,EBERHART R.A modified particle swarm optimizer[C]//Proc.the IEEE World Congress on Computational Intelligence.Piscataway:IEEE Service Center,1998:69-73.