电子科技大学学报  2015, Vol. 44 Issue (4): 589-593
AdaBoost人脸检测定点型优化算法    [PDF全文]
周振华    
河南省水文水资源局 郑州 450003
摘要:提出一种AdaBoost人脸检测的定点型优化算法,该算法以AdaBoost人脸检测原型算法为基础,分析了Cascade瀑布式级联分类器中弱分类器与强分类器分类计算的特点,有效分解了弱分类器与强分类器的计算过程,从而现实了强分类器与弱分类器相关模型参数有效分离标定。优化算法进一步利用图像积分图及弱分类器计算特点,完成对弱分类器计算过程及相关模型参数的定点型转化;同时,利用强分类器浮点的计算精度要求,完成强分类器计算过程及相关模型参数的定点型转化。该定点型AdaBoost人脸检测方法计算精度逼近原浮点型算法计算精度,保持了较高的人脸检测正确率,并利于后期的SIMD并行计算方法优化,同时,也利于算法在定点型嵌入式设备上的移植与优化。
关键词AdaBoost     人脸检测     图像积分图     强分类器     弱分类器    
Fixed-Point Optimization Algorithm of AdaBoost Face Detection
ZHOU Zhen-hua    
Hydrology and Water Resources Bureau of Henan Province Zhengzhou 450003
Abstract: A new fixed-point optimized algorithm for AdaBoost face detection is proposed. Based on the AdaBoost face detection prototype algorithm, the characteristics of classification calculation of the weak classifiers and strong classifiers in waterfall cascade classifier is analyzed, the computing process of the weak classifiers and the strong classifiers is effectively decomposed, and the effective separation and calibration of the model parameters of the strong classifiers and the weak classifiers are realized. By using integral image and the calculation characteristics of the weak classifier and according to the accuracy requirements of the floating point calculation of strong classifiers, the proposed algorithm realizes the classifier calculation and the transformation of related model parameters. The AdaBoost algorithm has the calculation accuracy approximate to that of the original floating-point algorithm and therefore maintains the higher accuracy of face detection, which will be beneficial for the optimization of SIMD parallel computing method and the transplantation and optimization of the algorithm in the fixed point type of embedded equipments.
Key words: AdaBoost     face detection     integral image     strong classifier     weak classifier    

人脸检测是人脸分析的首要环节,它确认当前图像(或视频)是否存在人脸,并对存在的人脸进行定位。人脸检测技术一直是模式识别和计算机视觉等领域的研究热点[1, 2, 3, 4, 5, 6],具有十分广泛的应用前景。在人脸检测研究领域,以文献[1]提出的AdaBoost算法为里程碑,使人脸检测技术走向实用[7, 8, 9]。AdaBoost人脸检测算法与以往的人脸检测算法相比具有较高检测精度及较小的计算量,已成为许多实时系统的首选算法[10, 11]。但由于该算法存在较多浮点运算,在许多浮点计算能力较弱的嵌入式系统中,检测实时性仍然达不到要求。本文提出AdaBoost人脸检测的定点型优化算法,将算法中所有浮点运算转化为定点运算,从而提高算法的检测性能。

1 AdaBoost人脸检测算法

文献[1]提出的AdaBoost人脸检测算法是原型算法,其算法流程为:对当前图像以一定缩小比例进行缩小,直至接近24x24,并用各图像组成金字塔形图像集合,在所有图像集合中,以一定步进规则,按24x24大小,使用AdaBoost算法搜索人脸图像,如搜索到人脸图像,标定人脸位置,并记录所在的金字塔图像及缩小比例,所有图像搜索完毕后,按记录位置及缩小比例换算到与原始图像大小对应的位置,该位置即为检测到的人脸位置。图 1为基于AdaBoost算法的人脸检测流程。图 2为用缩放算法得到的金字塔图像集合。

图1基于AdaBoost算法的人脸检测流程

图2用缩放算法得到的金字塔图像集合

人脸检测算法流程中,AdaBoost人脸检测器是最关键的部分,由积分图像计算、归一化均值及均方差检测、Harr特征计算和瀑布式级联分类器组成。

积分图像及平方积分图是对图像内一点A(x,y),定义其积分图为:

${\rm{ii(}}x,y{\rm{)}} = \sum\limits_{x' \le x,y' \le y} {{\rm{ii(}}x',y'{\rm{)}}} $ (1)
式中,${\rm{ii(}}x',y'{\rm{)}}$为点${\rm{(}}x',y'{\rm{)}}$处的“原始图”,即Y分量,其值为0~255。

对于图像内一点A(x,y),定义其平方积分图为:

${\rm{i}}{{\rm{i}}^{\rm{2}}}{\rm{(}}x,y{\rm{)}} = \sum\limits_{x' \le x,y' \le y} {{\rm{i}}{{\rm{i}}^{\rm{2}}}{\rm{(}}x',y'{\rm{)}}}$ (2)

积分图像和平方积分图像均由迭代方法求出。

1.1 Harr特征计算

利用积分图像计算5种Harr特征,分别如图 3a~图 3e所示。

类型0计算方法:

BCEF-ABDE=(B+F-C-E)-(A+E-B-D)=
D+F-A-C+2(B-E)
类型1计算方法
BCEF-ABDE=(B+F-C-E)-(A+E-B-D)=
D+F-A-C+2(B-E)
类型2计算方法:
CDGH+ABEF-2BCFG=ADEH-3BCFG=
A+H-D-E+3(C+F-B-G)
类型3计算方法:
CDGH+ABEF-2BCFG=ADEH-3BCFG=
A+H-D-E+3(C+F-B-G)
类型4计算方法:
ABDE+EFHI-BCEF-DEGH=
A+E-B-D+E+I-H-F+E+G-D-H+E+C-B-F=
4E-2(B+D-H-F)+A+C+G+I

图35种Harr特征
1.2 瀑布式级联分类器

瀑布式级联分类器由机器学习训练得到,其级联形式如图 4所示,包含数级强分类器(节点分类器),每级强分类器又包含不同级数的弱分类器。所选取的Harr特征先进行弱分类器分类,分类结果经强分类器加权求和得到该级强分类器的分类结果。如不是人脸,将退出,并做出“不是人脸”的判断;如是人脸,将进入下一级分类器再进行分类判断,直至完成所有分类器的分类判断,即所有强分类器均判定为人脸,则瀑布式级联分类器做出最终判断“该区域为人脸”。

一个弱分类器$h{\rm{(}}x,\,f,p,s,\theta {\rm{)}}$由特征f、阈值q和指示不等号方向的p组成,弱分类器的分类结果为:

$h{\rm{(}}x,\,f,p,s,\theta {\rm{) = }}\left\{ \begin{array}{l} {\rm{1}}\quad \quad pf{\rm{(}}x{\rm{)}} < ps\theta \\ {\rm{0}} 其他\quad \quad \;\quad \end{array} \right.$ (3)
式中,
$s = \sqrt {\frac{{{\rm{sq}}}}{{{\rm{pad}}}} - {{\left( {\frac{{{\rm{me}}}}{{{\rm{pad}}}}} \right)}^2}} $ (4)
式中,
${\rm{ii(}}x + 24,y{\rm{)}} - {\rm{ii(}}x,y + 24{\rm{)}}$ (5)
$[{\rm{sq}} = {\rm{i}}{{\rm{i}}^2}{\rm{(}}x + 24,y + 24{\rm{)}} + {\rm{i}}{{\rm{i}}^2}{\rm{(}}x,y{\rm{)}} - $ ${\rm{i}}{{\rm{i}}^2}{\rm{(}}x + 24,y{\rm{)}} - {\rm{i}}{{\rm{i}}^2}{\rm{(}}x,y + 24{\rm{)}}$ (6)
图4基于AdaBoost算法的级联式人脸检测器

$h{\rm{(}}x,\,f,p,s,\theta {\rm{)}}$为在选定Harr特征条件下,弱分类器的分类结果,其利用大量样本进行训练,并使该弱分类器的最小错误率${\alpha _t}$最小。上述参数中,f(x)为选定的Harr特征,参数θp为训练该弱分类器得到的参数;me、sq为积分图和平方积分图的计算结果,为整型;sθ均为浮点数;p指示不等号方向,为整型数。

强分类器利用若干个弱分类器进行分类,强分类器可表示为:

$c{\rm{(}}x{\rm{)}} = \left\{ \begin{array}{l} 1\quad \quad \sum\limits_{t = 1}^T {{\alpha _t}{h_t}{\rm{(}}x{\rm{)}} \ge \alpha {\rm{\_th}}} \\ 0 其他 \quad \quad \quad \quad \end{array} \right.$ (7)
其中,
${\alpha _t} = {\rm{log}}\frac{1}{{{\beta _t}}}$ (8)
${\beta _t} = \frac{{{\varepsilon _t}}}{{1 - {\varepsilon _t}}}$ (9)
式中,ht(x)为弱分类器的分类结果;${\alpha _t}$为对应强分类器的模型参数;a_th为该强分类器阈值。${\alpha _t}$和a_th均通过大量样本训练得到,为浮点数。

从上面AdaBoost人脸检测算法的计算过程可以看出,积分图像、平方积分图像、Harr特征的计算由于是利用所选的24x24的灰度图像作为输入进行计算,而灰度图像通常以整型数表示(0~255),所以以上计算结果也可用整型数表示,不存在计算误差。

在瀑布式级联分类器中,对弱分类器和强分类器的训练均是以分类器的最小错误率${\beta _t}$达到最小的方式,对分类器进行训练,而${\beta _t}$为浮点数,通常 ${\beta _t}$≤0.5,因此,弱分类器和强分类器的模型参数sθ、${\alpha _t}$>和a_th均为浮点数。通常,为保证检测正确率,需训练较大规模的瀑布式级联分类器,如设计的级联分类器包含数个强分类器,呈级联形式;每级强分类器又包含多个弱分类器。因此,分类器模型参数sθ、${\alpha _t}$ 2 AdaBoost人脸检测定点型算法优化

本文根据级联分类器计算特点提出一种浮点计算转化为定点计算的方法。该方法在保证计算精度的前提下,主要对弱分类器和强分类器的模型参数sθ、${\alpha _t}$和a_th进行浮点数转化为32位整型数,并将相关运算由浮点运算转化为定点运算,同时,避免除法运算。

2.1 模型参数分离及部分参数的独立标定

弱分类器的计算过程如式(3)所示,强分类器的计算过程如式(7)所示。

强分类器是依据弱分类器的结果进行分类计算,注意到ht(x)的取值为1或0,即弱分类器中f(x)、sq的计算并不会直接引入到强分类器的计算中。因此,弱分类器模型参数的整型化与计算的定点化可与强分类器的整型化与计算的定点化可分别独立进行,采用不同的方案,有利于保持各部分的定点化计算精度。

2.2 弱分类器模型参数的整型化与计算的定点化

该部分需完成模型参数θ的整型化及弱分类器计算的定点化。

由式(3)有$pf{\rm{(}}x{\rm{)}} < ps\theta $,其中f(x)为Harr特征,由积分图像计算获得,积分图像为32位整型数,因此,f(x)也为32位整型数;p指示不等号方向,为整型数,取1或-1; sθ为浮点数,可认为$ps\theta $结果为两个浮点数之积,也为浮点数。考虑一个整型数与一个浮点数进行比较,即$pf{\rm{(}}x{\rm{)}} < ps\theta $,则对进行ceil上取整运算即可保持计算精度,即pf(x)<p× ceil(sθ);由于s<1,-195.095 001θ224.759 003,所以有:

p(f(x)<<4)<p(ceil(s)×(ceil(θ)<<4))

即对于弱分类器模型参数定点化处理为:

θint=(ceil(θ))<<4
2.3 强分类器模型参数的整型化与计算的定点化

该部分需完成模型参数${\alpha _t}$和a_th的整型化及强分类器计算的定点化计算。

强分类器的计算过程如式(7)所示,由于ht(x)取值为1或0,而:

${\alpha _t} = {\rm{log}}\frac{{{\rm{1}} - {\varepsilon _t}}}{{{\varepsilon _t}}} = - {\rm{log}}{\varepsilon _t}$ (10)

当取${\beta _t}$=0.000 1时,即表示正确检测率为99.99%,${\alpha _t}$=4,所以,可以近似估计$0 < {\alpha _t} < 10$。通常${\alpha _{{\rm{th}}}} = \frac{1}{2}\sum\limits_{t = 1}^T {{\alpha _t}} $,T=200,则$0 < {\alpha _{{\rm{th}}}} < 2\;000$。因此,模型参数${\alpha _t}$和a_th的整型化方法为:

at_int=(int)(at×1 000 000)<232

ath_int=(int)(ath×1 000 000)<232

3 优化算法流程

按照AdaBoost人脸检测算法构建算法流程,完成瀑布式级联分类器的设计及相关参数的训练,并实现AdaBoost人脸检测算法原型。本文采用的AdaBoost人脸检测分类器由22级强分类器级联而成,遵循图 3所示的分类原则。每级强分类器包含若干级弱分类器,各强分类器包含弱分类器的级数分别为:7,15,30,30,50,50,50,100,120,140,160,180,200, 200,200,200, 200,200,200,200,200,200,共计2 932个弱分类器。具体步骤如下:

1) 对AdaBoost人脸检测算法相关参数进行分类。

根据AdaBoost人脸检测器中分类器的计算特点,对强、弱分类器参数进行分类,并独立进行浮点型参数的整型化处理。因此,强分类器相关参数为${\alpha _t}$和a_th;弱分类器参数为θp;相关计算量为s。在算法实现程序中,对相关参数做如下定义。

弱分类器:long f1_int:Harr特征值;unsigned longex_int:积分图值me;unsigned longsq_int:平方积分图sq;long sq_long_sqrt:平方根积分图;long s_thresh:弱分类器阈值。

强分类器:long ac_alphas:强分类器模型参数;longac_thresh:强分类器阈值;long value_int:级联分类器模型参数的累加值。

2) 对瀑布式级联分类器中弱分类器参数及运算进行定点化转换。

在AdaBoost人脸检测算法原型中,可得到Harr特征f1_int取值范围为1 175 040~1 175 040;弱分类器θ参数取值范围为-195.095 001≤θ≤224.759 003。

对弱分类器的参数的整型化处理及计算的定点化处理主要表现为对式(11)的处理,有:

$f{\rm{(}}x{\rm{)}} < s\theta $ (11)

按上文2.2中优化方法完成对q参数的整型化处理,即:θint=(ceil(θ))<<4,整型化处理共涉及2 932个参数,则有:

${\rm{(}}f{\rm{(}}x{\rm{)}} \ll 4{\rm{)}} < s{\theta _{{\rm{int}}}}$ (12)
式中,

$s = \sqrt {\frac{{{\rm{sq}}}}{{{\rm{pad}}}} - {{\left( {\frac{{{\rm{me}}}}{{{\rm{pad}}}}} \right)}^2}} \quad \quad {\rm{psd}} = 625$ (13)

针对pad参数,取624对625逼近,注意:624= 16x39,选择16的主要原因为方便快速计算,有:

$s = \sqrt {\frac{{{\rm{sq}}}}{{{\rm{pad}}}} - {{\left( {\frac{{{\rm{me}}}}{{{\rm{pad}}}}} \right)}^2}} \quad \quad {\rm{psd}} = 624$ (14)

s的计算转化为:

$39 \times s = \sqrt {\left( {\frac{{{\rm{sq}} \times 39}}{{16}}} \right) - {{\left( {\frac{{{\rm{me}}}}{{16}}} \right)}^2}}$ (15)

则最后的整型化计算式为:

${\rm{((}}f{\rm{(}}x{\rm{)}} \times 39{\rm{)}} \ll 4{\rm{)}} < S{\theta _{{\rm{int}}}}$ (16)

3) 对瀑布式级联分类器中强分类器相关参数及运算进行定点化转换。

对强分类器相关参数${\alpha _t}$和a_th进行整型化处理;按上文2.3中的优化方法,取${\alpha _t}$=10,即表明弱分类器检测正确率为99.999 999 99%,为非常高的检测正确率,因此,可以选择:

${\alpha _{t\_{\rm{int}}}}$=(int)(${\alpha _t}$×1 000 000)

该${\alpha _{t\_{\rm{int}}}}$参数整型化处理共涉及2 932个参数;同样,可以选择:

$\alpha \_{\rm{t}}{{\rm{h}}_{{\rm{int}}}}$=(int)(a_th×1 000 000)

该$\alpha \_{\rm{t}}{{\rm{h}}_{{\rm{int}}}}$参数整型化处理共涉及22个。

4 实验结果

根据上文所述,完成了对原AdaBoost人脸检测浮点算法的定点型优化,并与原浮点算法进行检测效率评测实验,实验平台为Ti DM648@900 MHz,相同编译环境完成算法代码编译,采用相同的待检测图像,图像大小为352x288,进行全图像区域检测,统计出检测出图像中所有人脸所需时间。

图5人脸检测效率测试图

图 5a待测图像,原浮点算法完成人脸检测时间为565.952 ms,定点型优化算法完成人脸检测时间为171.563 ms,约为原浮点算法计算时间的30.31%;图 5b待测图像,原浮点算法完成人脸检测时间为720.981ms,定点型优化算法完成人脸检测时间为203.708 ms,约为原浮点算法计算时间的28.25%。

图6单人脸对比检测测试图

使用图 6进行单人脸对比检测测试,采用文献[6]方法与本文方法进行对比测试。对于单人脸图像(320x240),文献[6]方法检测时间约为40 ms,文献[6]也对经典AdaBoost检测进行实验,检测时间约为67 ms,本文也对经典AdaBoost检测算法进行了验证,与文献[6]所述检测时间接近,检测时间约为70 ms;采用本文方法进行单人脸检测,检测时间约为22 ms,约为AdaBoost经典方法检测时间的30%。与文献[6]的改进AdaBoost人脸检测算法相比,检测时间约为50%。

以上实验表明,本文定点优化算法人脸检测耗时约为原浮点算法的30%左右。

5 结 束 语

本文从AdaBoost人脸检测原型算法出发,提出一种原型算法的定点型优化方法,从AdaBoost人脸检测算法的瀑布式级联分类器入手,分析了强分类器及弱分类器的计算特点,对各自计算过程进行分解,实现了强、弱分类器相关参数的有效分离,即可独立进行定点型标定;再利用图像积分图计算特点,完成弱分类器相关浮点参数的定点处理;最后,利用强分类器浮点运算特点及计算精度要求完成强分类器计算过程及相关模型参数的定点型转化。实验证明,该方法在保持原浮点型算法检测正确率的基础,实现了算法的定点型处理优化。经实验测试,优化算法计算耗时约为原浮点算法的30%左右,有效地提高了检测算法的实时性能,并利于后期的SIMD优化。

参考文献
[1] VIOLA P, MICHAEL J. Rapid object detection using a boosted cascade of simple features[C]//Proceedings of IEEE Conference on Computer Vision and Pattern Recognition. Kauai, Hawaii, USA: IEEE, 2001.
[2] KEARNS M, VALIANT L G. Learning boolean formulae for finite automata is as hard as factoring[R]. Cambridge: Aiken Computation Laboratory, Harvard University, TR-1488, 1998.
[3] ABDEL-MOTTALEB M, ELGAMMAL A. Face detection in complex environments from color images[C]// Proceedings of IEEE Conference on Image Processing. [S.l.]: IEEE, 1999, 3: 622-626.
[4] KARLEKAR J, DESAI U B. Finding faces in color images using wavelet transform[C]//Proceedings of IEEE Conference on Image Analysis and Processing. Venice, Italy: IEEE, 1999: 1085-1088.
[5] ZHANG Z Q, ZHU L, LI S Z, et al. Real-time multi-view face detection[C]//Proceedings of The 5th International Conference on Automatic Face and Gesture Recognition. Washington, DC, USA: [s.n.], 2002.
[6] 索璐静, 陆小锋, 陆亨立, 等. 实时视频中的快速人脸检测方法[J]. 计算机工程, 2011, 37(20): 166-168.SUO Lu-jing, LU Xiao-feng, LU Heng-li, et al. Fast face detection method in real-time video[J]. Computer Engineering, 2011, 37(20): 166-168.
[7] 刘晓克, 孙燮华, 周永霞. 基于新Haar-like特种的多角度人脸检测[J]. 计算机工程, 2009, 35(19): 195-197.LIU Xiao-ke, SUN Xie-hua, ZHOU Yong-xia. Multi-angle face detection based on new Haar-like feature[J]. Computer Engineering, 2009, 35(19): 195-197.
[8] 唐奇, 苏光大. 基于AdaBoost算法的硬件实时人脸检测[J]. 计算机工程, 2008, 34(7): 248-250.TANG Qi, SU Guang-da. Real time hardware face detection based on AdaBoost algorithm[J]. Computer Engineering, 2008, 34(7): 248-250.
[9] 徐建军, 张蓉, 毕笃彦, 等. 一种新的AdaBoost视频跟踪算法[J]. 控制与决策, 2012, 27(5): 681-685.XU Jian-jun, ZHANG Rong, BI Du-yan, et al. An new AdaBoost video tracking algorithm[J]. Control and Decision, 2012, 27(5): 681-685.
[10] 张彦峰, 何佩琨. 一种改进的AdaBoost算法——M-asy AdaBoost[J]. 北京理工大学学报, 2011, 31(1): 64-68, 73.ZHANG Yan-feng, HE Pei-kun. A revised AdaBoost algorithm—M-asy AdaBoost[J]. Transactions of Beijing Institute of Technology, 2011, 31(1): 64-68, 73.
[11] 姚旭, 王晓丹, 张玉玺, 等. 基于AdaBoost和匹配追踪的选择性集成算法[J]. 控制与决策, 2014, 29(2): 208- 214. YAO Xu, WANG Xiao-dan, ZHANG Yu-xi, et al. Selective ensemble algorithm based on AdaBoost and matching pursuit[J]. Control and Decision, 2014, 29(2): 208-214.