APP下载

基于ZYNQ的优化Adaboost人脸检测

2020-03-19高树静王程龙董廷坤

计算机工程与应用 2020年6期
关键词:哈希肤色人脸

高树静,王程龙,董廷坤

青岛科技大学 信息科学技术学院,山东 青岛266000

1 引言

从20 世纪60 年代开始,人脸检测技术一直不断地被优化和升级。近年来,对人脸检测系统的研究主要集中在算法和系统实现两方面。

在算法方面,主要研究目标围绕着提高准确率和检测速度。Wei等[1]试图采用Adaboost算法寻找ROI(Region Of Interest)然后在利用肤色融合分割的方法进行人脸检测,弥补Adaboost 算法侧脸漏检问题,但是准确率仍需提高。刘王胜[2]对Adaboost 算进行改进,利用视频帧前后相关性,提高人脸检测的速率,可以达到每帧图像检测耗时在96 ms,这是很不错的改进。但是最近也有一些利用视频前后帧相关性进行研究的成果,比如齐苏敏[3]采用Phash(感知哈希)算法对人脸追踪中前后视频相关性的研究是一个精简且准确率高的方法。结合前面学者的研究成果,本文利用YCbCr阈值分割提取肤色感兴趣区域,减少Adaboost 人脸检测范围,达到提速的目的,再采用精简且实时性高的Phash算法对人脸追踪,减少人脸检测次数,提升人脸检测的实时性。

在系统实现方面,主要目标是满足人脸检测系统的实时性、准确率和便携性的需求。李昌湘等人[4]将Adaboost算法移植到嵌入式平台,能满足基本的人脸检测准确率,但实时性却无法保证。庞伟等人[5]采用将Adaboost算法移植到FPGA 平台,能满足实时性要求,但以消耗大量的逻辑资源和存储资源为代价,因此硬件成本却开销太大,不利于产品成本的降低。在文献[6]充分利用SOPC 的灵活性,达到22 帧/s 的检测速度,表明SOPC是个很好的研究方案。经过前面的研究成果,本文采用Xilinx 的ZYNQ SoC 平台进行实时人脸检测,将人脸检测算法中不利于ARM 处理的浮点数定点化处理之后再移植到ZYNQ平台达到加速检测目的,然后通过合理的软硬件协同设计,满足了系统实时性要求和便捷性需求的同时降低硬件成本。

2 主要算法介绍与优化

本文主要使用的算法包含简单的肤色分割、Adaboost人脸检测算法与Phash 人脸追踪算法。对Adaboost 人脸检测算法进行优化,主要对强分类器与弱分类器参数进行优化,将其中浮点数转化为定点数,也就是将浮点数中的小数点全固定下来。这样减少了浮点运算使得人脸检测速度更快,也更适合ZYNQ平台使用。

2.1 肤色检测算法

因为肤色的差异体现在亮度上,利用人脸皮肤的色度的聚类特征,可以将输入视频中的类肤色区域提取出来,而通常采集到的图像是RGB格式,而RGB肤色空间对肤色聚类性不太理想,但是YCbCr肤色空间中可以容易地将图像的亮度信息提取出来,所以首先将RGB 肤色空间转到YCbCr 肤色空间,官方提供的RGB 转换YcbCr公式如式(1):

但是在式(1)展开的表达式中,有很多小数点运算,采用移位运算来避免出现小数点运算,采用如式(2)~(4)所示的方式将RGB肤色空间转为YCbCr肤色空间:

利用移位运算减少了处理器对小数点处理,更快的检测速率。主流的肤色分割是高斯模型和椭圆模型,但是这两种算法有较多除法和浮点运算,不便于用于FPGA实现,本文采用肤色阈值对肤色特征提取,因为CbCr分量具有很好的聚类性,设置合理的阈值,即可提取出肤色区域。在文献[7]中的实验表明,人脸的肤色像素值集中在90 ≤Cb ≤135,137 ≤Cr ≤167,故本文也将CbCr像素值处于阈值范围内的像素设置为1,其他像素值设置为0,即可提取出肤色区域,计算表达式如式(5)所示:

2.2 Adaboost简介与优化

Adaboost 算法[8]的核心是一种前向迭代算法,通过大量的正负人脸样本训练得到一系列的弱分类器,利用将弱分类器级联成为强分类器。

2.2.1 Haar特征

本文选用Paul Viola 和Michael Jones[9]在牛津大学提出图1 中四个方向的Haar 特征作为人脸分类器训练的特征。

图1 Haar特征图

2.2.2 分类器的训练

(1)选定样本训练集(x1,y1),(x2,y2),(x3,y3),…,(xn,yn),其中yi代表样本类别,yi=0为负样本,yi=1为正样本,n代表训练样本总个数。

(2)样本平均分配权值,正样本权值为ω1,i=1/2w,负样本权值为ω1,i=1/2m,其中正样本个数为w,负样本个数为m。假设训练T 次,则对权值进行归一化处理:

(3)然后由选定的Haar 特征f、阈值θ 和不等号方向p来获得弱分类器:

(4)产生弱分类器后,对其进行加权ω求和得到弱分类器的误检率βf:

(5)利用大量的样本训练得到,最小错误率min(βf)对应的分类器Ν( x,f ,p,q)

(7)最后形成最后需要的强分类器参数μt:

采用MIT-CBCL 人脸库(包含2 429 个人脸正样本,4 548 个负样本),利用人脸库中的正样本和负样本训练得到需要的强分类器,可以实现Adaboost人脸检测。

2.2.3 分类器参数优化

弱分类器阈值参数θ、强分类器中μt、Haar 特征值f都是是浮点形式存储。浮点数在转换过程中,尽量逼近参数精度,但不免会牺牲部分数据精度来换取检测算法速率的提升,对弱分类器的条件比较部分转换方式:

强分类器转换方式:

训练得到的弱分类器是22 级,总共2 135 个弱分类器,需要对2 135个弱分类器,22个强分类器进行定点化处理,但强分类器由弱分类器组成所以修改个数仍为2 135。由于左右两侧都有浮点数,这样先放大后比较也不会影响比较结果。

2.3 DCT哈希算法的人脸追踪

视频帧的上下帧信息有强烈的时空连续性,利用这样的时空关系,构建Phash 函数序列[10]对人脸图像进行追踪。

2.3.1 感知哈希序列

感知哈希特征提取算法能够准确又快速地提取待检测图像中与目标图像区域的相似部分,具有非常优秀的表现,因此被广泛的运用。

本文基于DCT 压缩感知哈希算法,离散余弦变换(DCT)是一种图像压缩算法,将灰度人脸图像H( )X,Y,通过DCT(离散余弦变换)压缩获得32×32 的尺寸的h(x,y)图像[11],压缩后可以减少图像冗余信息,当转化到频域后,系数从左上角到右下角,从低频到高频部分系数绝对值逐渐减小,能量集中于低频部分。具体的变换过程如下所示:

F(u,v)是变换矩阵,u,v 是频率采样值,x,y 是空间采样值。提取生成的32×32 的矩阵中最低频的部分,也就是左上角的8×8 的矩阵,然后将低频矩阵进行二值化,即大于DCT 均值的赋值1,低于均值的赋值为0,将形成的8×8的矩阵,排列成64位整数的哈希序列,

2.3.2 哈希值匹配

通过哈希序列可以计算模板图像和目标图像之间的汉明距离,可以进行相识度判断。计算方法如式(17)所示:

其中,Htemple(i )表示模板帧中的哈希序列第i 位。Hobject(i )表示待匹配窗口的哈希序列第i 位,为相识度因子,越大表示模板窗口和目标窗口的相识度越小。设置相识度的阈值L,当时候表示人脸匹配成功,若,则认为模板与目标相差较大。阈值设置的大小直接影响了匹配的效果,由于本文中人脸移动缓慢,将阈值设置为L=7即可准确找到人脸区域。

2.3.3 目标匹配与模板的更新

模板图像跟随目标的变化而更新是跟踪算法的关键一部分。本文采用搜索跟踪的策略,将确定的位置坐标作为下一帧菱形搜索的起点坐标,搜索区域长宽是模板区域长宽的4 倍大小,对该区域计算感知哈希值,并计算与目标区域的汉明距离。

3 系统设计过程

本设计将逻辑运算简单,重复度高的肤色分割算法和中值滤波放在PL 部分,其中中值滤波采用三级流水线结构设计,这样加速图像预处理。将逻辑复杂的人脸检测和追踪放在PS 部分,通过分析分类器的特点,利用不同窗口特征尺寸无关性,采用双核ARM 并行人脸检测也能实现加速人脸检测。

3.1 系统架构设计

采用Xilinx 开发的Vivado 2017.3 来进行整体设计,实现平台是zybo 开发工具。平台中包含28 000 多逻辑单元和665 MHz 的双核ARM Cortex-A9 处理器,PS 包含32 KB 的一级缓存器和512 KB 的二级缓存器,并包含512 MB 的DDR3 存储器[12]。系统软硬协同实现图像处理的工作,系统上电后进行初始化,PL 部分控制摄像头采集图像并进行初步处理后转化成AXI-stream信号,通过VDMA传入PS部分,在PS部分通过AXI-HP或者AXI-GP接口获得VDMA传入的每一帧信号,DDR3 Controller控制信号缓存入DDR3中,PS部分可以从DDR3中取出每一帧图像进行人脸检测。

3.2 人脸检测算法实现

本文所使用的算法包括YcbCr 肤色提取,二值化,中值滤波,最小外接矩阵获取,Adaboost 人脸检测和Phash人脸追踪。系统流程如图2所示。

图2 系统流程图

首先将采集到的RGB 图像转化到YCbCr 肤色空间,Y 分量记录图像的灰度信息,CbCr 分量通过设置相应阈值粗提取出图像中的肤色区域,接着对肤色区域进行二值化处理,然后采用中值滤波去除二值化图像中的椒盐噪声,并将滤波后的二值化图像进行等间隔旋转搜索获取肤色区域的最小外接矩形,记录最小外接矩形的四个顶点坐标,将坐标值输入到的灰度图,对灰度图进行裁剪,获得人脸肤色区域的灰度图,缩小Adaboost 人脸检测算法可以在图中的检测范围。

然后判断当前的人脸肤色区域是否是采集到的第一帧图像。

若是第一帧图像则进行人脸检测,然后将人脸图像作为哈希模板图像,计算其哈希序列,并缓存起来,与下一帧肤色区域进行哈希匹配,达到人脸追踪的目的,最后输出检测到的人脸区域,并进行下一帧信息采集。

若不是第一帧图像,则直接进行Phash 人脸追踪环节,若追踪成功,则更新模板哈希序列,输出人脸区域,进行下一帧信息采集;若追踪失败,则跳回到Adaboost人脸检测算法进行人脸检测,然后更新模板序列,输出人脸区域并进行下一帧信息采集。

4 平台实现过程

ZYNQ 平台被划分PL-PS 两个部分,两个部分都可以分别独立实现。本次设计中肤色提取模块在PL 部分实现,中值滤波在PL 部分中采用流水线方式实现。人脸检测和人脸追踪在PS 部分采用的双核ARM 并行方式实现。

4.1 PL模块实现

4.1.1 人脸肤色区域提取模块

通过OV7670摄像头采集的视频分辨率是640×480,每个点色彩深度是16 位,所以每个点需要在传输总线上传输2次,视频文件通过8位的并行总线传输,然后将视频缓存到一个双口RAM[13]。再从双口BRAM 中读出后,为了避免出现小数运算,对RGB 空间转换到YCbCr肤色空间将选用公式(2)~(4)的方式,其映射为硬件架构如图3所示。

图3 人脸肤色提取模块

图3 右侧表示的是进行肤色阈值提取,通过两个LUT(Look Up Table)可以将图像进行二值化处理,但二值化处理后的图像有严重的噪声情况,需要对噪声进行消除。

4.1.2 肤色二值图像的中值滤波

缓存在BRAM 中的肤色二值化图像移入中值滤波模块[14],中值滤波采用3×3 的滤波窗口,采用流水线设计。第一级中并行使用三个比较器将每一行中的三个数排序,第二级使用三个比较器找出第一级中的三个最大值中的最大值,三个中值中的中间值,三个最小值中的最小值。第三级使用一个比较器确定3×3 中最终的中间值。

4.2 PS模块实现

利用软硬件协同的结构,将Linaro Ubuntu 和Opencv3.3 图像库移植到PS 部分,通过调用移植的库函数对视频流信息处理。

4.2.1 肤色区域最小外接矩阵

通过等间隔旋转搜索,将图像物体在平面内进行旋转,每次记录其轮廊在坐标系方向上的外接矩形参数,通过计算外接矩形面积获得最小外接矩形,获得四个顶点坐标后将坐标点数据输入YCbCr 肤色空间中的Y 分量形成的灰度图,得到缩小图像范围的人脸肤色灰度区域,从而缩减了检测范围。

4.2.2 并行人脸检测与追踪

用实验的训练分类器,调用opencv 中integral 方法获得肤色区域积分图,然后对肤色区域积分图进行扫描寻找人脸区域。

ZYNQ 平台拥有双核Cortex A9 处理器,利用不同尺寸检测窗口之间的无关性,将不同大小的检测窗口分为两部分,一部分在core1 进行检测,另一部分利用core2 进行检测,如图4 所示的双核并行检测方式。core1 和core2 多线程并行处理利用不同尺寸的检测窗口,且要让ARM 核共享存储在DDR3 中的积分图和二级高速缓冲器数据,达到加速检测的目标。

图4 双核ARM检测

当检测结束以后,由于不同尺度的检测窗口会对同一区域同时标定多个检测窗口。利用core1对检测窗口进行合并操作,将core2 暂时挂起。core1 对相同尺度大小的检测窗口相近位置的检测窗口的坐标求均值再归并多余的检测窗口,然后core1和core2并行提取人脸图像信息的哈希序列,并生成模板哈希序列,同时将其缓存在DDR3 中,在下一帧视频来之后,将肤色提取的最小外接矩形中的图像信息生成追踪目标哈希序列,然后计算汉明距离,寻找最小的汉明距离后也就追踪到当前帧的人脸区域,直接输出上一帧人脸窗口坐标,最后更新模板哈希序列。若追踪失败,再次进行人脸检测,同时更新模板哈希序列。

5 系统测试结果

本文先在PC 平台验证优化算法的性能,对比本文算法与传统的Adaboost 人脸检测算法和Adaboost+YCbCr 检测算法的人脸检测速率,然后将算法移植到ZYNQ平台,最后进行系统实现分析。

5.1 检测算法优化结果分析

所采用的软件平台是Visual Studio 2015 和编译后的Opencv3.3,将本文算法、Adaboost 算法和Adaboost+YcbCr[15-16]算法在PC(Core i5,主频2.7 GHz,内存16 GB)进行比较。对截取的600帧图像的检测时间分析结果如图5所示。

图5 优化算法检测时间

从图5中可以看出:传统Adaboost算法需要90~140 ms才能检测到人脸,检测时间最长。传统Adaboost+YCbCr算法需要60~100 ms 检测时间,消耗的时间比传统Adaboost算法快一点。而本文算法采用优化的Adaboost和Phash 算法进行人脸检测和追踪,消耗的时间集中在10~70 ms之间,统计结果显示本文算法相比前面两种算法的检测时间明显缩短。

5.2 ZYNQ平台实现分析

为了对比本文检测方案在系统实现方面的优势,选取了FDDB 数据库中的250 张人脸图像,其中包含单人脸和多人脸,且图像中有侧脸、有正脸,将图像像素统一裁剪为320×240,总共367张人脸图像,分别通过三种实现方法进行检测,分别是:

(1)在ZYNQ 平台的ARM 中软件实现Adaboost 人脸检测算法。

(2)在ZYNQ 平台的ARM 中软件实现Adaboost 人脸检测+YCbCr算法。

(3)在ZYNQ 平台中采用软硬件协同设计实现本文检测算法:YCbCr 肤色提取IP 进行硬件加速,同时使用定点化的Adaboost 人脸检测和Phash 人脸追踪检测人脸在ARM部分实现。

统计各算法在ZYNQ平台的人脸检测时间,汇总如表1所示。

表1 ZYNQ平台测试结果 ms

从表1 中实验结果可以看出,软硬件协同处理架构下的人脸检测算法的实时性在四种检测场景下都高于其他两种算法在纯ARM平台下软件实现。

5.3 系统分析

5.3.1 人脸检测结果

如图6、图7 所示的是ZYNQ 平台下摄像头采集视频信息,分别在两种环境光下人脸俯视、仰视、左侧脸、正常、右侧脸的姿态,验证表明都能检测出人脸,这表明系统具有一定的鲁棒性。

图6 强光照对比环境

图7 正常光照对比环境

5.3.2 资源消耗分析

从表2 中可以看出FPGA 中的三种主要参数LUT、BRAM、DSP 都占用超过65%,表明工程在完成人脸检测前提下,充分利用了Zybo开发平台,在文献[5]的人脸检测使用19 897个LUT,而本文中使用了12 203个LUT,节约了逻辑资源,降低了系统硬件成本。

表2 FPGA占用资源表

6 结语

本文在ZYNQ 平台下,实现了肤色区域提取、优化Adaboost 人脸检测与Phash 人脸追踪,满足了便捷性与实时性的需求。实验结论显示,ZYNQ 平台软硬件协同设计的本文算法相比两种传统算法在ARM 平台下纯软件检测实时性大幅提高,同时合理的软硬件划分,与文献[5]相比减少了7 694 个LUT 的使用,减少硬件资源消耗,节约了硬件成本。但在算法方面,本文没有对人脸检测算法准确率进行优化,是本文的后期研究目标。在系统方面,需要选择清晰度更高的摄像头进行信息采集,减少后期图像处理的难度。

猜你喜欢

哈希肤色人脸
基于特征选择的局部敏感哈希位选择算法
有特点的人脸
一起学画人脸
哈希值处理 功能全面更易用
肤色(外一首)
文件哈希值处理一条龙
Conversation in a house
人的肤色为什么不同
为什么人有不同的肤色?
三国漫——人脸解锁