基于OpenCV的实时人脸检测算法研究
2018-07-18胡丽清李启明
胡丽清,李启明
(上海海事大学信息工程学院,上海 201306)
0 引言
人脸检测于20世纪70年代开始研究,前期的研究主要是为了人脸识别而服务,后来随着人脸检测技术的发展,人脸检测独立成为一个研究课题,研究人员也越来越多,技术也逐步成熟。
目前主流的人脸检测技术主要有两种:基于Ada-Boost算法的人脸检测和基于深度学习[1]的人脸检测[2],基于AdaBoost的人脸检测算法由Viola[3]和Jones在2001年提出,并应用于人脸检测中,其算法由于结果简单,检测率高、误检率低而被广泛使用。但是基于Haar特征+AdaBoost人脸检测算法仍有许多不足之处[4],如训练分类器的时间较长,人脸检测时间无法达到实时性要求等问题。随后人们为了改进Haar特征,提出Haar-T[5]特征来进行人脸检测,人脸检测的正确率提高,但人脸检测仍不能达到实时人脸检测。后来人们为了降低人脸检测的时间消耗,提出新的人脸图像特征LBP特征,LBP是一种被用于来描述图像局部纹理特征信息的算子。该算子是1994年Ojala,M.Pietikäinen[6],和D.Harwood提出的,LBP特征由于具有旋转不变性和灰度不变性的优点[7],从而被广泛被用于提取图像特征来进行目标检测。2002年,Mottaleb[8]等人采用YCbCr[9]肤色模型来进行人脸检测加速。2007年中科院对LBP特征进行改进,发明MB_LBP特征[10]用于目标检测,并取得了不错的成绩,不过还是很难达到实时检测。后来随着硬件的快速发展,人们对深度学习的认识,网络的层数越来越深,比较代表的网络又Fast-RCNN、Alex-NET等。人们开始将深度学习应用于人脸检测当中,并取得了不错的成绩。2016年OpitzM[11]等人将输入的人脸照片分成多个窗口输入到卷积神经网络,并计算每个窗口输入的误差,从而实现了基于卷积神经网络人脸检测对部分遮挡人脸具有很好的鲁棒性。后面随着网络的层数变得更深,人脸检测的效果也变得更好,2017年,董兰芳[12]等人把Fast-RCNN[13]网络应用在人脸检测中。该方法对复杂光照、部分遮挡、人脸姿态变化具有鲁棒性,在非限制性条件下具有出色的人脸检测效果[14]。但是基于深度学习的人脸检测的问题主要是训练模型的时间很长,对硬件要求很高,需要大量的GPU来进行加速,而且网络中间的隐层复杂。
本文综合考虑到人脸检测训练时间和检测时间的大小,并对于同样一张图片24×24,Haar特征数量远远大于MB_LBP特征[15],因此为了克服OpenCV中训练分类器时间过长,并能达到实时人脸检测的要求,分类器的设计采用了MB_LBP特征和AdaBoost算法来训练分类器,并为了达到实时的人脸检测的要求,采用图像金子塔法和肤色提取的方法减少输入图像的数据量和限定分类器滑动窗口的范围,从而达到实时人脸检测。
1 实时人脸检测
本文为了提高Haar特征人脸检测的正确率和解决实时人脸检测的问题,采用改进的LBP特征,MB_LBP特征来提取人脸图像并构成分类器,通过图像金字塔和肤色提取来对输入图像进行一系列的预处理操作,从而达到实时的人脸检测,其系统流程图如图1所示。
图1 人脸检测流程图
由图1可知,本文主要的工作是对待测图像进行预处理操作和分类器的设计。图像预处理有图像金字塔、均衡化、肤色提取等;分类器的设计采用的方法是MB_LBP特征+AdaBoost算法。
1.1 图像的预处理
在人脸检测中,有效图像的预处理不仅可以提高人脸检测正确率,还可以极大地缩减检测时间。本文为了减小检测时间,采用高斯图像金子塔法来减少输入图像的数据量,并通过肤色提取来减少人脸检测时窗口滑动的范围来降低检测时间。
(1)图像金字塔
图像金字塔对图像处理有两种方式,高斯金字塔是对图像进行向下采样处理,拉普拉斯金字塔则是对图像进行重构。本文则是利用高斯金字塔,通过高斯平滑的方法对图像进行滤波使其图像的尺寸减少。图像向下采样过程要注意的采样程度要适中,过大会导致检测时间不能降低,图像太小,则人脸检测的正确率会减少。本文针对加州理工大学提供的人脸数据集进行测试,综合考虑检测正确率和实时性,确定将图像向下采用,图像尺寸为(320,240)最好。
(2)肤色提取
本文为了进一步减少检测时间,采用肤色提取来初步检测人脸范围,并输入人脸检测的分类器来进行检测。本文考虑到肤色模型YCbCr[16]模型亮度与色度是独立存在,易于分离。肤色提取的方法采用的是YCbCr模型来提取人脸范围。其中RGB图像转YCb-Cr图像如式(1)所示:
本文为了克服不同图片亮度的影响,将肤色提取固定阈值法进行改进,采用了动态阈值法,阈值计算如下:
设图像的像素数为N,图像的灰度范围为[0,L-1],ni表示灰度级i的像素数,pi为灰度级i的概率。则表达式为:
用阈值K把图像的像素分成两类,像素灰度值小于K的为背景类为C0,大于为目标类C1。
从而得出两部分C0与C1两部分的均值U0,U1:
其中 w0、w1为目标类 C0、C 的概率:
从而得出整幅图像的均值:
由均值从而得出方差:
K值从0-255变化,通过上式计算的方差的最大值为最佳阈值分割,肤色提取效果如图2中b图所示。
图2 肤色提取图
后面为了消除噪声带来的误差,采用形态学膨胀的操作来进行处理,效果如图3中b图所示,输入图像如图3中c图所示。
图3 膨胀操作
1.2 分类器设计
本文分类器的设计是利用的方法是AdaBoost+MB_LBP,特征计算的方法采用积分图的方式进行加速。
(1)AdaBoost算法
AdaBoost算法是一种自适应的迭代算法,其算法原理如下:
1)给定训练样本集 S,(X:正样本;Y:负样本)T 为训练的最大循环次数:
权重w1,i的第一个参数表示第几轮迭代计算,第二个参数表示第几个样本。
3)迭代计算:
①训练样本的概率分布相当下,训练弱分类器:
上式表明,第m次迭代计算得到的分类器,样本分成两种,-1和+1。其误差和权重计算如下:
②计算弱分类器的错误率,使得误差最小:
③计算该分类器的权重:
由该式子可知,误差越小,分类器的权重越大。
④更新样本权重分布:
每个样本的权重计算如下:
Zm为规范化因子,其计算过程如下:
迭代计算完成,组合成弱分类器f(x):
经T次循环后,得到T个弱分类器,按更新的权重叠加,最终得到的强分类器。
sign为符号函数,因此最后强分类器输出的结果为0或者为1。
(2)MB-LBP特征
MB_LBP特征又叫块状LBP特征,是LBP特征的改进版,LBP特征的编码方式如图4所示:
图4 LBP编码过程
由图可知,每个图像的3×3的区域为一个LBP特征,其值为8位二进制编码,如上图所示,其编码之后特征值为126,而MB_LBP特征则是是由九个LBP特征组成,即图5中一个gi代表一个LBP特征,MB_LBP特征的计算公式见式(20)。
图5 MB_LBP特征
gi代表每个3×3的子区域的平均灰度值,s(x)是符号函数。图6中b图为整张人脸图片计算得到的MB_LBP特征值。
图6 人脸图像特征MB_LBP
由图可知,MB_LBP特征很好地描述图像的纹理信息,并对图像的边缘、拐点、平坦区域都有很好的描述。
(3)分类器的训练
由MB_LBP特征值得定义可知,特征值一共有28=256种情况。因此在此,本文采用多分支树来作为本文的弱分类器,每个分支对应MB_LBP特征值,如式(21)所示:
Xi表示第X个样本第i个 MB_LBP特征,由式(16)得到。aj表示相应的判决系数,计算公式如公式(22)所示。
Yi表示训练样本,1代表正样本,-1为负样本,由此可知ai大于0则表示特征值为j的正样本的可能性比较大。因此可设定阈值T来判别人脸。则分类器的训练步骤如下:
对于给定的样本,初始化权重wi=1/2N(N=(p,q)为正负样本数量)。
迭代计算找到最优弱分类器f(x),使得误差最小。
输出强分类器:
2 实验结果分析
本次实验的硬件平台为Intel i5-5200U CPU@2.20GHz、8GB 内存,软件平台为 Win7、OpenCV3.2+VS2015。选取的数据集测试数据集CMU+MIT、网络下载和实际采集的照片,每张照片上的背景、表情、光照亮度以及人脸个数皆不一样。实验中视频来源为实验室同学拍摄。
2.1 分类器训练时间分析
本文用于训练分类器的样本包括13000正样本,13000负样本,采用Haar特征训练分类器耗时18d11h23min,而采用 MB_LBP特征训练则耗时为10d5h26min。
通过分析可知,对于同样的训练样本大小(20×20),Haar特征数量为45891,而MB_LBP特征数量则为2049,因此训练分类器的时间大大减少。
2. 2 人脸检测的正确率分析
为了对比本文算法在人脸检测的中准确率,选取数据集CMU+MIT部分照片(4000张)来进行测试。其实验结果如表1所示:
表1 人脸检测算法性能对比
由表1可见:经过肤色提取后,检测的正确率和效率都会得到提高。关于人脸图像的描述能力,特征Haar<MB_LBP。这是因为MB_LBP特征有256种,而常见的Haar特征种类偏少,因此对图像的描述能力较差。也正是由于MB_LBP特征种类很多,因此人脸特征描述地更加准确,因此误检率较低。
2.3 人脸检测的实时性分析
本文在测试人脸检测时间上,选取数据集CMU+MIT部分照片(1000张),进行测试,其实验结果如下表所示:
表2 人脸检测时间对比
由表2可知,本文算法由于采用图像金字塔和肤色提取,人脸检测时间大大降低,可以达到实时人脸检测的效果。
本文为了进一步证明实时人脸检测,将本文基于图片的人脸检测改成基于视频的人脸检测。部分视频帧检测效果如图7所示。
图7 视频部分帧检测效果
本文由于采用的是MB_LBP特征,因此对旋转角度人脸也有很好的鲁棒性,本文对人脸四个不同方向的旋转人脸进行检测,以及多人脸照片进行检测。旋转人脸照片如图8所示,多人脸检测照片如图9所示。
图8 旋转人脸检测效果
图9 多人脸检测
3 结语
本文提出了一种基于OpenCV实时人脸检测。通过采用MB_LBP特征来替换传统的Haar特征训练分类器,来降低分类器的训练时间,并在输入图像后采用图像金字塔向下采样减少输入分类器的数据量和肤色提取来减少分类器滑动窗口滑动的范围,从而极大程度降低检测时间。本文实验证明,本文人脸检测算法,不仅可以提高人脸检测的正确率,还能达到实时的人脸检测,并对旋转人脸检测具有鲁棒性。