刘丙雨,李民政
(桂林电子科技大学 计算机科学与工程学院,广西 桂林541004)
人脸检测是判断图像中人脸存在与否,并确定人脸位置、个数及大小的过程,它是人脸识别的关键。1995年,Freund等[1]提出了一种快速人脸检测算法——AdaBoost算法。Jones等[2]引入级联器与积分图像改进了AdaBoost算法,提高了人脸检测率,加快了人脸的检测速度。李文辉等[3]调整AdaBoost算法的权重更新规则,通过控制加权误差分布来限制权重分配扩张。Li Xuchun等[4]采用SVM算法训练弱分类器,并结合AdaBoost算法组成特征选择与泛化能力更好的强分类器,提出一种AdaBoost-SVM算法。Ma Songyan等[5]结合肤色检测与AdaBoost算法,采用肤色模型过滤检测图像,并用AdaBoost算法在候选区域进行精准检测。
尽管这些改进使AdaBoost算法的收敛速度达到了对数级水平,但AdaBoost算法在训练强分类器的过程中删除了部分分类器(如错误率>0.5),对噪声数据比较敏感,尤其是有难分样本点存在时,生成的弱分类器之间仍存在较大的相关性和冗余信息[6]。为此,提出了一种改进的AdaBoost人脸检测算法。
AdaBoost算法通过对同一个正负样本集进行迭代,训练出不同的弱分类器,再将分类能力一般的弱分类器经过一定的方法叠加,形成一个分类能力更好的强分类器[7]。AdaBoost算法的基本步骤为[8]:
1)给定一组训练样本(x1,y1),(x2,y2),…,(xn,yn),其中:yi=1为正样本,即人脸;yi=0为负样本,即非人脸。l+m=n。其中:l为人脸样本数;m为非人脸样本数;n为样本总数。
2)样本权重初始化:
3)当T=1,2,…,t:
a)归一化权重,
b)每个特征j对应训练出一个分类器hj。计算所有弱分类器hj的加权错误率,
c)选出具有最小错误率εt的弱分类器ht。
4)得到强分类器
由AdaBoost算法生成的子分类器的多样性可知,在前几次迭代中,因为每个新生成的弱分类器只考虑上一个弱分类器未正确分类的样本,所以差异性比较大。但随着迭代次数增加,难以被正确分类的样本有可能一直被错分,而后生成的弱分类器会越来越关注这些不能被正确分类的样本,最终多样性急剧下降。Krogh等[9]提出集成系统的泛化误差E:
因此,在AdaBoost算法训练弱分类器的过程中加入差异性度量作为弱分类器间的差异度判定,排除一些弱分类器,降低弱分类器间的相关性,增加强分类器集合的差异性,可提高最终强分类器的检测率。
采用差异性度量Di,j作为分类器间的相关性判定。第i个弱分类器Ci和第j个弱分类器Cj对同一个样本集的检测差异性度量
其中为训练样本集中Ci检测结果为a、Cj检测结果为b的样本个数,a,b∈{0,1}。由式(6)可知,2个分类器的差异性随Di,j的增大而增大。
如果样本总数为n,Ci、Cj的检测差异性为:
其中,
那么l个分类器的平均差异性:
为了减少多样性计算的耗时,加快训练速度,利用多样性查找表(diversity table)保存已选弱分类器间的差异性Di,j。改进的AdaBoost算法的最优弱分类器选择过程为:
当T=1,2,…,t:
a)每个特征j对应训练出一个分类器hj,计算所有弱分类器hj的加权错误率
b)选出具有最小错误率εt的弱分类器ht;
c)计算与已选弱分类器的差异性Di,j,j=1,2,…,t-1,并将其写入多样性查找表;
在P4 4.0 GHz处理器、内存4 GB的PC上采用VC++6.0作为编程平台,对改进的AdaBoost算法进行性能检测,并与AdaBoost算法的检测效果加以对比。人脸库测试集选用MIT-CBCL,并对2种算法训练得到的人脸检测器分别进行测试。为了定量且直观地反映检测性能,在实验中选取人脸检测率、错误检测数分析检测结果。
AdaBoost算法和改进的AdaBoost算法采用相同结构的强分类器进行人脸检测的受试者工作特征曲线(ROC)如图1所示。从图1可看出,当误检的人脸数目相同时,改进的AdaBoost算法的人脸检测率比AdaBoost算法高;当人脸检测率相等时,改进的Ada-Boost算法的错误检测数比AdaBoost算法少。在错误检测数不断增加的情况下,改进的AdaBoost算法的检测率增加更快。
图1 2种算法的受试者工作特征曲线Fig.1 The ROC of two algorithms
AdaBoost算法和改进的AdaBoost算法对同一个图像集的人脸检测率如图2所示。从图2可看出,改进的AdaBoost算法的检测率高于AdaBoost算法。但随着弱分类器数量的增加,改进的AdaBoost算法的检测率升高,优于AdaBoost算法。
图2 2种算法的人脸检测率Fig.2 The face detection rate of two algorithms
在训练弱分类器的过程中引入差异性度量判定,不仅提高了各个弱分类器之间的差异性,而且有效地将特征互补的弱分类器进行组合,从而提高强分类器的检测能力,进一步说明改进的AdaBoost算法的人脸检测性能优于AdaBoost算法。
采用相同结构的强分类器对同一张图片进行人脸检测,其结果如图3所示。由图3可知,AdaBoost算法的检测率低于改进的AdaBoost算法,并且错图数目和漏检数目有所增加,表明加入相关性判定的AdaBoost算法训练的强分类器比AdaBoost算法有更好的检测性能。
图3 人脸检测结果Fig.3 The results of face detection
针对AdaBoost算法忽略弱分类器之间的相关性,导致强分类器的集成性能降低的缺陷,提出一种改进的AdaBoost人脸检测算法。该算法在训练弱分类器的迭代过程中引入差异性判定,根据计算的判定值剔除相似的特征,最后将具有特征互补的弱分类器叠加到强分类器的集合中,保证强分类器有最快的收敛速度和最小的错误率。改进的AdaBoost算法提高了人脸检测率,降低了错误检测数。
[1]Freund Y,Schipare R E.Experiments with a new boosting algorithm[C]//International Conference on Machine Learning,1996:148-156.
[2]Jones M J,Viola P.Method and system for object detection in digital images:US,7099510[P].2006-08-29.
[3]李文辉,倪洪印.一种改进的AdaBoost训练算法[J].吉林大学学报:理学版,2011,3(49):498-504.
[4]Li Xuchun,Wang Lei,Sung E.AdaBoost with SVM-based component classifiers[J].Engineering Applications of Artificial Intelligence,2008,21(5):785-795.
[5]Ma Songyan,Du Tiancang.Improved AdaBoost face detection[C]//IEEE International Conference on Measuring Technology and Mechatronics Automation,2010:434-437.
[6]姚旭,王晓丹.基于AdaBoost匹配追踪的选择性集成算法[J].控制与决策,2014,29(2):208-214.
[7]李闯,丁晓青,吴佑寿.一种改进的AdaBoost-AD Ada-Boost[J].计算机学报,2007,30(1):103-109.
[8]朱丛庆,刘建明,张霖,等.基于肤色分割与改进Ada-Boost算法的人脸检测[J].桂林电子科技大学学报,2013,33(4):319-322.
[9]Krogh A,Vedelsby J.Neural network ensembles,cross validation,and active learning[C]//Advances in Neural Information Processing Systems,1995:231-238.
[10]蒋 焰,丁晓青.基于多步校正的改进AdaBoost算法[J].清华大学学报:自然科学版,2008,48(10):1613-1616.
[11]张君昌,樊伟.基于相关性的AdaBoost人脸检测算法[J].计算机工程,2011,37(8):158-160.