cnn-卷积神经网络在fpga上实现(一).docxVIP

cnn-卷积神经网络在fpga上实现(一).docx

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
cnn-卷积神经网络在fpga上实现(一)

CNN - 卷积神经网络在FPGA上的实现(一) 卷积神经网络(CNN)已被证明在复杂的图像识别问题上非常有效。 本文将讨论如何使用Nallatech公司基于Altera OpenCL软件开发套件编程的FPGA加速产品来加速CNN卷积神经网络的计算。 可以通过调整计算精度来优化图像分类性能。 降低计算精度可使FPGA加速器每秒处理越来越多的图像。 Caffe 深度学习框架 Caffe是一个深度学习框架,具有表达力强、速度快和模块化的思想,由伯克利视觉学习中心(BVLC)和社区贡献者开发。网站 / Caffe框架使用XML接口来描述特定CNN卷积神经网络所需的不同处理层。 通过实施层的不同组合,用户能够根据其给定的需求快速创建新的网络拓扑。 Caffe框架最常用的处理层主要有: 卷积层:卷积层将输入图像与一组可学习的滤波器进行卷积,每个滤波器在输出中产生一个特征图 池化层:池化最大可以将输入图像分割成一组非重叠的矩形,并且对于每个这样的子区域,输出最大值 线性修正(ReLU)层:给定输入值x,如果x 0,则ReLU层将计算输出为x,如果x = 0则计算输出为negative_slope * x。 IP/FC层:将图像视为单个向量,每个点对新输出向量的每个点有贡献 通过将这4层移植到FPGA,绝大多数正向处理网络可以使用Caffe框架在FPGA上实现。要访问加速卡上的FPGA版本的代码,用户只需要更改Caffe XML网络描述文件中的CNN - 卷积神经网络层的描述,这等同于修改FPGA代码版本。 图1:典型的CNN - 卷积神经网络的示例图 ImageNet卷积神经网络 图2:ImageNet CNN - 卷积神经网络 ImageNet是一个备受推荐且使用最为广泛的CNN卷积神经网络,具有免费的训练数据集和基准。 本文讨论了针对ImageNet CNN - 卷积神经网络的FPGA实现,当然这里使用的方法同样适用于其他网络。 图2显示了ImageNet CNN - 卷积神经网络所需的不同网络层。 有5个卷积和3个FC层。 这些层占用该网络处理时间的99%以上。 对于不同的卷积层,有3种不同的滤波器尺寸,分别为11×11,5×5和3×3。 因为每个层的计算时间根据所应用的滤波器的数量和输入图像的大小而不同,所以为不同的卷积层优化不同的层将效率是比较低的。 为了避免这种低效率,使用最小的滤波器(3×3)作为较大卷积块的基础。 由于它们处理的输入和输出特征的数量,3×3卷积层是计算量最大的 较大的滤波器尺寸可以用较小的3×3滤波器的多次表达。 这虽然会降低内核处理的效率,但允许不同层之间的逻辑重用。 这种方法的成本如表1所示。 表1:卷积核效率 3×3卷积核也可以被FC层使用。 表2:使用3×3滤镜时的ImageNet层计算要求 FPGA 逻辑器件 FPGA器件具有两种处理资源类型,即DSP和ALU逻辑。 DSP逻辑是针对大型(18×18位)浮点乘法或乘法运算器优化的专用逻辑。 这比使用ALU逻辑更有效率,因为这样的乘法资源消耗很大。 鉴于DSP操作中的乘法通用性,FPGA供应商为此提供了专门的逻辑。 Altera做的更进一步,允许重新配置DSP逻辑来执行浮点运算。 为了提高CNN卷积神经网络处理的性能有必要增加在FPGA中实现的乘法次数。 另一种方法是降低位精度。 Bit 精度 大多数CNN实现使用浮点精度来进行不同的层计算。 对于CPU或GPU实现这不是问题,因为浮点IP是芯片架构的固定部分。 对于FPGA来说,逻辑元素不是固定的。 Altera的Arria 10器件嵌入了可以用于固定点乘法的浮动DSP模块。 实际上,每个DSP组件可以用于两个独立的18×19位乘法。 通过使用18位固定逻辑执行卷积,与单精度浮点相比,可用运算符的数量加倍。 图4:Arria 10定点DSP配置 根据CNN卷积神经网络的应用性能要求,可以进一步降低位精度。 如果乘法的位宽可以减少到10位或更少,则可以仅使用FPGA ALU有效地执行乘法。 与使用FPGA DSP逻辑相比,这样可以增加可乘数。 OpenCL库函数 Altera提供了将用户定义和优化的IP组件纳入其编译器工具流程的能力。 这允许使用标准库符号创建和包含这样的优化功能。 库组件允许有经验的HDL程序员以汇编语言程序员创建的方式创建高效的实现,并且包含x86优化的函数。 对于ImageNet使用的CNN - 卷积神经网络层,简单的定点实现可以采用10位系数来获得的最小减少量,这相对于单精度浮点运算保持小于1%的误差。 因此创建10位3×3卷积的优化库,受FPGA资源的限制,这个库被实现(复制)多次。 图5:Arria 10 GX1150资源 Arria10最大的可用设备是GX 1150.该

文档评论(0)

celkhn0303 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档