基于GPU的稳健的人脸检测系统的实现外文翻译资料
2023-05-23 16:00:07
英语原文共 8 页,剩余内容已隐藏,支付完成后下载完整资料
基于GPU的稳健的人脸检测系统的实现
摘 要
人脸检测在计算机领域是活跃的研究领域,因为它是各方面的第一步,比如人脸识别、军事情报、监控、人机交换等。人脸检测算法密集的运算使它难以进行实时的人脸检测任务。我们可以通过使用NVIDIAS统一计算设备架构(CUDA)卸载计算图形处理单元(GPU)来克服人脸检测算法的处理限制。在本文中,我们开发了一个基于GPU,以Viola Jones人脸检测算法为基础的实现稳健的人脸检测算法。为了验证我们的工作,对于同一算法,我们把我们的实现过程和传统的CPU实现过程做了比较。
关键词 人脸检测;GPU;CUDA;整体形象
1、介绍
生物识别技术利用人体的生物特征或行为来识别或验证。常用的生物特征包括脸、指纹、声音和虹膜识别。采用指纹识别是我们日常生活中最受欢迎的。然而,汗水和灰尘可能会降低精确度。面对处理系统,和机器身体接触是没有必要的,通过使用摄像机可以自然的捕捉到图像,这使得面部处理系统是一个非常方便的生物识别方法。一个面部处理系统包括人脸检测、识别、跟踪和呈现。脸部检测被用来从背景上区分人脸,人脸检测就是在检测的过程中输入图像。关于图像的人脸检测是相当复杂并且耗时的问题。人脸检测很重要,因为它是各方面的第一步,比如人脸识别、视频监控、人机交换等。
人脸在证明个人身份上扮演了主要的角色。人脸检测是主要的生物特征之一,许多工作集中于发展其算法来应用在不同的系统上。传统上昂贵的专用硬件被用来实现所需要的检测速率。甚至对于当前的硬件来说,人脸检测也是非常耗时的,特别是被用在大图像上的那一刻。比如说当我们从一个摄像机实时的识别人脸时,这是同样的问题,这就是为什么检测过程必须加速。近几年,图形卡性能提高,实际上,GPU比CPU有更好的性能。今天,一个图形卡不仅仅被用来做图像渲染,也可以被用来做通用并行计算,与原来的图形任务没有联系。第一次实时人脸检测算法是由Viola Jones提出的,现在已经成为了实时人脸检测的实际标准。但是它不适合高分辨率的图像,因此我们需要为具备合理成本的快速人脸检测寻找高性能的人脸检测方案,并行处理是达到快速人脸检测的最好的方式。
在我们的工作中,我们开发了以Viola Jones算法为基础的基于GPU的人脸检测系统。为了验证我们的工作,我们在算法的三个阶段比较了我们的性能实现和CPU性能的实现,即图像缩放、积分图像计算和级联分类。我们发现,我们基于Viola Jones人脸检测的GPU实现执行力比CPU实现快5.41到19.75倍。
2、相关工作
实时目标检测对许多应用是一个重要的工作。这项工作的一个稳健并通用的方法是使用统计分类器,分类输入图像的各个位置,做出二选一的决定:这个位置包含对象,或者不包含。Viola Jones提出非常成功的人脸检测器,结合推进了Haar低级特性计算的整体形象和级联分类器的考虑。第一个实时人脸检测算法是Viola Jones提出的,为了加快人脸检测过程,很多工作正在完成。被Viola Jones和R.Lienhar描述的一系列使用Haar 特性的人脸检测算法被广泛分布在许多应用中。其中一个是应用在OpenCV 图书室。OpenCV实现每秒编译OpenMP选项只提供4.5帧4核CPU,实时处理高清流太缓慢。一些并行版本的人脸检测算法使用Haar特征,被Hefenbrock引入的算法是第一个我们所能找到的使用GPU实现的人脸检测算法。它展示了使用GPU与CPU相对的效果。但该算法不能处理640*480分辨率的实时流。下一个并行实现是Obukhovs 算法。它是单一的使用GPU实现的,并且不需要修改就可以用OpenCV工作,那就是为什么现代版本OpenCV库中包含它。算法的主要问题是纹理分类器存储内存使用量,因为纹理内存没有有效的通用操作作为全球现代GPU内存缓存。Jaromiret描述的GPU的工作使用CUDA来加速人脸检测的实现,他们比较了Viola Jones算法的实现和基础的一线程CPU版本。一些作品也写过关于具备好的结果的对象分类的加速。在插图中,达到了1分类器37帧/秒的检测,并且使用256*192图像分辨率达到了16分类器98帧/秒的检测。Kong 提出了基于GPU的人脸检测系统的实现,能够使48张脸在197毫秒的延迟下被检测到。Heroutet 提出了以当地排名模式为基础的基于GPU的人脸检测器,作为普通的使用Haar 小波的替代品。最后,Sharma提出了CUDA实现,实现了1280*960像素的分辨率。他们提出了一个并行积分图像来按行和按列放电,通过从片外获取输入的数据储存在每个SM纹理内存。
3、人脸检测算法
在我们的工作中,我们使用了Viola Jones人脸检测算法。在高级别上,该算法用一个窗口扫描图像来寻找人脸的特征。如果找到这些足够的特征,那么这个图像的特殊窗口被叫做一张脸。为了解释不同大小的脸,这个窗口将被缩放,这个过程是重复的。每个窗口结构发展通过算法独立于其它结构。为了减少每个窗口需要检查的特征的数量,每个窗口分阶段通过。早期特征检查很少,并且很容易通过,而后期有更多的特征而且更严格。在每个阶段,该阶段的计算特性是积累的,如果积累值没有通过阈值,这个阶段就是失败的,并且这个窗口被认为不是一个脸。这就允许这个看起来不像一张脸的窗口不要过于关注。为了更彻底的理解算法,我们可以把算法在基础功能上分为三个阶段。这三个阶段是特征提取阶段、积分图像计算阶段和级联分类阶段。在特征提取阶段,特征分类器被用来检测特殊的人脸特征。窗口连续扫描特征,特征的数量取决于窗口引进的特殊阶段。这些特征代表了矩形特性,我们使用的分类器是由2和3矩形特征组成的。图1显示了一个特征分类器的例子。
为了特征的计算价值,我们首先要计算包含在每一个由特征构成的矩形中所有的像素总和。一旦计算出,每一个总和和相应的矩形重量相乘,然后这个结果积累在所有的矩形特征中。如果累计值达到一个阈值约束,然后在窗口中发现的特征将会被考虑。
图1 人脸检测的特征分类器的例子
在积分图像计算阶段,为了避免多余的计算矩形总和,我们把计算积分图像II作为预处理步骤。积分图像上的(x,y)点包含了上面像素的总和和左边的II(x,y)。II(x-1,y-1)是减去它包含的多余的II(x,y)和II(x,y-1),如图2。
图2 人脸图像表示为位图和整体形象
使用积分图像,特征可以在连续的时间内被计算,因为我们可以在连续的时间内计算构成矩形的像素总和。尽管特征可以在连续的时间内被计算,但是过度的工作需要完成,不然的话一个特殊的窗口区域看起来一点也不像一张脸。
在级联分类阶段,该算法使用了超过2000种特征,比如眼睛区域和鼻梁区域等等,并且计算这些特征是低效的不必要的。为了避免这个问题,该算法执行级联分类来划分特征的数量,并且当已经确定不包含一张脸时会迅速的消除窗口。此外,级联会阻止看起来不像一张脸的窗口进行不必要的分析。当窗口在一个特殊阶段失败了,它会立即标记这个窗口。一般来说,早期会更频繁的通过,后期会更严格。因此,在每个特殊阶段的工作量千差万别。如果所有特殊阶段的特征在这个窗口被找到,这个阶段就通过了,然后窗口传递到下一个阶段,窗口再次扫描下一阶段的特征。如果窗口通过所有阶段,那么它就是一张脸然后在下一个窗口以同样的方式处理。
- GPU架构和CUDA
图形处理器的大规模并行体系结构是一个拥有巨大计算能力的仓库。统一计算设备架构(CUDA)是一个基于c编程模型,公开了GPU的并行能力,以便于开发和部署。CPU有几个核心用来优化执行顺序计算而GPU有成千上万的核心是特殊设计用来并行处理的。所以当CPU代码休息时,显著加速可以通过在GPU中执行高计算工作来获得。研究人员使用GPU计算来加速各种工程和科学问题。此外,基于像素应用例如计算机视觉、视频和图像处理非常适合通用GPU技术实现。拥有GPU的CUDA由一组能力流多处理器(SMs)组成。一个流多处理器有很多处理器核心,流多处理器处理内核以流处理器(SP)而著称。每一个流多处理器包含的流处理器的数量取决于GPU。一般来说,在现代GPU每个流多处理器包含32个流处理器。所以如果一个GPU有512个核心那就意味着它包含16个流多处理器每个包含32个核心或流处理器。运行在GPU的程序独立于结构差异,这使得GPU编程是可伸缩的。
CUDA在2007年被NVIDIA引入。这个框架允许程序员访问虚拟指令集和NVIDIA GPU的并行处理单元的内存。不是使用图形API指令,用C 代码写的程序是专门针对GPU里的特殊硬件,而且该硬件管理程序执行在GPU上。CUDA框架实际上是一个扩展的c编程语言。编译器负责编译NVCC CUDA的代码。当c/c 代码作为编译器的输入代码,它首先分析代码,并将传统的c/c 代码和CUDA的c代码分离。普通的c/c 代码使用系统的主要的c编译器(GCC等)编译,但CUDA的c部分编译使用NVCC。实际上,CUDA框架是一个扩展的c语言编程。编译器负责编译的CUDA代码是NVCC。
5、GPU实现人脸检测的提出
我们提出的工作是基于Viola Jones的人脸检测算法。图3提出了人脸检测系统实现的计划。人脸检测系统的功能有两个实现1)CPU实现2)CPU和GPU实现。在CPU实现人脸检测系统的所有功能部分是通过单线程程序实现的。在CPU和GPU实现部分一些功能已经使用CPU(主机)被实现,大部分功能已经使用GPU(设备)数据并行被实现。我们提出的体系结构显示,Viola Jones算法的图像变换和级联分类器的功能都可以实现CPU和GPU。像图像读取并生成矩形的任务在CPU上检测人脸是可以做到的。我们基于GPU的人脸检测的实现包括三个主要步骤:1)调整原始图像在不同尺度的金字塔图像2)计算积分图像的快速特性评价,3)使用级联分类器检测人脸。这些任务都是并行运行并且作为内核运行在GPU上。
图3 人脸检测系统结构的提出
以下是我们基于GPU的人脸检测实现的伪代码。
1: for number of scales in image pyramid do [used single thread for each image pyramid]
2: down sample image by one scale;
3: compute integral image for current scale; [used horizontal and vertical accumulation]
4: for each shift step of the sliding detection window do
5: for each stage in the cascade classifier do [used single thread for each classifier]
6: for each filter in the stage do
7: filter the detection window;
8: end
9: accumulate filter outputs within this stage;
10: if accumulation fails to pass per-stage threshold do
11: break the for loop and reject this window as a face;
12: end
13: end
14: if this detection window passes all per-stage thresholds do
15: accept this window as a face;
16: else
17: reject this window as a face;
18: end
19: end
20: end
在上面的伪代码中,图像调整是第2行,第3行是对应积分图像计算。4-20行是级联检测部分。上面伪代码的更多细节在后续部分进行阐述。
图4 图像金字塔
在图像调整阶段,原始图像在不同尺度上调整成金字塔图像,金字塔的底部是原始图像,顶部是一个按比例缩小的24*24分辨率的图像,是探测器的基本析像度。金字塔的高度或者换句话说缩放图像的数量取决于比例因子,是我们案例中的1.2。图像金字塔的计算,虽然简单,但需要大量的时间。并行图像缩放的简单方法是通过允许不同的CUDA线程块在不同尺度并行计算图像。每一个线程计算一个图像尺度的像素价值。然而,由于CUDA线程块尺寸固定,当图像尺寸逐渐减少,更多的
线程在这种方法中是不活跃的,如图4所示。
在整体形象阶段,为了更精准更快的检测人脸,该算法使用了Adaboost机器学习算法。该算法使用Haar特征来辨别人脸。它使用24*24帧检测窗口的大小。现在这些特征应用到图像中来计算在黑暗区域下像素价值的总和减去从明亮区域下的所有像素值的总和。虽然像素之和的方法被认为是相比于其它方法更复杂的方法,但像素的集成允许更快的检测,其精度几乎与其它技术类似。计算的原则被分为两个部分。使用积分图像我们可以容易的在4个值的访问下计算矩形总和。我们可以使用
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[612900],资料为PDF文档或Word文档,PDF文档可免费转换为Word