技术开发 频道

基于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 的所有流处理单元,进一步的在多个神经网络间进行并行,在同一时刻能计算多个网络的适应度。

  3) 数据结构

  考虑 CUDA 架构的特性[7][8],当全局内存访问能够合并时,内存带宽将达到最大,因此我们设计了如图 1 所示的数据结构。CMatrix中的每一列,是一个神经元的连接哈希表,而矩阵的宽度,则取为?单个网络中神经元个数16,不小于神经元个数的 16 的最小倍数, 以满足全局内存合并访问的要求。

  同时,在通常的可进化神经网络模型 Parcone 的数据结构中,为了随机变异连接权重因子时只改变权重因子的一个二进制位,防止突变过大,链接的权重因子通常需要使用一个二进制字符串来保存,不仅浪费空间,而且每次变异后还得重新计算 WeightValue 值,而在本数据结构中,我们充分利用位运算操作,实现了直接利用 WeightValue(float 型数据)进行单二进制位变异。不仅大大节省了空间,而且提高了速度。

  通过对数据结构的创新,相较于 Parcone 节约了 50%的空间,缓解了 GPU 与 CPU 之间缓慢的 PCIE 总线(理论值 4.2G/S,实际值通常不超过 3G/s)带来的传输瓶颈。

  4.实验及分析

  实验从 Color FERET 数据库中随机选择了 530 张人脸图片,进行简单的预处理后,随机选择一部分作为CuParcone 部分连接神经网络模型的输入, 经过遗传算法一定代数的演化后得到目标网络,再将目标作用于测试组图片进行性别识别。 实验对 CuParcone 与 Parcone 在运行时间进行比较, 并考察在不同参数下, CuParcone 模型的识别率。

  4.1.实验平台

  CUDA 计算平台硬件部分由主机端(host 端)和设备端(device 端)组成。其中主机端为普通 PC工作站,主要配置为 Intel Exon E3520 CPU,8G DDR2 RAM,300GHDD;设备端为一片 Tesla C1060 计算卡,其带有 4G DDR3 板载显存,GPU 内部有 240 个流处理器,达到 CUDA 1.3 计算能力。设备端和主机端通过 PCIE-X16 接口连接,理论带宽 4.2G/S。软件部分主要包括 Windows XP sp3, CUDA Toolkit 2.2,CUDA SDK 2.2,OpenCV 1.0 以及必要的系统驱动程序。

  4.2 图片预处理

  我们从Color FERET数据库中随机选择了530张人脸图片(265 张男性,265 张女性) ,这些图片既包含有正面的人脸 (如图 3-A,B,C) , 也有在-40°~40°之间的侧脸 (如图 3-D,E,F) 。随机选取 90 张男性图片,顺序编号 1-90,作为训练样本集正例。90 张女性图片,顺序编号 1-90,作为训练样本集反例。其余的 175 张男性图片以及 175 张女性图片构成测试样本集。首先,我们先从彩色图中剪切出人脸部分,然后采用以下方法分别获得图像 A、B、C

  1)进行锐化去色并压缩成 100 像素×100 像素,得到图像A,D(如图 3-A,D) ;

  2) 进行锐化并压缩成 50 像素×50 像素, 得到图像 B,E (如图 3-B,E) ;

  3) 进行锐化去色并压缩成 50 像素×50 像素, 得到图像 C,F(如图 3-C,F) 。

  在以下实验中,约定:若使用 N 张图片,则 N 张图片为对应集合中编号为 1-N 的图片

  4.3 实验设计与分析

  在我们的模型中,每个神经网络的输出值(Op)是介于-1~1 之间的实数。

  当男性测试样本输入到神经网络中时,若网络的输出Op>0.1,认为网络判断正确;当-0.1为网络无法判断此输入样本;当 Op<-0.1 时,认为网络判断错误。

  当以女性测试样本输入到神经网络时,若网络的输出Op<-0.1,认为网络判断正确;当-0.1为网络无法判断此输入样本;当 Op>0.1 时,认为网络判断错误。

  实验1 CuParcone 与Parcone 性能对比实验

  为了比较CuParcone 与Parcone 性能,以50px×50px图片作为训练样本和测试样本。 训练样本中包含 60 张作为正例的男性图片,60 张作为反例的女性图片;测试样本中则包含测试样本集中全部 175 张男性图片以及 175 张女性图片。在CuParcone 和Parcone 中同时演化40 代,对运行时间及识别率进行比较。

  神经网络结构为三层,如图 1,输入层神经元 I=2500;中间层神经个数 M=767,输出层神经元 O=1,每个神经元连接数 K=100. 演化参数为种群大小 Popsize=64,GPU 同时计算基因数 16。

  实验结果如表 1 所示。从中可以看出 CuParcone 相比Parcone 在速度上有了很大的提升。运行时间由原来的 33小时 48 分 52 秒减少至 376.65 秒,性能超过 2 个数量级,达到323.19 倍,使得 CuParcone 更能适应大数据量,多代数的演化。

  实验 2 CuParcone 在不同图片参数条件下识别率对比试验

  本实验以不同尺寸,不同色度,不同数量的图片作为训练样本,以测试样本集中相同的全部的 175 张男性图片以及 175 张女性图片作为测试样本。网络演化 500 代,重复实验 8 次,平均后得出对应的结果,实验结果见表 2,从中可以看出:

  1. 在使用灰度图的情况下,分辨率从 50×50 提高至 100×100 并不能带来识别率的提升。 而在课题组之前的研究中,当图片尺寸从 30×30 提升至 50×50 时识别率明显上升。这说明了对于性别识别,50×50 的分辨率已经足以让CuParcone 模型区分出相应特征。

  2. 在相同分辨率情况下,使用彩色图片,对于男性,能明显提升识别率,从 83.07%上升至88.97%。而对于女性则略有下降,从 93.71%下降至92.71%,其原因可能是彩色图片中女性首饰颜色样式,头发颜色等较灰度图明显,使得样本聚合度下降。总体上来说,使用彩色图片对平均识别率的提高有帮助。

  3. 在相同图片尺寸下,当训练样本数增加时,识别率上升明显, 尤其是男性识别率, 从75.64%上升到83.07%。这是因为训练样本中信息量的增加使得网络能更好的区分出性别特征

  4. 使用 50×50 彩图,90 训练正例 90 反例时,训练效果优秀,500 代后网络的平均识别率可达到90.84%。

 实验及分析

  5.结论

  本文针对 Parcone 模型运行速度慢的缺点,提出了基于 CUDA 并行计算技术的 CuParcone 模型, 并将其应用到人脸性别检测中。利用 CuParcone 模型进行模式识别,既保留了 Parcone 不需进行特征抽取的优点,又大幅提高了演化训练的速度,克服了 Parcone 训练时间过长,难以适应大数据量演化的缺点。进一步的研究工作将把 CuParcone应用到更广泛的模式识别领域, 此外, 还将通过宏观多 GPU并行,微观 GPU 内部 CUDA多线程并行的多级并行体系,进一步提高CuParcone 模型的性能。

0
相关文章