基于FPGA的Haar特征多处理架构人脸检测系统及检测方法与流程

文档序号:12126050阅读:317来源:国知局
基于FPGA的Haar特征多处理架构人脸检测系统及检测方法与流程

本发明属于数据人脸特征检测技术领域。



背景技术:

人脸检测在许多应用,如识别,监控,视频会议和相机自动对焦等中发挥重要作用。由于计算机视觉领域的大量工作,使得人脸检测算法发展迅速以达到实时检测的程度。Viola和Jones在文献提出了一种基于机器学习的方法,能够在保持精准度的同时实现比较高的帧速。然而,该算法相对于传统处理器(特别是在嵌入式平台上)太慢。



技术实现要素:

本发明是为了解决现有人脸特征检测算法复杂,处理器运算速度慢的问题,提出了一种基于FPGA的Haar特征多处理架构人脸检系统。

本发明所述的基于FPGA的Haar特征多处理架构人脸检测系统,它包括图像存储模块1、积分图像生成器2、分类器3和检测窗口缩放模块4;

图像存储模块1用于提取摄像机采集图像中n×n的范围检测窗口内的haar特征,利用haar特征提取人脸特征,并利用人脸特征计算人脸特征每个像素点坐标;并将计算获得的人脸特征每个像素点坐标发送出去;其中n为正整数;

积分图像生成器2用于接收人脸特征每个像素点坐标,根据人脸特征每个像素点坐标利用积分图法,计算人脸特征值;并将计算获得的人脸特征值P发送出去;

分类器3接收并存储人脸特征值信息,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P,当人脸特征值P的个数大于B时,令m=m+1,人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P;直至人脸特征值P的个数小于B时,停止进行比较,并对比较后获得的人脸特征值P进行输出,完成基于FPGA的Haar特征多处理架构人脸检测;其中,A、m、P、B均为正整数;

检测窗口缩放模块4用于判断n×n的范围检测窗口的尺寸是否覆盖摄像机采集图像,若是,完成人脸特征的检测,将特征训练数据器33输出的人脸特征值P进行输出,完成人脸特征的检测,否则令n=n×a,向图像帧缓存器11发送提取摄像机采集图像中n×n的范围检测窗口内的haar特征驱动信号,其中,a为大于1的整数。

进一步地,图像存储模块1包括图像帧缓存器11和地址发生器12,

图像帧缓存器11用于提取摄像机采集图像中n×n的范围检测窗口内的haar特征,利用haar特征提取人脸特征;并将提取的人脸特征信息发送出去;

地址发生器12用于接收人脸特征信息,并将接收的人脸特征信息存储为二维阵列,利用像素地址=(y*w+x),计算人脸特征每个像素点的坐标(x,y),其中,w是积分图图像的宽度,并将计算获得的人脸特征每个像素点坐标发送出去。

进一步地,分类器3包括特征分类器31、阶段比较器32和特征训练数据器33;

特征分类器31用于接收并存储人脸特征值信息,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P,将大于特征阈值A×m的人脸特征值P发送出去;其中,m=1;

阶段比较器32用于接收当m=2时,大于特征阈值A×m的人脸特征值P,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P,将大于特征阈值A×m的人脸特征值P发送出去;其中,m=2;

特征训练数据器33用于接收当m=2时,大于特征阈值A×m的人脸特征值P,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P,当人脸特征值P的个数大于B时,令m=m+1,人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P;直至人脸特征值P的个数小于B时,停止进行比较,并对比较后获得的人脸特征值P进行输出,获得检测窗口内的人脸特征,其中,m>2;

检测窗口缩放模块4用于判断n×n的范围检测窗口的尺寸是否覆盖摄像机采集图像,若是,完成人脸特征的检测,将特征训练数据器33输出的人脸特征值P进行输出,完成人脸特征的检测,否则令n=n×a,向图像帧缓存器11发送提取摄像机采集图像中n×n的范围检测窗口内的haar特征驱动信号,其中,a为大于1的整数。

基于FPGA的Haar特征多处理架构人脸检测方法,该方法的具体步骤为:

提取摄像机采集图像中n×n的范围检测窗口内的haar特征,利用haar特征提取人脸特征,并利用人脸特征计算人脸特征每个像素点坐标;并将计算获得的人脸特征每个像素点坐标发送出去的步骤;其中n为正整数;

用于接收人脸特征每个像素点坐标,根据人脸特征每个像素点坐标利用积分图法,计算人脸特征值;并将计算获得的人脸特征值P发送出去的步骤;

接收并存储人脸特征值信息,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P的步骤;该步骤中,当人脸特征值P的个数大于B时,令m=m+1,人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P;直至人脸特征值P的个数小于B时,停止进行比较,并对比较后获得的人脸特征值P进行输出,完成基于FPGA的Haar特征多处理架构人脸检测的步骤;其中,A、m、P、B均为正数;

用于判断n×n的范围检测窗口的尺寸是否覆盖摄像机采集图像的步骤,该步骤中,判断结果若为是,完成人脸特征的检测,将特征训练数据器33输出的人脸特征值P进行输出,完成人脸特征的检测,否则令n=n×a,向图像帧缓存器11发送提取摄像机采集图像中n×n的范围检测窗口内的haar特征驱动信号。

本发明提出了一种基于FPGA的Haar特征多处理架构人脸检测系统,可以利用多个专用处理器单元算法中固有的并行性,对一张人脸进行多重检测,在后处理阶段将重复检测的结果进行组合,来提高基于Haar特征的人脸检测速度,达到实时检测的目的。

附图说明

图1为本发明所述基于FPGA的Haar特征多处理架构人脸检测系统的原理框图;

图2为具体实施方式一所述的人脸检测系统中内部处理单元原理框图;

图3为检测窗口在整个图像上滑动寻找人脸的示意图;

图4为一个检测窗口内Haar特征的结构示意图;

图5(a)为边缘Haar特征的结构示意图;

图5(b)为线Haar特征的结构示意图;

图5(c)为特定方向Haar特征的结构示意图;

图6为区域D像素和示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

具体实施方式一、结合图1说明本实施方式,本实施方式所述的基于FPGA的Haar特征多处理架构人脸检测系统,它包括图像存储模块1、积分图像生成器2、分类器3和检测窗口缩放模块4;

图像存储模块1用于提取摄像机采集图像中n×n的范围检测窗口内的haar特征,利用haar特征提取人脸特征,并利用人脸特征计算人脸特征每个像素点坐标;并将计算获得的人脸特征每个像素点坐标发送出去;其中n为正整数;

积分图像生成器2用于接收人脸特征每个像素点坐标,根据人脸特征每个像素点坐标利用积分图法,计算人脸特征值;并将计算获得的人脸特征值P发送出去;

分类器3接收并存储人脸特征值信息,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P,当人脸特征值P的个数大于B时,令m=m+1,人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P;直至人脸特征值P的个数小于B时,停止进行比较,并对比较后获得的人脸特征值P进行输出,完成基于FPGA的Haar特征多处理架构人脸检测;其中,A、m、P、B均为正整数;

检测窗口缩放模块4用于判断n×n的范围检测窗口的尺寸是否覆盖摄像机采集图像,若是,完成人脸特征的检测,将特征训练数据器33输出的人脸特征值P进行输出,完成人脸特征的检测,否则令n=n×a,向图像帧缓存器11发送提取摄像机采集图像中n×n的范围检测窗口内的haar特征驱动信号,其中,a为大于1的整数。

本发明出了一种通过并行处理基于Haar面部检测算法的级联分类器架构。本文详细描述了Haar检测阶段,同时详细描述了预处理阶段,首先将输入的图像信号进行A/D转换和解码,在进行图像修剪,经过地址发生器将每一帧图像发送到分类模块,最后将数据经过VGA接口发送器在显示器中显示。

帧缓冲器将图像在FPGA上使用大量的BRAM存储为二维阵列,相反,图像已经被存储为一个一维向量,像素(x,y)地址被计算为(y*w+x)。从帧缓冲器读取的像素值被发送到计算帧的积分图像生成器模块。

地址生成器生成的像素值地址是通过读取以光栅方式扫面框架的帧缓冲器得到。由于框架需要按比例缩小来运行不同尺寸大小的检测窗口,因此该地址生成器还负责根据最近邻降尺度算法来缩放这一帧图像,使用低复杂度流水线实现,可以实现每时钟周期1个地址的吞吐量发送到帧缓冲器,以检索所需的像素值。

积分图生成器在当前操作规模中生成和存储当前帧图像的积分图像。在后续的Haar分类器阶段必须提供高带宽。因此,当前检测窗口的积分图像被存储在寄存器中,以便能够同时读取多个值。

有几种积分图像生成的方法,一种是可以计算整个帧的积分图像并将其存储在BRAM中作为预处理阶段。但是,由于我们需要寄存器中的当前积分图像窗口,因此所需的信息必须是在Haar分类器阶段运行之前传送到寄存器中;另一种是在Haar检测阶段期间直接在寄存器中动态地生成当前积分图像窗口。本发明提出的体系架构已经与系统动态生成积分图像相结合,以合成完整的人脸检测系统。第二种方法具有减少时间和空间复杂度的优点。

分类器数据基于树桩的级联分类器被分成几个部分,以分组的方式存储在单独的BRAM中来增加人脸检测的带宽。一组BRAM存储Haar特征中每个矩形位置的详细信息。另一组BRAM存储每个Haar特征的阈值。左边的值和右边的值存储在另一组BRAM中。由于其尺寸较小,阶段阈值存储在寄存器中。

由于Haar分类器中的阶段彼此独立,因此它们可以被划分为可以并行处理的N个集合,N为正整数,例如,如果阶段数是20并且有4个处理单元,则对于第一处理单元可以给予5个阶段来处理,第二处理单元可以给予另外5个阶段,而剩余的10个阶段可以分配给其它两个处理单元。每个阶段中的特征数量不同,并且应该进行对每个处理单元之间阶段的划分,以便获得相等的负载分布和最小空闲时间。

人脸检测引擎与分类器数据检索阈值的预学习值和Haar特征的位置,确定当前检测窗口是否包含人脸。包含4个处理单元的人脸检测引擎的内部结构如图2所示。该架构可以被缩放以包括更多的处理单元来实现人脸检测帧速率的更高速率。接下来描述不同的子模块。

每个处理单元(Processing Unit)从分类器数据中处理一组阶段,并且检测窗口通过了分配给该处理单元的所有阶段,则生成通过信号。如果检测窗口在任何阶段失败,它立即生成跳过信号。

图2是通过将其位置从分类器发送到积分图像模块,从积分图像模块接收特征矩形数据值。将矩形特征的加权和与特征阈值进行比较,根据比较结果选择左值或右值。所选择的值通过阶段累积并与阶段阈值进行比较。如果累加值大于阈值,则窗口通过该特定阶段。如果检测窗口在任何阶段失败,则生成跳过信号和检测窗口滑动到下一个位置。否则,如果所分配阶段中最后一个阶段通过,则产生通过信号。由于不同的处理单元具有不同的阶段,所以跳过和通过信号需要在它们之间同步进行。

同步模块由四个触发器组成,每个触发器由相应的处理单元设置,检测窗口通过指定集合的所有阶段时,相应的处理单元生成通过信号。如果所有的触发器都被设置,则意味着分类器的所有阶段都已通过,并且说明检测窗口包含人脸。在任何一个新的检测窗口上运行分类器之前,触发器会被清除。

跳过同步模块如果检测窗口在处理单元中任何一个阶段失败,则相应的处理单元立即生成跳过信号通知人脸检测引擎窗口已经失败,并且加载下一个检测窗口。然而,在分类器运行下一个检测窗口之前,应该刷新处理单元的当前流水线。

具体实施方式二、本实施方式是对具体实施方式一所述的基于FPGA的Haar特征多处理架构人脸检测系统的进一步说明,图像存储模块1包括图像帧缓存器11和地址发生器12,

图像帧缓存器11用于提取摄像机采集图像中n×n的范围检测窗口内的haar特征,利用haar特征提取人脸特征;并将提取的人脸特征信息发送出去;

地址发生器12用于接收人脸特征信息,并将接收的人脸特征信息存储为二维阵列,利用像素地址=(y*w+x),计算人脸特征每个像素点的坐标(x,y),其中,w是积分图图像的宽度,并将计算获得的人脸特征每个像素点坐标发送出去。

具体实施方式三、本实施方式是对具体实施方式一所述的基于FPGA的Haar特征多处理架构人脸检测系统的进一步说明,分类器3包括特征分类器31、阶段比较器32和特征训练数据器33;

特征分类器31用于接收并存储人脸特征值信息,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P,将大于特征阈值A×m的人脸特征值P发送出去;其中,m=1;

阶段比较器32用于接收当m=2时,大于特征阈值A×m的人脸特征值P,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P,将大于特征阈值A×m的人脸特征值P发送出去;其中,m=2;

特征训练数据器33用于接收当m=2时,大于特征阈值A×m的人脸特征值P,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P,当人脸特征值P的个数大于B时,令m=m+1,人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P;直至人脸特征值P的个数小于B时,停止进行比较,并对比较后获得的人脸特征值P进行输出,获得检测窗口内的人脸特征,其中,m>2;

具体实施方式四、本实施方式所述的基于FPGA的Haar特征多处理架构人脸检测方法,该方法的具体步骤为:

提取摄像机采集图像中n×n的范围检测窗口内的haar特征,利用haar特征提取人脸特征,并利用人脸特征计算人脸特征每个像素点坐标;并将计算获得的人脸特征每个像素点坐标发送出去的步骤;其中n为正整数;

用于接收人脸特征每个像素点坐标,根据人脸特征每个像素点坐标利用积分图法,计算人脸特征值;并将计算获得的人脸特征值P发送出去的步骤;

接收并存储人脸特征值信息,并利用接收的人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P的步骤;该步骤中,当人脸特征值P的个数大于B时,令m=m+1,人脸特征值P与特征阈值A×m进行比较,保留大于特征阈值A×m的人脸特征值P;直至人脸特征值P的个数小于B时,停止进行比较,并对比较后获得的人脸特征值P进行输出,完成基于FPGA的Haar特征多处理架构人脸检测的步骤;其中,A、m、P、B均为正数;

用于判断n×n的范围检测窗口的尺寸是否覆盖摄像机采集图像的步骤,该步骤中,判断结果若为是,完成人脸特征的检测,将特征训练数据器33输出的人脸特征值P进行输出,完成人脸特征的检测,否则令n=n×a,向图像帧缓存器11发送提取摄像机采集图像中n×n的范围检测窗口内的haar特征驱动信号。

本发明中,人脸检测算法使用一个正方形检测窗口(例如,20×20)扫描整个图像来寻找人脸特征,如图3所示。

如果在一个窗口的特定位置发现足够的特征,那么该窗口说明包含一个人脸。为了检测不同尺寸的人脸,窗口扫面整个图像后进行缩放和重复处理。

然而,该方法是高度计算的,并且不适合于嵌入式系统。另外,对于嵌入式应用,将图像按比例缩小,同时将检测窗口保持在20×20大小,它不需要在存储器中保持一个完整地多尺寸图像金字塔。相反,当需要的时候,最邻近缩减方案能够在一个非常低的硬件复杂度的动态流水线中完成从原始图像中按规定的规模生成框架。虽然检测精度取决于所使用的缩放算法,最近邻方案保持了与软件系统相媲美的人脸检测的准确性。

当使用一个检测窗口扫描图像时,在每一个位置,窗口必须穿过一个有Haar特征构成的级联分类器。这些Haar特征是由2个或3个矩形构成的简单结构,如图4所示。

该小特征集合可以在不同尺寸和位置以及具有不同横纵比等检测窗口内使用,从而生成成千上万个Haar特征,如图5的(a)、(b)、(c)所示。

这些Haar特征用于检测面部特征。例如,我们知道眼睛区域比鼻梁和脸颊是色度更暗。

因此,将上面任意一个矩形放到人脸区域上,然后将白色矩形区域的像素和减去黑色矩形区域的像素和的值称为人脸特征值。再次将这个矩形放到一个非人脸区域,那么计算出的特征值与人脸特征值不同,所以这些矩形的目的就是把人脸特征量化,以区分人脸和非人脸。上述论述表明,通过使用两个特征,就能暗示眼睛的存在。为了使检测窗口包含整个面部,需要计算成千上万Haar特征。Viola-Jones将6000多个Haar特征分成38个独立的阶段,只有当一个窗口通过所有阶段时,它才被归类为一个人脸。详细的算法可以在中找到。相比于早期阶段,后期阶段具有更大地复杂性和准确性,使非人脸窗口尽可能在早期被拒绝。

由于Haar-like特征数目的庞大,导致计算Haar特征的每个矩形内的像素和需要消耗大量时间,严重影响检测速度。因此Viola-Jones提出积分图法作为预处理阶段,这有助于在恒定时间内计算每个特征和。积分图是一个和图像尺寸相同的二维矩阵,积分图的坐标(x,y)包含原始图像中左上面的坐标(x,y)的像素和。

设积分图为ii,原始图为i',则位置P(x,y)出的积分值为

其中ii(x,y)表示像素点P(x,y)处的积分图值,i(x',y')为点(x',y')处的“原始图”,表示图像中P(x,y)左上方所有像素点的灰度值。

利用积分图计算矩形特征值,区域D的像素值可以利用1,2,3,4点的积分图来计算,如图6所示;区域D像素和计算为:ii(4)+ii(1)-ii(2)-ii(3)

因此,ii(1)=区域A的像素值;

ii(2)=区域A的像素值+区域B的像素值;

ii(3)=区域A的像素值+区域C的像素值;

ii(4)=区域A的像素值+区域B的像素值+区域C的像素值+区域D的像素值;

所以,区域D的像素值为ii(4)+ii(1)-ii(2)-ii(3)。

按照上述算法可以在段时间内计算出某个矩形特征的像素和,并且可以得出矩形特征值的计算只与此特征端点的积分图有关,与图像坐标值无关。因此,不管矩形特征尺寸如何,特征值计算消耗的时间都是常量,且只是简单的加减运算,提高了检测速度。

在机器学习算法中使用的训练数据库是方差归一化的。因此,传入的检测窗口也需要进行归一化,这使得算法对于不同的照明条件是强大的[14]。可以用来计算当前检测窗口的方差,

其中,v是检测窗口像素值,∑x2表示检测窗口像素值的平方和,z是检测窗中的像素数,μ是检测窗口中的平均像素值,其可以从积分图像窗口中计算得到。如果在预处理阶段期间生成像素值(平方积分图像)的平方和积分图像的求和区域表,则可以有效地计算∑v2

弱分类器:(每一个Haar-like特征相当于一个弱分类器)

给定一系列训练样本(x1,y1),(x2,y2),...(xg,yg)其中yi=0表示其为负样本(非人脸),yi=1表示为正样本(人脸),g为训练样本总数量。

初始化权重w1,i=D(i),D(i)为两倍正样本或负样本的倒数,对t=1,...,T:归一化权重:t是样本训练数据集

其中,i是样本的标记数,对每一个特征f训练一个弱分类器h(x,f,p,θ),弱学习算法寻找一个最优阈值,使该弱分类器的最小加权错误率εf最小,得到弱分类器为:

εf=∑iqi|h(xi,f,p,θ-yi)| (4)

h(x,f,p,θ)=1pf(x)<p(θ)

h(x,f,p,θ)=0,其他 (5)

选取最佳的弱分类器ht(x)(拥有最小错误率εt);其中,x是窗口图像,p是用来控制不等号的方向的指示符,θ是在概率范围内区分人脸和非人脸的阈值;

ht(x)=h(x,ft,ptt) (6)

按照这个最佳弱分类器调整权重得到:

其中ei=0表示xi被正确地分类,ei=1表示xi被错误地分类,εt为最小错误率,βt为平均错误率。

强分类器:

经过T次迭代得出T个最佳弱分类器构成,结果为:

C(x)=0,其他 (8)

其中,

弱分类器的数目到达一定数量的时候,构成的强分类器就具有较高检测率,但检测比较耗时,因此Paul Viola和Michael Jones提出使用级联的方法将分类器组合起来,即把若干个强分类器分成若干组,然后将其串联起来成为级联分类器。适合于各种并行,其中的一些已经被之前的工作利用。该分类器是由几个独立的阶段组成。个阶段由若干Haar特征组成,一个框架的所有检测窗口都需要通过这个分类器。

使用它可以将某些小型的强分类器就能够将部分非人脸样本排除,而只有人脸样本和少数非人脸样本进入到下一级分类器的检测。速度提升的原因在于一副图像中,大部分待检测窗口都是非人脸样本。

假设整个系统的误检率是F,该系统由k级分类器构成,那么一级强分类器的误检率与整个系统的误检率将满足如下关系:

同理,可以得到一级分类器发检测率与整个系统的检测率的关系表达式:

其中,k为系统中分类器的级数,其中,D代表整个系统的检测率,di代表一级强分类器的检测率。在确定了每一级强分类器发检测率和误检率后,训练得到符合要求的一级强分类器,从而构成强分类器。

级联分类器的训练过程:首先要确定整个级联分类器所允许的最高误检率Fmax和最低检测率Dmin,该级联分类器由多少强分类器决定,即该级联分类器的级数。假设每个强分类器的最高误检率是fmax,最低检测率是dmin,则

有三种架构,专注于利用基于Haar的面部检测算法的并行性在硬件中实现整个系统。通过并行处理特定阶段内的几个Haar特征来加速面部检测[8]。文献[9]提出了一个混合解决方案,其中初始阶段大量并行化,而后期阶段顺序执行。文献[10]提出了一种架构,其中分类器在若干不同的检测窗口上并行运行。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1