AdaBoost人脸检测算法的改进
2014-09-18刘晓芳夏哲雷王孝卫
刘晓芳,夏哲雷,王孝卫
(中国计量学院信息工程学院,浙江杭州310018)
人脸检测是人脸识别的第一步,在嵌入式监控系统和其他安全系统中有着重要作用。人脸检测的目的是为了确定这幅图片中是否存在人脸,如果存在则返回人脸的尺寸大小以及人脸所在位置[1]。在静态和视频模式下,大多数学者使用机器作为人脸检测的工具[2]。由于数据采集过程受到年龄、姿态、表情、光照等因素影响,且存在“一人千面”的特点。正是因为存在这些固有的挑战性,国内外众多研究人员都投身其中。在众多的人脸检测方法中,AdaBoost人脸检测算法是迄今最为成功的算法之一。Viola等[3]等采用 AdaBoost(Adaptive-Boosting)算法构建的层叠式的人脸检测器是人脸检测算法上的重大突破,其基本思想是通过反复训练给定的训练集,挑选出关键的分类特征建立弱分类器,最后由弱分类器级联组合成强分类器。
在大多数图像处理应用中,对图像处理速度有较高要求,如面向人脸的实时控制、基于图片内容的图片检测活视频搜索等。张平等人提出了基于肤色空间预处理的AdaBoost算法,提高了人脸检测速度[4]。郑峰等提出了一种新的自适应样本权重更新算法,并将遗传算法与AdaBoost算法结合构建人脸检测器,使得人脸检测更加快速和精确[5]。Du等采用部分人脸遮挡样本训练分类器以实现被遮挡人脸图片的检测,且提高了训练速度[6]。
研究者采用不同的方法来减少检测所需时间,但是在实际检测过程中,分类器对各个缩放下的图片进行几乎所有像素点的遍历的这个过程存在着很大的冗余。基于此,本文主要从提升检测速度入手,讨论了AdaBoost人脸检测算法中影响速度的主要因素,通过人脸尺寸模型以及人脸图片权重模型,并在基础上,改进了人脸检测方法,提高了人脸检测速度。
1 AdaBoost算法及其影响因素分析
1.1 AdaBoost算法
AdaBoost算法是一种自适应增强算法,其核心思想是将大量的分类能力一般的弱分类器通过一定的方法叠加起来,构成一个更强大的强分类器。Viola最先提出将该算法用于人脸检测,后来Ranier Lienhart对该方法进行了改善[7]。
AdaBoost人脸检测是一种基于积分图、级联检测器和AdaBoost算法的方法,根据人脸图像中灰度值差异这一特性,主要利用人脸灰度图像计算积分值获取Haar特征值。
首先,利用人脸和非人脸样本的Haar特征对分类器进行训练,得到AdaBoost分类器。然后,在图像中移动分类器窗口,检测每个子窗口是否为人脸。最后,将每个缩放下的检测结果进行总和,如果在一定尺寸范围内能够检测到人脸的子窗口数大于规定值,则判定检测都是人脸。为了检测较大的目标,通常需要放大子窗口尺寸或者对输入图像进行缩放处理,直至完成所有检测。在硬件实现中图像缩放的方法更有优势,首先,一旦完成图像的缩放后,后续的处理完全相同,不需要对不同缩放进行特殊的处理。再次,采用流水设计可以将图像缩放处理和检测同时进行,从而不会增加额外的计算时间。所以本文采用图像缩放处理的方法。
1.2 检测速度影响因素分析
虽然AdaBoost人脸检测的训练过程非常耗时(需以小时计算),但其检测效果较理想。然而在测试过程中发现,对于尺寸较大的图片,在PC机上的测试时间通常达到分钟这一数量级。故而对于大尺寸图片,如何快速检测到目标对于减少复杂度至关重要。设n表示图片的缩放次数,则图片的缩放倍数sf表示为
sf=1.1n(1)
对图片进行检测,发现只有当图片中人脸尺寸缩放至分类器尺寸左右时,才能够正确检测到人脸,如图1所示。
图1 不同缩放系数下的检测结果(原图为彩色)
图1中提取了几种缩放下对图片的检测结果,红色矩形框表示此时能够完全通过分类器的子窗口。原图片的分辨率为836×592,人脸尺寸在350×350左右,从图1可以看出,当缩放倍数较小时,并不能正确检测到人脸,反而会造成一些误检。在检测过程中,每个缩放下的检测子窗口总数随着sf的增大而减小,即检测时间也会随着sf的增大而减小。所以对于较大尺寸的单幅人脸图片,如果能够快速确定出被检测图片的人脸尺寸范围,就能针对该尺寸设置图片的缩放倍数,快速检测到人脸所在位置和范围。
2 基于高斯分布的人脸分布模型及单幅人脸权重模型
对于单幅人脸图片,若能够快速定位出人脸的可能性尺寸,就可以有目的地对原始图片进行放缩放,而无需进行所有的缩放检测。如果首次缩放后仍未确定出人脸,那么如何确定出下一步缩放方向也很重要。所以本文主要针对640×480这一分辨率的人脸图片,从人脸尺寸的分布以及缩放方式两个方面进行研究。
2.1 人脸分布模型
对于同一分辨率下的人脸图片,人脸所占的尺寸范围具有随机性。基于此,随机从网上下载1 000幅存在人脸且分辨率为640×480的图片。统计图片中所有人脸,按照人脸尺寸进行分类,统计不同尺寸范围内检测到人脸的总个数,得到如图的星点图分布。图2中,每点对应的人脸尺寸范围为[5x,5x+5)。
图2 人脸按尺寸分布图
对得到的人脸分布数据进行分析,发现其符合高斯分布(图中曲线),如式(2)所示
式中:a0=62.34,b0=18.76,c0=2.143,a1=79.05,b1=13.88,c1=3.179,a2=67.6,b2=9.072,c2=2.407,a3=111.6,b3=30.54,c3=12.69,a4=-75.67,b4=32.51,c4=8.78。
从图2可以清楚地看出,对于640×480这一分辨率的图片,不同尺寸的人脸出现的概率。通过该概率模型,对于任何一幅该分辨率下的未知图片,可以确定出缩放系数sf的大致走向。例如从图中发现,人脸尺寸在[90,95)这一范围内的可能性最大,本文实验所用分类器尺寸为18×18,所以第一次的缩放系数sf应该设置为5.0。
2.2 单幅人脸权重模型
通过上面的人脸分布的高斯模型可以看出,对于分辨率为640×480的单个人脸图片,首先要将原图缩小到原来的1/5进行检测。此时若未发现人脸,缩放系数是增大还是减小(即sf的走向)对减少检测的冗余也很重要。
AdaBoost是许多弱分类器级联而成的强分类器。检测时,按照一定的尺度参数(即每次移动的像素个数,向左然后向下)进行移动,遍历整个图像,只有完全通过分类器时,表示该子窗口可能存在人脸。设分类器共有n级,只有当子窗口每一级的Harr特征值Ti都大于分类器该级的阈值θi时,才能够完全通过分类器,如果在某一级时不能通过分类器,就不需要后续的检测。所以子窗口的Ti越大,它通过分类器的可能性越大。当缩放系数sf=i时,此时若人脸尺寸在i×S(S表示分类器尺寸)左右,其Haar特征值就与分类器符合的程度最大,被成功检测的可能性也最大。当人脸尺寸接近分类器大小,遍历到人脸周围的子窗口时,其通过分类器的可能性越大,也就意味着子窗口通过分类器的级数越多。当缩放次数n=i时,设此时图片的阈值Wi为
式中:j分别表示分类器的级数;x表示完全通过分类器的子窗口的个数。
对于分辨率为640×480的单幅人脸图片,统计其人脸尺寸,按照大小对图片进行排序。结果如图3所示。
图3 按照人脸尺寸排序后的640×480图片
本文采用OpenCV提供的函数进行人脸检测,由于所用分类器共20级,所以m1=19。当sf=5.0时,若m0=17,分别计算上面的300幅单人脸图片的权重W。结果如图4所示。
通过对权重W进行数据分析,发现其拟合高斯分布g(x)为
图4 640×480的单人脸图片权重分布
式中:θ=5.268,α =134.8 ,λ =42.91。根据该高斯分布模型,当在sf=5.0时未检测到人脸,可以进一步判断人脸尺寸范围,从而判断下一个缩放系数sf的走向。
2.3 思路与算法
通过以上两个模型,发现在进行检测时,缩放系数的走向是有规律可循的。首先,通过人脸尺寸模型,可以判断出图片中人脸尺寸的可能性,依此来设置缩放系数。然后,如果首次缩放下未检测到人脸,则可根据单幅图片人脸权重模型,了解到人脸尺寸所在范围,此时结合人脸尺寸模型,不断地设置缩放系数,直至检测到人脸。具体的检测思路如下:
1)输入原始图像。
2)对照人脸尺寸分布模型,以人脸最可能出现的尺寸为基准,设置缩放系数并进行检测。检测到人脸,转到步骤5),否则继续下一步。
3)根据单幅人脸权重模型判断人脸尺寸范围,结合人脸尺寸模型设置缩放系数。
4)直至检测出所有人脸或完成所有缩放。5)标记出人脸。
3 实验结果和分析
本实验使用的是在VC6.0下使用OpenCV1.0版本,在PC机上分别使用原始程序模块以及基于本文方法改进后的程序对同样的图片样本进行测试,实验结果见表1。
表1 IDCT修剪算法的比特率和编码时间测试结果
常规人脸检测方法遍历了所有缩放下的每个像素点,本文方法依照上述人脸尺寸模型以及单幅人脸权重模型设置缩放,这会造成误判下提前终止检测。从表1可以看出,虽然最终的检测率略有下降(下降了1.7%),但是检测时间却大幅降低(降低了29.7%)。
4 小结
本文基于AdaBoost人脸检测算法,针对较大尺寸图片,提出了一种基于人脸尺寸模型和单幅图片人脸权重模型的人脸检测方法。该方案针对单幅人脸图片,从检测时缩放系数的走向出发,使得图片中的人脸尺寸能够快速缩放至与分类器相匹配,从而达到快速检测到人脸、提高检测速度的目的。实验结果也证明了在检测率略有下降的情况下,大幅度降低了检测时间。
:
[1] YANG M H,KRIEGMAN O J,AHUJA N.Detecting faces in images:a survey[J].IEEE Trans.Pattern Analysis and Machine Intelligence,2002,24(1):34-58.
[2] ZULHADI Z,SHAHREL A S.Face detection using combination of neural network and Adaboost[C]//Proc.Tencon 2011-2011 IEEE Region 10 Conference.Bail:IEEE Press,2011:335-338.
[3] VOILA P.Rapid object detection using a boosted cascade of simple features[C]//Proc.the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition.Kauai:IEEE Press,2001:511-518.
[4]张平,王贵成,汪勇.Adaboost人脸检测算法的速度影响因素分析及其改进方法[EB/OL].[2013-09-20].http://cpfd.cnki.com.cn/Article/CPFDTOTAL-XNCJ200905002069.htm.
[5]张君昌,张译.基于改进AdaBoost算法的人脸检测[J].计算机仿真,2011,28(7):167-169.
[6] DU Xingjing,ZHU Dongmei,ZHAO Hongyun.Study of fast Adaboost face detection algorithm[C]//Proc.2010 International Conference on Computer Application and System Modeling.Taiyuan:IEEE Press,2010:136-139.
[7]邹志煌,孙鑫,程武山.人脸识别技术产品的发展概况[J].电视技术,2008,32(1):91-93.