深潜水:在PowerVR上进行OpenCL人脸检测

Imagination的研发小组开发了一种人脸检测算法,它是基于一个分类器迭代以及优化运行在移动设备上其中包括一个CPU和PowerVR GPU构成。该算法使用几种优化以提高性能和精度。特别是,代替为脸谱搜寻一整个帧, 检测器将搜索区域限制在那些以前检测的加上一些随机选择的区域。追踪以前发现的脸以确保他们不会被遗失,同时测试各种各样的其他区域以确保新面孔能够被迅速找到。

在下图中所示的主要步骤如下:

在CPU和GPU上实现人脸检测的模块图

在CPU和GPU上实现人脸检测的模块图

源图像预处理

预处理内核从一个源图像构造三次临时图像包括:

1、一个贴图细化包含多个不同角度版本的源图像。
2、一个彩色空间中图像的副本。
3、单通道图像(或概率地图),记录每个像素的概率,即相应的像素在源图像中的肤色,通过比较彩色图像的颜色与前一帧脸孔的颜色进行计算。

彩色图像和概率地图存储在quarter-resolution,足以保证精度的同时最小化内存和带宽需求。预处理内核可以并行处理源图像的像素:每个工作项处理一个独立的4×4块像素,输出彩色图像的一个像素和一个像素的概率分布位置。

碎片生成

为了便于并行处理,源图像分为多个碎片,这样可以在不同的GPU集群独立处理。这些区域被描述成使用一副完整的图片简化计算Haar-like特性。

级联分类

级联分类器限制其搜索附近的前一帧发现的任一脸(及周边地区),肤色区域通过二值化概率地图确定,并且地区被随机选中候选人生成器选择。相比,连续的滑动窗口方法所需的CPU、GPU并行工作项可以评估多个窗口。一个算法的属性是比其他的更早一些完成评估,每个窗口需要从1到100的计算阶段。为保持并行工作,当一个工作项完成评估,那么另一个窗口就开始评估了。

寻找肤色区域

皮肤区域检测器发现高概率的概率地图区域,传递这些坐标到级联分类器。

实现零拷贝

CPU的代码通过c++和OpenCL的GPU内核实现。正如下图所示,创建一个Android演示应用程序使用PowerVR成像框架(在本系列的上一篇文章已经介绍)。这个框架允许将人脸检测算法通过ISP,GPU和CPU有效的进行流水线式管理,利用共享零拷贝内存和缓存分配实现同步开销最小化。

使用PowerVR成像框架创建一个Android应用程序

使用PowerVR成像框架创建一个Android应用程序

当应用程序集成到基于PowerVR成像框架SDK, Imagination的优化人脸检测算法能实时检测出四张脸并加工成1080 p 30帧使用两个集群GPU局部时钟在200 mhz。这使得大量的空间结合其他任务到软件流水比如在图像稳定之前和图像美化之后,同时仍达到1080p 30fps的性能,这种性能是今天的市场上很多的手机和平板电脑产品所需求的。

结束语

Imagination的硬件组合使硅供应商生产芯片,其可以在电量缺少和热封装范围内提供最佳性能。其PowerVR gpu提供所需的性能和灵活性来加速在当今市场上许多手机和嵌入式设备的图形和数据并行处理。

通过配对Imagination与PowerVR成像硬件框架,设计师现在可以利用大量的性能用于其目标SoC包括GPU,ISP、CPU、视频编解码器和硬件加速器。Imagination的亲密合作伙伴与战略合作oem和在某些情况下他们的第三方软件合作伙伴已经帮助提供新的计算机摄影和计算机视觉的应用到市场,智能分配所需的计算贯穿在现有的多样化硬件组件。

补充书目

这是一个菜单用来来帮助你浏览每一篇文章,这些都发表在这个异构计算文章系列中:

用于异构计算的手机系统的初级教程
快速指南写作OpenCL内核针对PowerVR Rogue gpu
对异构软件提高性能和功率效率
针对Android的PowerVR成像协议
异构计算案例学习:图像卷积滤波
深潜水:用PowerVR实现计算机视觉
第1部分:计算机视觉算法
第2部分:针对计算机视觉的硬件IP
第3部分:在 PowerVR上实现OpenCL人脸检测
在PowerVR成像协议中支持零拷贝流
PowerVR成像协议的相机模块
测量GPU计算性能
magination的智能、高效的移动计算方法
关于PowerVR异构计算的完整术语表

原文链接:
http://blog.imgtec.com/powervr/deep-dive-opencl-face-detection-on-powervr

--电子创新网--
粤ICP备12070055号