《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于层次型AdaBoost检测算法的快速人脸检测在FPGA上的实现
基于层次型AdaBoost检测算法的快速人脸检测在FPGA上的实现
摘要: FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理,且有良好的并行性和可扩展性。因此,特别适用于人脸检测中多个窗口并行处理以及弱特征的并行运算。
关键词: FPGA 人脸检测
Abstract:
Key words :

人脸检测是指对于给定的图像或视频,判断其中是否存在人脸,如果存在,则进一步确定人脸的个数、具体位置以及大小的过程[1]。

    作为一个模式识别问题,人脸检验包含两个方面的内容,一是特征提取,二是分类方法设计。近年来,为更好地区分不同模式,出现了一些新的特征定义,使其便于特征提取[2]并拓展了特征库[3],而采用AdaBoost算法从弱特征中选取分类能力强的特征组成强分类器的方法来设计层次型分类器,可以很好地解决直立正面人脸检测问题[4]。

   FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理,且有良好的并行性和可扩展性。因此,特别适用于人脸检测中多个窗口并行处理以及弱特征的并行运算。

1 算法介绍

1.1 弱特征

   由于像素特征具有受尺度变化影响比较严重和不便于构建快速分类器的缺点,因此,为了更好地区分不同模式,本文采用区域面积来归一化特征,将特征定义为相邻矩形像素灰度均值之差,如式(1):

 

公式

 

  其中,II(x,y)为积分图像在点(x,y)处的值,I(x′,y′)为图像在点(x′,y′)处的值。

   采用面积来归一化,避免了对弱特征进行尺度放缩时引起的误差,并且减弱了光照对检测的影响。

1.1.1 弱特征库的建立

   为易于实现,本文采用一个包含九个区域的形状模板来统一表示像素特征,九个区域面积大小相同,但对模板区域而言,长宽可以不同。模板的九个区域有三种状态:1、0、-1,分别采用白、黑、灰来表示。在九个区域中,正特征集合定义为形状模板中白色区域组成的集合,负特征集合定义为形状模板中灰色区域组成的集合,黑色区域没有使用。

    考虑到特征的表示能力和运算速度,文中只选择了其中16种表示能力强且易于快速运算的形状作为弱特征库,16种形状模板如图1所示。

16种形状模板

1.1.2 弱特征值的快速计算

    为快速提取弱特征,将其转化为两个矩形区域的求取运算,以第13种弱特征为例,正负区域运算图如图2所示。先将负矩形合并为一个矩形,即图中A区域所示;然后求取九个区域的灰度和,即图中C区域像素灰度和,最后通过C和A求取B区域像素灰度和。根据式(2),可得sum(B)=sum(C)-sum(A)。特征区域面积也可以通过类似方法求取。根据式(1)可得到:

 

公式

 

其中Acr(A)、Acr(C)分别为区域A和区域C的面积。通过式(3)可快速求得任意微结构特征。

正负区域运算图

1.2 分类方法设计

    为了在检测率不变的条件下提高检测速度,本文采用层次型人脸检测器结构,如图3所示。该结构分为12层,每一层都是AdaBoost 算法训练得到的一个强分类器。经过阈值调整,使得每一层都能让几乎全部人脸样本通过,而拒绝很大一部分非人脸样本。这样,靠近前面的各层,采用少量的特征即可拒绝大部分的非人脸样本,而靠近后面的各层,需采用大量的特征来排除近似人脸的非人脸候选图像的干扰。

 

 

层次型人脸检测器结构

1.3 检测流程

    基于上述分析,判断一个人脸窗口的基本流程如图4所示。

判断一个人脸窗口的基本流程

检测流程:(1)读入取样窗口和弱特征信息,求出每层的若干微特征值;(2)将微特征值除以窗口的灰度方差,得到归一特征值(f),实现归一化处理;(3)读入此微特征训练所得的参数(m,r),将归一特征值进行处理:h=(f-m)/r;(4)输出h,从查找表中取出对应的函数值b;(5)将强分类器所包含弱分类器对应的输入值相加:a=Σb;并将a与当前层的阈值y比较;判断通过与否。

如此循环12次以检测出人脸。

2 硬件设计

    整个系统分为片内、片外两部分,系统结构如图5所示。其中,片外(即存储器,存储图像和参数);片内,即FPGA,由四部分组成:(1)预处理电路:计算积分图像,微特征对应的正负区域和采样窗口的灰度方差;(2)分类器:检测出人脸窗口;(3)窗口融合电路:融合邻近的人脸窗口;(4)控制电路:控制片内片外的数据传输及片内电路的时序。

系统结构

    本文在预处理电路、分类器和窗口融合电路三环节采用流水线技术,其中分类器是整个系统的技术瓶颈,决定了人脸检测的速度。因此,分类器的设计成为关键。

2.1 分类器结构

    分类器由若干弱分类器和外围电路构成,其内部结构如图6所示,其中每一个弱分类器(PE)内部结构如图7所示,PE每部分实现的功能分别是:模块A:计算该窗口的微结构特征值e;模块B:归一化处理微特征值e得f;模块C:得出该窗口微特征阈值b;控制电路:控制模块间的时序即PE内部与外部的数据交换。

内部结构

 

内部结构

该处理单元由两个32位除法器、一个32位乘法器、若干全加器和寄存器构成。而除法器和乘法器由移位电路实现,其结构(以除法器为例)如图8所示。

 

内部结构

2.2 弱分类器的组合

    分类器由若干弱分类器与控制电路组成,其中控制电路根据每一层参数来控制该层强分类器个数与每一强分类器所含弱分类器数。

    由训练得到一个包含12层共294个弱特征的分类器。因此,检测出一个人脸窗口,要通过294个弱特征处理单元运算。综合考虑时间和资源因素,弱分类器的组合采取一次处理多个窗口,分时复用硬件资源的方法。

    训练所得第n层强分类器所包含的弱特征个数如图9(a)所示。通过大量检测结果可得窗口通过率与层数n的关系如图9(b)所示。

弱分类器的组合

 

将层通过率与该层所含弱特征个数相乘,并乘以选定的一次处理窗口的数目(12),可得较为平滑曲线,如图10所示。

 

平滑曲线

 

从图9(b)可知前7层分类器已将绝大多数的非人脸窗口拒掉。因此,处理单元数目即由前几层中强分类器所含弱特征数与该层所处理的窗口数的乘积最大值决定,由图10可知处理单元数目为38。这样便可在较少资源的情况下大大提高检测速度。

另外,为降低一次同时处理两个临近人脸窗口的概率,本文预先改变了候选窗口输入次序。

3 实验结果

实验是对CMU-MIT测试库进行的,而训练时主要选用从Internet上收集得到的人脸图像共1000幅,通过对这1 000幅图像进行随机旋转、平移一个像素、随机镜像共得到5 000幅24×24像素的人脸训练样本。同时收集了1 600幅自然图片作为非人脸样本候选集。

输入图像为256×256像素,其检测效果如图11所示。对此种输入图像采用缩放因子的s=1.3,平移因子的d=2.5,搜索从30×30像素到255×255像素范围内的人脸。整个系统用VHDL语言描述,表1为所用硬件资源情况。

检测效果

 

 

硬件资源情况

 

其平均处理速度为17.3fps, 虚警率低于5E-7,检测率可达0.998。

文中新定义的微特征具有对于特征放缩时近似引入误差的鲁棒性,以及去光照影响的特性。此外,本文设计的特征模板,不仅扩展了微结构特征库,而且使用方便,可以根据需要选取合适特征。本文采用流水线技术将积分图像的计算与分类器运算并行,提高了弱特征提取速度。而在硬件实现时,利用软件训练与测试结果。综合速度和硬件资源两指标,在保证检测质量的前提下,设计最优的硬件结构,充分利用硬件资源。

此内容为AET网站原创,未经授权禁止转载。