APP下载

软硬件协同设计方案与经验性PCA算法的FPGA实现

2015-12-02尹科棹魏蓝海李洪强

成都信息工程大学学报 2015年4期
关键词:人脸人脸识别处理器

尹科棹, 魏蓝海, 李洪强, 李 蠡

(成都信息工程大学通信工程学院,四川成都610225)

0 引言

软硬件协同设计是指在整个系统上,对软硬件进行同时设计和协调。设计明确软硬件如何划分分工,协调确定如何进行系统开发与联合调试。软硬件协同设计方案能提高原型系统的开发效率,缩短开发周期,满足复杂设计要求,还能及早发现设计错误,进行系统级别的调试。文中通过软硬件协同开发了一套人脸识别系统,包括图像采集、人脸检测、显示屏输出的软件设计部分和人脸识别算法的硬件设计部分。整个系统在片上系统(System on Chip,SoC)上利用可编程技术实现,这是一种有效的设计方案。主要创新在于:(1)采用软硬件协同的方式实现了人脸识别原型系统;(2)在PCA算法中提出一种适用于硬件的简单筛选特征值的方式;(3)将不同特征值进行统计分析,发现不同特征的人脸具有不同累积分布函数,即可以帮助选择人脸识别判断的门限值,说明可通过估计累积分布函数提高人脸识别效率,避免环境带来的判断偏差。

1 异构处理器架构

随着微处理器设计技术和半导体制造工艺的进步,芯片的规模和复杂度急剧增大,超高的功耗密度时系统稳定性造成很大影响,功耗壁垒已经成为提升微处理器性能的最大障碍[1]。多核处理器的出现,在保证相同性能的基础上,利用其并行处理的能力,降低处理器的工作频率,大大减少功耗。

随着芯片集成度越来越高,处理器功耗已经和性能、时钟频率、芯片尺寸共同成为衡量一个处理器优劣的最主要标准[2],虽然单核处理器拥有并行指令级技术,但是目前来看其开发潜力已所剩不多,相较于多核处理器,难以满足复杂系统对于性能的要求。如果考虑工艺问题,相对于单核处理器,多核处理器可以采用更为简单的处理内核(Central Processing Unit,CPU),良品率高。从文献[3-4]也可知到多核处理器以其高性能、低功耗优势正逐步取代传统的单处理器成为市场的主流。

多核处理器的内部架构可分为同构多核架构和异构多核架构。同构多核架构,顾名思义,只是通过增加CPU内核数量提升处理器的性能。其存在一定的极限,达到极限值之后,性能就无法再随着内核数量的增加而提升。即使能够不断增加同类型的CPU内核以加强并行处理能力,但整个系统的处理性能仍然受到串行软件设计以及不同CPU通信开销的制约。

但在异构多核架构中,如文献[5]提到异构多核处理器的异构特性,CPU内核所不擅长的浮点运算及信号处理(Digital Signal Processing,DSP)工作,将由集成在同一块芯片上的协处理器处理。

面向并行处理的应用软件所要求的浮点运算及定点运算将由协处理器执行;而CPU内核则致力于执行传统处理器的主要任务,如运行操作系统进行任务调度。这样,芯片就可以高效地执行和处理大量独立数据的任务。异构处理器架构将成为今后多核处理器架构的主流趋势。

2 软硬件协同设计的软硬件基础

软硬件协同设计,一般是从一个给定的系统任务描述着手,通过有效地分析系统任务和所需的资源,采用一系列变换方法并遵循特定的准则生成符合系统功能要求的、符合实现代价约束的硬件和软件架构[6]。软硬件划分好分工以后,软件和硬件的设计一直是保持并行的,在设计过程中两者交织在一起,互相支持,互相提供开发的平台。文献[7-8]提到软硬件协同设计是电子系统复杂化后的一种设计新趋势,SoC是这一趋势的典型代表,是嵌入式系统未来的主流设计思路之一,具有良好的发展前景。

介绍面向异构多核系统的SoC的软硬件协同设计。SoC一般包括系统级逻辑控制模块、CPU内核模块、DSP模块、嵌入的存储器模块、和外部进行通讯的接口模块、电源提供和功耗管理模块。SoC将原来需要由许多芯片完成的功能,集中到一块芯片中完成。以Xilinx公司的Zynq-7000系列全可编程SoC为例,它既包含同构的双核ARM处理器Cortex A9,又包括起到加速作用的协处理器——可编程逻辑门阵列(Field-Programmable Gate Array,FPGA),使整体系统可以成为一个异构多核系统。方案就是ARM处理器负责软件设计,FPGA负责硬件设计,二者协同设计、各司其责实现人脸识别系统。

在项目实际进行中具体使用MathWorks公司Simulink和Xilinx公司的System Generator分别实现软件功能性仿真和硬件电路级仿真和实现。

Simulink是Matlab提供的一个用来对动态系统进行建模、仿真和分析的软件包,支持连续、离散及两者混合的线性和非线性系统,也支持具有多种采样频率的系统。在Simulink环境中,利用鼠标就可以在模型窗口中直观地“画”出系统模型,然后直接进行仿真。

System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行FPGA硬件电路仿真,较之直接利用Xilinx公司的集成开发环境里仿真,能够加快DSP系统的开发进度[9]。

3 软硬件协同设计的方法

软硬件协同设计涉及到硬件功能描述、软硬件划分、软硬件综合、软硬件模拟及验证的问题[10]。其步骤可以分成系统描述、软硬件划分、软硬件联合调试和仿真[11]。在这里给出一个普适性强的设计流程如图1所示。首先,设计者必须对系统的功能进行描述,利用基于软硬件协同设计的集成开发环境,将系统的构架确定下来。由于研究对象是异构多核系统,其中协处理器由FPGA充当,可以把它设计成挂载在ARM处理器外面的外设,软件负责驱动硬件外设和实现其他软件功能。利用集成开发环境的图形化设计,可以很好地表示系统的构架。

图1 软硬件协同设计流程图

在这里软硬件的划分可以理解成图形描述的那样,系统的实现方法被划分为将在处理器上执行的C程序和将要转换为硬件算法电路的Verilog/VHDL程序。如何最优化设计软硬件分工应该考虑到硬件在信号处理方面能提供更好的性能,而软件容易开发和修改,开发时间短。

设计好的硬件部分应独立完成验证,之后设计者还要将它恰当地集成到整个系统中。而软件部分需要为硬件部分设计接口,如果涉及操作系统(Operation System,OS),还需要设计驱动程序。在Linux操作系统下的完成软件设计,并为硬件电路提供了驱动。

最后,需要将软硬件在一起仿真和调试,如果性能、资源消耗不满足设计要求,需要回到之前的步骤重新设计。从这里看出软硬件协同设计的好处:整个系统通过迭代设计最终得到最优化的设计,相对于软硬件独立设计无法在仿真层次优化,只能在实际实现整个系统并且发现错误后再重新设计软件和硬件,这个过程效率高并且没有额外的成本消耗。

4 人脸识别系统

人脸识别系统能够分辨出监控环境中人的身份信息,广泛应用在公安罪犯追逃和安全身份认证领域。其往往在嵌入式设备中实现,以便在监控环境中安置。实现方法是软件部分包括视频流的采集、人脸的检测、显示器的输出。硬件部分实现人脸识别算法。

具体到Soc芯片Zynq 7000,其中的ARM Cortex-A9内核,在它上面搭建Linux操作系统,在Linux操作系统上挂载OpenCV计算机视觉库实现人脸检测,并挂载由FPGA充当的硬件加速器外设。ARM内核从USB摄像头视频流中检测出人脸后将数据传输给FPGA,由FP-GA来实现人脸识别,最后通过HDMI显示器显示识别结果。还利用QT搭建图形用户界面以实现良好的人机交互界面。利用异构多核系统的优势,具有并行计算能力的FPGA,ARM内核可以专心于操作系统的任务调度和对外设的控制,其中就包括视频流的读取和显示器的输出,具体框图如图2所示。

图2 人脸识别系统框架

5 PCA算法在FPGA上的实现

5.1 PCA 算法

人脸识别算法可以利用K-L变换、奇异值分解、主分量分析和Fisher线性判别分析技术提取最终特征,可以使分类器的设计更加简洁有效,使用较少的特征向量数目就能取得较高的识别率[12-14],先讲解K-L变换也就是主成分分析算法的实现。

主成分分析(principal components analysis,PCA)是一种分析、简化数据集的技术。PCA经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到。这样低阶成分往往能够保留图像的重要特征。

其方法主要是通过对协方差矩阵进行特征分解,以得出数据的主成分(即特征向量)与权值(即特征值)。

PCA是最简单的以特征量分析多元统计分布的方法。其结果可以理解为对原数据中的方差做出解释:哪一个方向的数据值对方差的影响最大?换而言之,PCA提供了一种降低数据维度的有效办法;如果在原数据中除掉最小的特征值所对应的成分,获得低维度的数据,以损失有限信息的代价换取较低的复杂度。PCA在分析具有较明显特征的复杂图片数据时尤为有用,比如人脸信息。

设有N个人脸灰度图片训练样本,每个样本由其像素灰度值组成一个列向量Xi,那么样本图像的像素点数即为Xi的维数,设N是列向量个数,L是Xi的维数,由N个列向量构成的训练样本集为XN={X1,X2,...,Xn}。算法可以通过如下方式实现:

(1)构建一个平均向量,这一向量通过大量的灰度图片所对应的向量平均后获得,数学表达式为

(2)为了获得降维后的向量组,以及构建灰度图片的协方差矩阵,经过如下处理

Xi是N个列向量中任意一个,由此得到处理过后的协方差向量σi,σi表示N个训练样本中任意一个的协方差向量。

(3)然后通过矩阵乘法得到协方差矩阵Ω的表达式为

类似前面的定义,σN表示N个训练样本的协方差向量σi集合成的矩阵,由矩阵的运算规则易知Ω矩阵的行列数均为L。

(4)通过常用的Givens-Rotation的方法获得特征向量μi和特征值λi,类似前面的定义,μL是L个μi按列组成的矩阵,λL是λi组成的L列L行对角矩阵。

采用eig(Ω)函数表示特征值的分解

(5)降序排列特征值

提出一种适用于硬件的简单筛选特征值的方式,没有把所有的特征值进行排序,而是有效地设定一个门限值,如果特征值小于这个门限,不再排序。这样大大降低排序的复杂度,其次,在硬件实现中,采用有限比特位比较的方式,即仅仅比较比较重要的比特位(most significant bits)而忽略次要的比特位(least significant bits)。

(6)按特征值降序排列取前面X个数据,后面舍弃。得到对应的前X个特征向量组成矩阵和前X个特征值组成的对角矩阵。类似前面的定义,设为μX和λX,计算前X个正交的特征矩阵更新μX。

(7)将原始数据Xi在特征矩阵μX上进行投影,即可获得原始图像的主特征数据K。

(8)将新的人脸灰度图片的像素灰度值组成新的列向量γ在特征矩阵μX上进行投影,即可获得对比图像的主特征数据f1。

(9)将原始图像的主特征数据和对比图像的主特征数据相减求绝对值,即得到差异值Δ。

(10)将Δ的值和一个判决门限值进行比较,如果小于门限值,可以认为两张图片是一个人的照片。

5.2 CDF图形讨论阀值门限设置

图3 CDF图形讨论阀值门限设置

这里给出一个例子。随机选取3个人脸样本(A,B,C),每人采集N张照片,然后得到每张图片的相应PCA算法的N个输出值K,发现3个人的人脸采集多次后绘制的 CDF曲线是不同的(如图3,样本A、B、C),说明想要识别的人脸是具有各自特性的。分析3个样本的CDF曲线,发现不同人脸在同一环境下得到的K统计上并不相同,即在CDF曲线中表现为3条曲线互不重合;其次,曲线A样本和曲线B样本之间的差异较小,而曲线C样本差异较大。因此,可以考虑阀值主要区分更为相近的2个样本为主。从图中发现,曲线A样本和曲线B样本的K必然小于5500,所以在当前环境下可以判断大于5500的必然是曲线C样本。所以可以判断当K的取值在5000~5500的时候,样本C的识别率异常高。因此,从例子看出,可以判断当前数据的可靠性。利用CDF曲线,很容易得到不同样本K值之间统计上的不同,由差异值Δ,对于从摄像头新采集得到的主数据特征,可以先利用CDF确定范围预判断,如果不在这个区间范围内,可以看作并非可靠数据,而不予判断;并且已经知道不同样本K的范围了,就可以得到不同样本适合的阀值与差异值比较,提高识别准确。从另外一个角度来看,人脸的面部特征不同,所获得的K的值范围有差异,因而可知判断不同的人群,可能可以采用这个方法。而且对于人脸进行多次采样后的信息更丰富,准确性更高。但是受限于现实条件,样本数目较少,不能进行全面可靠的分析。

从硬件的角度来说,只需要判断一部分获取的人脸面部特征值K可以一定程度降低复杂度,提高速度。

5.3 PCA算法经验性改进

FPGA上面的算法就是尽可能实现第5.1节的每一个步骤,并且并行计算地去得到结果,以提高效率。文献[15]提到分块矩阵乘并行结构。以矩阵乘法为例,如果利用ARM软件实现,假设向量乘法耗时t秒,n维的矩阵乘法,受到串行软件设计的限制,运算花费的时间将是n个t秒的时间,但是FPGA硬件可以通过多个乘法器同时进行n个向量的乘法,所耗时间就是t秒,利用并行计算大大提高执行效率。

为适应算法在硬件平台上的移植,减少计算量,对算法做一些改进。如前所述,XN是N个人脸灰度图片训练样本集,列数是照片张数N,行数是照片的像素点个数。以92×112的分辨率为例,协方差矩阵Ω算出结果是10304×10304的大矩阵,对于一般的硬件要实现这类运算几乎是不现实的。采取的办法利用线性代数中降维方法令Ω=σNTσN,将协方差矩阵变成N×N的矩阵,从而大大降低了进行特征值计算量,而且对Ω的特征向量左乘σN就可以还原10304×n的特征向量μN,这个μN就可以用于投影。采用这个方法,特征值分解的复杂度降低好几个数量级,除此以外,还可以考虑采用自适应滤波的方式才进行迭代求解特征值,进一步降低其复杂度。

图4 人脸识别MATLAB仿真

5.4 MATLAB仿真方法验证

将经验性改进的PCA算法用软件仿真。图4利用耶鲁大学提供的人脸库作为系统的人脸数据库(40个人,每人10张照片),随机取出2个人,1人2张照片共4张照片进行比较,即取N为4,得到4个样本分别为X1X2X3X4。取第一个样本X1为被对比样本(既是被对比样本也是比较样本,这样当取到的样本与被对比样本相同时,差异值Δ应为0,图4第一个显示结果正是如此),那么通过Δ=|K-f1|,样本X1对应的K和f1应该相同;X2对应的K和f1应该相差不大,因为X1和X2为同一人的相似照片;X3和X4和前2张照片为不同人,所以差值应该较大。多达100次类似这样的仿真,测得正确率为90%,错拒率为4%,误识率为6%。可以证明算法是正确有效的。

5.5 PCA算法在FPGA上移植

5.2节中提到的经验改进,使计算量减小易于算法在FPGA上实现。另外还应该考虑到软件仿真时一直是对浮点数进行运算的,因为PCA算法中的运算势必使数据变成浮点类型,事实上也是这样的,如图4所示,最终结果不仅是double类型显示,而且是以double类型运算。如果在硬件上实现浮点运算势必带来算法复杂度的提升和算法效率的丧失,这就失去了硬件加速器的初衷。

要实现算法在硬件上的移植就要考虑到这个问题,解决方案是对在算法运算前实现浮点数到定点数的转换。比如说浮点数0.25,用4位二进制量化,最高位代表符号位,第二位代表整数位,最后两位量化小数,量化结果为0011;浮点数-0.25用同样方法量化,但是注意因为计算机的数据存储均用补码表示,所以量化结果为1101。

具体到系统,浮点转定点可以有两种实现方法,第一种ARM将图像数据采集后,传送给FPGA做识别前实现浮点定点的转换,这要求ARM在Linux操作系统下除了检测人脸、QT人脸显示和数据传输外多一项任务,利用之前解释的原理,编写软件程序实现。

内核模块IP核,是一种预先设计好的甚至已经经过验证的具有某种特定功能的集成电路或部件,并且是具有知识产权保护的产品。第二种方法利用Xilinx公司提供的浮点转定点IP核,可以直接将它加入系统设计中完成所需的功能。

因为硬件电路效率高,Xilinx公司提供的IP技术成熟,并且比较2种方案发现,软件实现浮点定点转换需要提前对所有像素点的数据进行处理,大大延长了处理时间,使数据传输给FPGA的实时性受到很大限制,所以最终选择第2种方案。

5.6 误差分析

利用5.3的案例,硬件电路仿真结果如图5所示,可以发现由于浮点转定点的量化丧失一定的精度,第1张图结果稍微比0大,但最终识别结果正确。大量实验结果与5.3节的实验结果大致相同。另需要说明的是,这里为了显示结果与5.3节案例做对比,将得到的定点数的结果转成浮点数来显示。

图5 人脸识别硬件电路仿真

最终将这套设计好的算法电路在FPGA上实现,发现耗时大约为10ms,这其中还包含了数据在ARM和FPGA之间的传输时间和结果显示在显示屏上的时间。最终显示效果如图6所示。而用软件实现,耗时大约为50 ms。这里其实可以考虑画一个照片尺寸和处理时间的图形,来说明FPGA在更大照片尺寸下处理速度依然有优势。

实际识别效果如硬件电路仿真有差距,多次试验,识别率下降到74%,并且还要求光照均匀的条件下,如果环境变化明显,效果也会下降。原因主要有几点,由于硬件资源的限制,截取了以人脸为中心的115×92分辨率的图像,丧失了部分细节;并且人脸库主要是几位项目的参与者的人脸构成,数量远远不及仿真时利用的耶鲁大学提供的人脸库多,所以平均脸也不具备普适意义;另外仿真时的环境十分理想,但是实际环境中,镜头的移动、光线的变化都带来识别效果的下降。

图6 人脸识别实际效果

6 结束语

通过人脸识别系统的实例,系统阐述了软硬件协同设计的实现方法,解释了软硬件协同设计的优点。并且介绍了人脸识别算法在FPGA上实现,更加理解了硬件加速协处理器对给系统带来的好处。软硬件协同设计与FPGA的应用将会给嵌入式系统设计带来可靠的解决方案。未来可以通过更强大的算法实现更高的识别率以及较低的环境条件要求。其次,发现PCA门限阀值的设置可以极大的改善PCA的识别性能,能够提升4%~6%的识别率,可以考虑针对不同人群选择不同的特征值范围。在未来的工作中,可以考虑通过估计累积分布函数和自适应滤波的方式来选择阈值,提高人脸识别的准确率。

[1] 张骏,樊晓桠,刘松鹤.多核、多线程处理器的低功耗设计技术研究[J].计算机科学,2007,(10).

[2] 郝松,都志辉,王曼,等.多核处理器降低功耗技术综述[J]. 计算机科学,2007,(11).

[3] 史莉雯,樊晓桠,张盛兵.单片多处理器的研究[J]. 计算机应用研究,2007,(9).

[4] 黄国睿,张平,魏广博.多核处理器的关键技术及其发展趋势[J].计算机工程与设计,2009,(10).

[5] 蒋建春.异构多核嵌入式软件关键问题研究[D].重庆:重庆大学,2011.

[6] 赵川,徐涛,孙晓光.软硬件协同设计方法的研究[J]. 计算机工程与设计,2003,7.

[7] 马宏星.可重构多核片上系统软硬件功能划分与协同技术研究[D].合肥:中国科学技术大学,2010.

[8] 韩玺.SOPC软硬件协同设计的方法研究[D].北京:北京交通大学,2006.

[9] 云创工作室.多媒体处理FPGA实现——System Generator篇[M].北京:电子工业出版社,2010.

[10] 陈宇.可重构片上系统的软硬件协同设计方法研究[D].长沙:湖南大学,2012.

[11] 陆佳华,潘祖龙,彭竞宇.嵌入式系统软硬件协同设计实战指南:基于 Xilinx ZYNQ[M].北京:机械工业出版社,2014.

[12] 周德龙,高文,赵德斌.基于奇异值分解和判别式KL投影的人脸识别[J].软件学报,2003,(4).

[13] 洪子泉,杨静宇.基于奇异值特征和统计模型的人像识别算法[J].计算机研究与发展,1994,(3).

[14] 洪子泉,杨静宇.用于图象识别的图象代数特征抽取[J].自动化学报,1992,(2).

[15] 邬贵明.FPGA矩阵计算并行算法与结构[D].长沙:国防科学技术大学,2011.

猜你喜欢

人脸人脸识别处理器
人脸识别 等
有特点的人脸
一起学画人脸
揭开人脸识别的神秘面纱
人脸识别技术的基本原理与应用
三国漫——人脸解锁
人脸识别在高校安全防范中的应用
ADI推出新一代SigmaDSP处理器
长得象人脸的十种动物
火线热讯