技术开发 频道

脸部识别系统的并行化应用

  【IT168 技术】

  注:本文为IT168&NVIDIA联合举办的“如何并行化我的应用”方案征集活动参赛作品。本次方案征集活动详情见:http://cuda.itpub.net/thread-1299715-1-1.html。近期活动的大部分方案,将会逐步与大家分享,不可错过哦!

  CUDA ZONE专区:http://cuda.it168.com/

  CUDA技术论坛:http://cuda.itpub.net

  脸部的分析与识别在安保、人机交互、医学诊断研究等众多科学研究与现实社会生活中均有着广泛的应用需求,但由于人脸部非刚性的性质及种族、个性等方面的差别,使得人脸的自动分析与识别存在很多困难。其中一个严重的问题是在脸部识别系统中,图像预处理、人脸部定位、特征提取以及表情分类等相关图像处理与模式识别算法运算量极大,而这些算法以往大多是按串行模式设计在单核上的,处理速度慢,从而使一些识别率较高的算法难以应用,也严重削弱了脸部识别技术的应用价值。虽然近年来随着多核计算机的计算性能突飞猛进,成本不断降低,为各种复杂的计算机技术的应用奠定了坚实的基础。然而,由于串行程序很难被并行处理,多核中只有一个处理器忙碌,其他处理器被闲置,识别处理速度并没有提升。为此,我计划通过程序算法设计思想的改变,即由串行模式变为并行模式,借助并行处理思想和OpenMP编译接口技术,将面部识别的相关算法并行化,充分发挥多核的高速处理能力,提高系统的实用性。

  脸部识别系统相关算法的并行化,主要涉及以下几个方面:

  1、图像增强的并行化

  (1)二维中值滤波的并行化

  在脸部识别中,不但每幅捕获的表情图像要被滤波,而且一幅图像中的几乎每个像素也要被滤波。滤波操作中存在巨大的并行性,可以在各幅图像之间或者在一幅图像的各个像素之间实施并行化。然而,在脸部识别的样本训练阶段,有很多幅图像要被滤波;而在测试或者使用阶段,往往只有少量甚至单幅图像需要被滤波处理。因此,我决定在像素级借助OpenMP实施并行化。关于共享任务结构,要适应各种结构的计算机,因此使用for编译制导方式处理数据的并行性。

  (2)灰度直方图均衡的并行化

  灰度直方图均衡算法的思路是首先计算一幅图像的灰度分布,它既是累积分布函数的基础,又实现了灰度的归一化;然后求灰度的累积分布函数,作为灰度均衡化的灰度变换函数;然后对灰度级变换确定新的灰度级;最后对像素灰度更新,实现灰度均衡化。在灰度直方图均衡的4个步骤中都具有并行性,但是四个步骤之间则是严格串行,只能在每个步骤之内并行化。第一步,求灰度分布过程中,灰度直方图的计算只具有数据并行性,采用for编译制导;分布密度的计算,可分割成多个离散段进行,每段有一个线程执行,可采用Section编译制导。第二步,求累积分布,虽也有并行性,但是算法比较简单,运算量小,可串行化处理,采用single编译制导。第三步,灰度级变换,对于每个灰度级可独立处理,即在任务级并行,但是算法简单且运算量小,可与第二步合并起来串行处理。第四步,可对每个像素独立更新灰度,可分割成多个离散段进行,每段有一个线程执行,故可采用Section编译制导。

  2、表情特征提取与选择的算法的并行化

  在该研究中我们采用了Gabor表情特征提取算法,该算法的主要运算量来自于40个Gabor滤波器对16个表情子区的卷积,这需要通过两层for循环来实现,而且,由此构成的40*16次卷积是相互独立的,因此并行性极高,所以应以此处为重点对Gabor表情特征提取算法实施并行化。

  3、表情识别算法的并行化

  对于改进的一对一型多类SVM(支持向量机)来说, 既要训练21个相互独立的SVM,又要在识别阶段通过这21个相互独立的SVM的识别结果投票。因此,这两个阶段都具有极大的任务并行性,是并行化的重点。

  采用以上并行化算法后,经过了大量的实验和测试,脸部识别系统的处理速度明显提升。

0
相关文章