- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于GPU加速并行人脸检测
基于GPU加速并行人脸检测
摘要 本分针对传统的人脸检测算法计算复杂度高,实现速度慢的缺点,提出了一种使用图像处理器(GPU)加速的并行人脸检测算法,并在GPU上使用OpenCL实现了这个算法,同时在GPU多线程和内存模型上对算法进行了优化。实验结果表明,对比CPU上单线程的优化实现,可以获得10倍~40倍左右的加速比,达到了实时的要求.
关键词 GPU;OpenCL;AdaBoost
中图分类号TP391 文献标识码A 文章编号 1674-6708(2011)55-0205-02
0 引言
人脸检测是指对于一幅任意给定的图像,采用一定的策略对其进行搜索以确定其中是否含有人脸,如果是则返回人脸的位置、大小和姿态 [1]。Viola和Jones提出的算法[2]是人脸检测领域的一个里程碑,它主要有3个方面的贡献:一是提出了一种基于AdaBoost的学习算法,用于训练分类器;二是积分图像的提出;三是级联分类器的设计。这种方法在速度上比以往有较大提升,但是还远不能达到实时级别的应用。OpenCV库中应用了OpenMP技术,利用多核CPU加速算法,但是结果不太理想,在VGA图像(640 x 480)格式下,检测速度只有1.78FPS[3]。Junguk Cho等人利用FPGA实现了人脸检测[4],速度上有较大提升,但是FPGA硬件成本过于昂贵。近年来,随着图形硬件的可编程性越来越高,GPU的通用计算能力得到了很大提高。GPU拥有超强的浮点运算能力,特别适合于大规模数据的并行处理。本文提出了一种基于GPU和Viola-Jones算法的高效并行解决方案。
1 Viola-Jones人脸检测系统
该系统的第一阶段是用AdaBoost学习算法训练出一个级联分类器,第二阶段是使用这个分类器,在待检测图片中搜索人脸。其中第一阶段是离线进行的,因而分类器的训练对检测速度并无直接影响,本文的讨论集中于第二阶段,即搜索阶段。搜索阶段流程如图1。
1.1 矩形特征
矩形特征可用于编码图像中特定区域中的状态。使用简单矩形组合作为特征模板,特征模板的特征值定义为黑色区域像素和与白色区域像素和之差。
特征模板可以在子窗口内以任意尺寸任意放置,每一种形态称为一个矩形特征。一个矩形特征就是一个弱分类器,许多弱分类器组合在一起就是一个强分类器。
人脸检测的过程就是扫描各个子窗口,根据训练得到的分类器,计算相应特征值,与训练所得的阈值相比较,从而判断待检测子窗口是否包含人脸。
1.2 积分图
矩形特征的数量是相当巨大的。要计算一个特征的特征值,需要计算出各个矩形内像素值之和,这个计算量也相当大,使用积分图可以快速完成以上运算。在积分图中,点(x,y)的积分值定义为某点左上方所有像素之和,即:
其中ii(x,y)代表点(x,y)处的积分值,i(x,y)代表点(x,y)的初始像素值。如果使用积分图像,任何矩形中的像素和都能通过4个顶点的积分图像值在常数时间内计算出来。
1.3 级联分类器
级联分类器是一种多层结构的分类器,每一层分类器所包含的特征数量逐渐增多。其思想就是在前期用尽可能少的运算量,将明显的非人脸区域快速地筛选掉,留下来更有可能包含人脸的子窗口,进行后续更加复杂的计算。
2 GPU并行检测算法与实现
2.1 积分图的并行计算
Blelloch等人给出了一个并行前缀求和算法[5]。而积分图像的计算实质上是一个二维前缀求和问题,我们对于Blelloch等人给出的算法加以改进,这里计算积分图可分为两步扫描。首先对图像的每一行进行并行前缀求和,在此基础上,对每一列执行并行前缀求和操作。算法流程如下:
2.2 子图像并行检测
串行的人脸检测算法用一个检测窗口去扫描图像中任意可能存在人脸的位置,并且检测窗口需要逐层等比放大以检测出不同大小的人脸图像。然而,不同位置、不同大小的子图像并没有相互依赖关系,可以进行并行处理。1.3节中描述的级联分类器是由很多个stage组成的,只有通过了当前stage的子图像才能进入到下一个stage,所以不同stage间需要串行处理,最后通过所有stage的子图像会被判定为人脸。算法如下
2.3 OpenCL实现
将分类器用OpenCL中的数据流表示,一个矩形区域可以表示为float4类型,4个分量分别存储矩形特征的左上角位置(x,y)和矩形大小(width,height),在检测中数据流被存储在device的global memory中,从而GPU的所有thread都可以访问这些数据流。每一个stage处理完待检测子图像以后,将检测结果以BOOL的形式存储在global memory中,kernel函数之
原创力文档


文档评论(0)