基于BP神经网络的人脸检测AdaBoost算法
2020-09-02李纪鑫任高明
李纪鑫,任高明,赫 磊,孙 瑜
(陕西国防工业职业技术学院 计算机与软件学院,西安 710300)
0 引言
人脸检测的核心在于人脸识别。关于人脸识别的起源,最早可以追溯到20世纪60、70年代,经过几十年的发展,目前已经比较成熟。人脸检测是人脸识别系统的关键部分[1]。但早期的人脸识别研究主要集中在具有较强约束条件的人脸图像上。它假设人脸位置已知或容易获得,因此忽略了人脸检测。随着电子商务等应用的发展,人脸识别成为最有潜力的生物认证手段[2-3]。它要求人脸识别系统能够从视频流或一般的图像中,对人脸进行找寻并且识别。因此,一系列的问题使得人脸检测成为一个独立的研究课题。目前,人脸检测在数字视频处理、视频检测等领域具有重要的应用价值[4-5]。
人脸检测的目的是发现任意给定图像中的所有的人脸。如果包含面,则返回面的位置、大小和姿态。目前,人脸检测算法主要分为基于知识的方法、基于模板匹配的方法、基于特征的方法和基于统计模型的方法[6]。
从人脸检测算法的发展来看,人脸检测算法主要分为3个阶段:早期算法阶段、AdaBoost帧阶段和深度学习阶段。在早期算法阶段,人脸检测算法采用模板匹配技术等,例如Rowley等人使用神经网络进行人脸检测,并训练了一个包含20×20张人脸和非人脸图像的多层感知器模型[7]。在AdaBoost帧阶段,人脸检测得到了突破性的发展。维奥拉等人2001年提出了一种基于类Haar特征和AdaBoost算法的人脸检测方法。之后,许多学者提出了基于AdaBoost算法的相应改进方法。例如:为了提高检测的速度和准确性,他们开始使用融合算法,包括基于支持向量机和AdaBoost算法的人脸检测方法,基于肤色模型的人脸检测方法和AdaBoost算法。在深度学习阶段,卷积神经网络(CNN)在图像分类成功后被用于人脸检测。目前,已有一些高效、高精度的算法,包括级联CNN、Faceness-Net、MTCNN、TCNN等[8]。
由于人脸在图像和视频流中与其他部分有明显的颜色特征区别,因此,利用该特点,在此提出了一种基于BP神经网络的肤色检测模型,该模型灵感主要是来源于YCbCr颜色空间及相应的高斯模型。实验结果表明,该模型在肤色检测方面优于YCbCr-高斯模型。同时,为了提高传统AdaBoost的人脸检测算法的性能,提出了一种改进的AdaBoost权值更新方法。最后,采用新的肤色模型提取肤色,然后采用改进的AdaBoost算法对人脸进行准确检测。
1 理论原理
1.1 YCbCr颜色空间的理论和原理
人类肤色像素分类器的目的是确定一个肤色像素是肤色还是非肤色。好的肤色像素分类器应该覆盖所有肤色类型的色调(棕色、黄色、黑色、白色等),并尽可能满足不同的照明条件。颜色用于识别图像上的物体。为了进行数字图像处理,人们投射了大量的色彩空间。在目标检测中,为了获得准确的检测结果,需要选择合适的颜色空间。
YCbCr是一个感知色彩空间,有两个元素:
亮度(Y)表示亮度和色度(Cb和Cr),表示蓝色和红色的色度成分。YCbCr颜色空间是由RGB颜色空间的数学变换坐标设计的。如果底层RGB颜色空间是绝对的,则YCbCr颜色空间是绝对的颜色空间。
YCbCr颜色空间是根据YUV颜色空间的缩放比例和偏移量得出的[9]。图像的RGB值由R,G和B变量表示。将RGB颜色空间转换为YCbCr颜色空间的公式如下:
(1)
与其他色彩空间相比,YCbCr色彩空间的计算非常简单。图1显示肤色在YCbCr颜色空间中具有良好的聚类特性。
1.2 YCbCr-高斯模型
YCbCr-高斯模型通过计算像素颜色和肤色之间的相似度来确定肤色。对于每个像素,Cb和Cr的值为x。肤色的平均值为m,肤色的方差为S,像素颜色与肤色之间的相似度为P(Cb,Cr)。P(Cb,Cr)可以通过公式(2)~(5)进行计算:
(2)
(3)
(4)
x=(Cr,Cb)T
(5)
在YCbCr-高斯模型中,选取多个样本分析肤色分布。如图2所示,0.5可用作区分肤色和非肤色的阈值。
1.3 基于BP神经网络的肤色模型
尽管YCbCr-高斯肤色模型可以区分肤色和非肤色。然而,靠近皮肤的部分颜色也符合YCbCr-高斯模型,该模型被误认为是皮肤颜色。为了提高肤色检测的准确性,提出了基于BP神经网络的肤色模型。
如图3所示,BP神经网络分为输入层、隐藏层和输出层。输入层的神经元数目为5个,表示LX,LY,Y,Cb和Cr,(LX,LY)表示像素的位置坐标。(Y,Cb,Cr)是像素的颜色值。(LX,LY)使BP神经网络考虑肤色的连通性。那么隐藏层中的神经元数量是10个。最后一层是输出层,神经元数量为1。每个神经元之间的重量为w,神经元的值为v。激活函数f(x)如公式(6)所示。最后用公式(7)计算神经元的输出值:
(6)
y=f(w1v1+w2v2+…+wivi)
(7)
在BP神经网络模型训练完成后,用训练后的模型代替YCbCr高斯模型进行肤色检测。图4(a)为原始图像,图4(b)为YCbCr高斯模型的检测图像,图4(c)为BP神经网络的检测图像。结果表明,基于BP神经网络的肤色模型优于YCbCr高斯模型。
图4 不同检测结果与原始图像对比
2 基于Haar特征和AdaBoost的人脸检测
基于AdaBoost,Viola利用Haar特征和积分图进行人脸检测。它主要使用积分图来帮助计算Haar特征。然后利用Haar特征对一系列分类能力较弱的弱分类器进行训练,使弱分类器的分类精度达到50%以上。然后将这些弱分类器结合起来,形成具有较强分类能力的强分类器。最后,将这些强分类器组合成级联分类器,达到人脸检测的目的[10]。
2.1 Haar特征与积分图
如图5所示,Viola提出了5种常见的矩形特征原型[11]。这些特征和人脸之间的匹配如图6所示。
图5常见矩形特征
图6 Haar特征与人脸的匹配
Haar特征的值是通过减去黑色矩形像素和白色矩形像素来计算的[10]。为了便于计算,采用积分图的方法提高了计算速度。其主要思想是计算ii(x,y),即从点(0,0)到点(x,y)的所有像素颜色之和。如下式所示,是原始图像的值。
ii(x,y)=∑x’≤x,y’≤yi(x’,y’)
(8)
弱分类器和强分类器:每个不同的Haar特征代表一个不同的弱分类器。阈值为θ,f为特征值。x表示检测窗口,p表示不等式的方向。弱分类器可计算为:
(9)
强分类器由几个分类能力最强的弱分类器组成。整个训练过程如下:
1)训练集s={(x1,y1),(x2,y2),…,(xn,yn)},样本图像为xn,阳性样本数为m,阴性样本数为l.yn∈(-1,1),阳性样本数为1,阴性样本数为-1。
2)初始化权重,其中w(t,i)表示第t次迭代中第i个样本的权重。重量可用公式(10)计算:
(10)
3)如公式(10)所示,迭代次数为T。在每次迭代中需要对权重进行规范化。需要计算弱分类器的错误率,具体公式如(11)、(12)所示:
(11)
(12)
4)计算弱分类器权重αt并更新样本权重。zt是所有样本权重的总和。计算过程如式(13)~(15)所示:
(13)
(14)
(15)
5)最后利用公式(16)获得强分类器H(x):
(16)
2.2 级联分级器
级联分类器由决策树算法导出。级联分类器由几个强分类器串联而成。对于一个检测窗口,只有在上层的强分类器对其进行正确分类后,强分类器才能对其进行检测。级联分类器的结构如图7所示。
图7 级联分类器示意图
3 改进AdaBoost算法
3.1 AdaBoost算法原理
Adaboost算法是一种迭代算法,其主要思想是用一个训练集训练不同的分类器(弱分类器),然后用一些方法将它们结合起来构造一个更强的分类器,如图8所示。
图8 Adaboost算法框架
算法本身是通过改变数据分布来实现的,即根据训练集样本的分类修正,以及最后的整体分类精度来确定每个样本的权重。然后将修改后的新数据的权值发送给下层分类器进行训练,最后将每个训练分类器融合在一起,作为最终的决策分类器。
整个AdaBoost算法的要点如下:
1)每次迭代的变化是样本的分布,而不是重采样;
2)样本分布的变化取决于样本的分类是否正确,而分类正确的样本权重低,分类错误的样本权重高(通常是靠近边界的样本),这将使下一个分类器关注当前的分类错误样本;
3)将所有的弱分类器合并得到结果。
但是传统的AdaBoost算法因为权值分配不均,会导致噪声权值无限大,从而造成结果的不准确。因此在此,提出了一种改进型AdaBoost算法。
3.2 改进AdaBoost算法原理
在传统的AdaBoost算法中,在训练过程中,误检样本的权重会越来越大。分类器将更加注意错误检查的样本。同时,逐渐忽略正确分类的样本。这是目前AdaBoost算法的不足。其中f(xi)是特征值的函数,θ是特征的阈值。如果f(x1) 将阈值和样本之间的距离添加到权重更新中。 (17) (18) 防止误分类样品重量的无限增加。在权值更新中加入阈值与样本之间的距离,增加阈值限制。新的权重更新计算如公式(19)所示: (19) 整个具体算法如下: Algorithm1改进AdaBoost算法: Input:The training setS= { (xi,yi) },i=1…nandyi∈(-1,1);Tis the number of iteration,Iis weak classifier,the weight iswt,i,the number of positive samples is m and the number of negative samples is l. 1. Fori=1:n 4. end 5. fort=1:T 6.ht=I(S,wt) 13. end 将改进的AdaBoost算法用于人脸检测。虽然大多数人脸都可以检测,但对于复杂的背景图像,仍然存在一些错误检测。为了提高人脸检测的精度,提出了一种基于BP神经网络和AdaBoost算法的人脸检测方法。利用BP神经网络提取肤色候选区域,然后利用改进的AdaBoost算法对人脸进行精确定位。工作流程如图9所示。 图9 人脸检测流程 实验表明,新的人脸检测方法具有较好的性能。图10(a)是原始图像。图10(b)是BP神经网络的检测图像。图10(c)是改进的AdaBoost的检测图像。 图10 改进后检测结果与其他图像对比 验证实验从MIT、Yale和FDDB人脸数据库中选取6 000个人脸样本。选取2万个非人脸样本。这些样本用于训练改进的AdaBoost人脸检测器。训练时,图像大小为20*20。在硬件为酷睿i7处理器,DDR3 16GB内存,MAC OS操作系统的MACBOOK PRO笔记本电脑和软件为matlab 2016b上进行编程,图11显示了算法在不同的人脸数据库中的检测效果,包括Yale、FDDB、MIT和混合数据。结果表明,该方法在不同数据集上的检测率均在90%以上。 图11 不同数据集上结果显示图 为了进一步比较提出的人脸检测方法的准确性。表1比较了传统的AdaBoost算法、基于YCbCr高斯模型和AdaBoost的人脸检测算法以及提出的人脸检测算法。 表1 算法对比结果 结果表明,与传统的AdaBoost算法相比,该方法的检测率提高了5.5%。与基于YCbCr高斯模型和AdaBoost的人脸检测方法相比,该方法的检测率提高了2.25%。在错误率方面,提出的方法比AdaBoost算法低7.65%,比基于YCbCr高斯模型和AdaBoost的方法低4.2%。 表2显示了在统一尺寸的视频流中,不同算法对人脸识别的精确度以及视频处理速度。从表中可以看出,相对于其他两种方法,该方法每秒能够读取12帧图片,处理视频的速度较快,尤其是相对于MTCNN算法,是其速度的4倍。同时在精确度方面,该算法的精确度较高,能达到94%左右,相对于DSST算法,精确度提高了将近10%。具有较好的精确度,能够满足日常的实际需求。 表2 算法时间对比结果 为了检验该算法的在复杂情况下(如光照不足或人脸较为模糊等情况),在此将该算法与其他类似的人脸检测算法进行对比,如Faceness-Net、SSH、ACF、Face R-CNN、DenseBox。整个实验对比结果如图12所示。 图12 复杂情况下人脸检测算法结果对比 从图12中可知,在此利用计算人脸框的位置与真实人脸之间的偏差距离,来表示人检测算法的效果。在这6种人脸检测算法中,在此提出的算法精确度较高,尤其是相对与ACF算法来说,精确度提高了70%。同时,还可以知道,欧氏距离在0~6时,精确度提高较大。相对于距离为0~6时,距离为6~20时,精确度增长缓慢。并且距离在2~4时,精确度增长最快。 提出了一种基于BP神经网络和改进的AdaBoost算法的人脸检测方法。首先,采用BP神经网络模型提取肤色。然后,采用改进的AdaBoost算法对提取的肤色区域进行准确的人脸检测。实验结果表明,与其它方法相比,该方法具有较高的精度和较低的误差率。今后的工作重点是保证高检测率,提高人脸检测效率。4 人脸检测结果和性能分析
5 结束语