技术开发 频道

基于GPU的部分神经连接神经网络

  【IT168 技术】

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

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

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

  摘 要

  基于 GPU 的并行架构,实现了部分神经连接神经网络演化计算的模型 CuParcone(CUDA based Partially Connected Neuralolutionary),并将其应用于人脸性别识别。CuParcone利用 GPU 强大的并行计算能力,相较于PC 的Parcone模型,取得了 323 倍的能提升,并能获得相当高的识别率,对于从 Color FERET数据库中随机选择的,平面外旋转-40°~40°的 265 张男性和 265 张女性脸,取得了平均 90.84%的识别率。

  1.引言

  性别识别是视觉领域中非常重要的工作,许多的社会工作完全靠正确的性别识别来保证。同时,性别识别也能作为其他视觉识别的基础,例如在人脸识别前先进行性别识别,可以大大降低所需要的检索量。随着计算机视觉以及人机交互技术的发展,基于计算机视觉系统的性别识别将会在我们的生活中扮演越来越重要的角色。

  因为人脸为性别识别提供了大量重要的信息,研究人员已经提出了许多针对人脸的性别分类器在最近几年,Moghaddam提出利用非线性支持向量机(SVM)对于低清晰度的小图片进行性别分类[1],张建明等人针对支持向量机(SVM)在超平面附近进行性别识别的不准确性,提出引入进行加权的 K 近邻(KNN)算法[2]。 Lowe 等人提出基于 SIFT进行特征抽取的性别分类器。 Shakhnarovich 利用 Adaboost开发了一套实时人脸检测及人种分类系统,对来自真实世界中非标准化的人脸图像识别取得了比SVM更好的效果[3]

  2008 年,Hugo de Garis 提出部分连接神经网络Parcone[4](Partially Connected Neural Evolutionary) ,利用演化算法来训练部分连接的神经网络,将其应用到人脸识别,颜色识别等方面,并取得很好的效果。该模型在进行模式识别时,不必进行特征提取,而是将包含人脸图像的整个区域放入模型中训练,由神经网络在训练中透明地选择识别特征。这样既可充分利用图像中蕴含的重要信息,又不会陷于维数灾难。2009 年,黄昌琴成功地将 Parcone模型用于人脸性别识别,并取得了不错的效果。

  尽管基于演化计算的部分神经网络在模式识别中得到了很好的应用,但该模型的输入神经元远比传统的神经网络多,因此训练时间很长,基于 Parcone 的研究应用遇到了很大的计算能力方面的障碍。例如,杨晔在人脸识别领域已经取得了 98.9%的正确率[5], 却无法实现在线实时或准实时训练,在机器人上的应用遇到了困难。

  为了解决计算能力瓶颈的问题,以往主要从两方面着手:一是减少模型的计算复杂度,二是利用基于 CPU 的多核运算集群;对于本问题来说,如果采用第一种方法,就必须限制输入神经元的个数。然而,能处理具有上万个输入的神经网络,正是 Parcone 模型的优势和特点所在;如果利用第二种方法,又具有构建成本高,功耗大;便携性差、维护性差等缺点。

  在保持Parcone模型具有大量输入神经元优点的前提下,本文对 Parcone 模型从数据结构、算法等方面进行了充分优化和并行化改造,实现了基于 CUDA 的部分连接神经网络模型 CuParcone 的构建。该计算模型充分发挥了 CUDA强大的计算性能,在实际应用到人脸性别识别上,保持相近的识别率的同时,计算效率比基于 PC的 Parcone 提高323 倍。

  2.CUDA

  CUDA是美国 NVidia 公司推出的基于 GPU 的并行计算模型以及配套的软硬件环境[7][8], 只对 ANSI C 进行了最小的必要扩展,以实现其关键特性:线程按照两个层次进行组织、共享存储器和栅栏同步。这些关键特性使得CUDA 拥有了两个层次的并行:线程级并行实现的细粒度数据并行,和任务级并行实现的粗粒度并行。

  Tesla是NVidia公司推出的基于CUDA技术的体系架构,使用了新的统一着色单元替代了原来分离的顶点与像素着色单元,能够通过 C 语言在 CUDA 并行编程模型下,使用相应的开发工具满足高性能通用计算的需要。使用Tesla 图形处理和计算架构的 GeForce 系列和 Quadro 系列GPU,被广泛应用于笔记本电脑,桌面计算机,工作站和服务器中。

  在本文中,我们利用一块 Tesla C1060 计算卡,以及一套图形工作站组成了 Tesla 高性能运算平台。 组建成本为 5 万元,却提供了约 250Gflops 的浮点运算吞吐量,约等于一套价值数百万的 CPU 运算集群的运算性能。同时图形工作站还兼作机器人语言,逻辑,行为控制平台。

  3. CuParcone 部分连接神经网络模型

  CuParcone 模型基于 CUDA 计算平台, 对 Parcone 的数据结构和算法进行并行化改造和优化,具有训练时间短,数据结构简练,节约空间等特点,其算法的主要思想是神经网络通过遗传算法逐步演化,最终达到设计要求。其网络结构,标准化函数 Si,信号激励函数 Ai 与 Parcone 模型完全相同[4],在此对于共同的部分不做过多赘述,详见我们之前的工作[4][5]。

  CuParcone相较于Parcone主要做了以下三方面的改进,通过这三方面的改进,充分的发挥了 CUDA 的性能。

  1) GPU 与 CPU 协同工作

  CuParcone 模型所采用的遗传算法包括适应度计算,选择,复制,变异四种操作,其中,变异操作既包括神经元连接权值的变异,也包括随机添加或删除连接。在CuParcone 中,将运算量最大,同时又最符合 CUDA 单指令多操作数(SIMD)特性的适应度计算部分放至 GPU 上计算,而将分支指令多,随机访存多的变异和复制部分留在 CPU 上。这样能取长补短,充分发挥 CPU 和 GPU 各自的性能。

  2) 内存访问及并行度优化

  在 CUDA 架构中,影响性能的主要因素有两个,一是显存访问速度和有效带宽;二是有充分多的任务保证流处理单元利用率。二者相辅相成,一方面,提高流处理单元的利用率,保证流处理单元不断流,从而隐藏显存访问的延时。另一方面,提高显存访问带宽,减小访问延迟,也加快了流处理单元的周转速度。

  对于一,一方面,我们通过数据结构的设计保证了显存访问的对齐性[7],充分利用了显存带宽;另一方面,对于诸如信号表访问这类随机访存为主的只读访问,则利用GPU 的纹理缓存的 Cache 来进一步提高显存访问速度。对于二,我们将每一个非输入神经元对应一个 CUDA 线程,同时以恰当的参数(Blocksize=256)组织线程[8],考虑到当网络规模较小时单个神经网络可能不足以利用 GPU 的所有流处理单元,进一步的在多个神经网络间进行并行,在同一时刻能计算多个网络的适应度。

0
相关文章