文章目录

  • 1. 神经网络计算模型
  • 2. 卷积计算并行性分析
    • 2.1 卷积窗口内部并行
    • 2.2 相同特征图卷积窗口间并行实现分析
    • 2.3 不同输入特征图卷积窗口并行
    • 2.4 不同输出特征图并行
  • 3. 激活函数的实现
  • 4. 基于FPGA的加速器设计
    • 4.1 整体结构
    • 4.2 卷积计算单元

这是浙大余子健的研究生毕业论文,也是我阅读的第一篇文献。

1. 神经网络计算模型

上图为典型的卷积神经网络的结构。在图中C层代表的是卷积层,S层是子采样层,F代表全连接层。C层与S层是交替出现的。卷积层即特征提取层,子采样层可以二次平均和局部提取。卷积层是FPGA要加速的重点

上图是一个典型的卷积层,N个输入特征图,M个输出特征图,将会有N*M个卷积核 (Kernals)。这点我觉得很重要:不同的输入特征图,卷积核一定不同;不同的输出特征图,卷积核也一定不同。
具体的卷积和子采样计算过程不赘述。

2. 卷积计算并行性分析

这一部分是整个论文的核心。在该部分的讨论中,所有的并行情况都单独考虑,不设计多个组合的情况。

2.1 卷积窗口内部并行

即某一个卷积窗口的卷积计算的并行。通常在实现时会加入流水线技术,并行度为N时在单周期可完成N次乘累加。

一个小错误:上图中最左上角的X(n, 0)应该是X(n, 3)。
以第一行(行n)为例来说明该流水线是如何工作的,在第一个时钟周期,执行X(n, 0)*W00;第二个时钟周期,X(n, 1)*W01,并加上X(n, 0)*W00的计算结果, 此外,第一级流水线还会计算X(n, 1)*W00,即下一个卷积窗口的第一个计算值;第三个时钟周期,第三级流水线执行X(n, 2)*W02 + X(n, 1)*W01 + X(n, 0)*W00,第一级流水线执行X(n, 2)*W00,第二级流水线执行X(n, 1)*W00 + X(n, 2)*W01。以此类推。

2.2 相同特征图卷积窗口间并行实现分析

相同特征图内不同卷积窗口的并行,易理解如下图。

2.3 不同输入特征图卷积窗口并行

如上图所示为不同输入特征图的同一卷积窗口的并行,原理很好理解。

2.4 不同输出特征图并行

原理与不同输入特征图的并行基本相同。
到这里为止,四种由小到大,由细到粗的并行结构就结束了,这四种并行结构可以进行组合,在数据带宽和运行效率之间做出平衡。

3. 激活函数的实现

神经元的缴活函数实现是一个重要的环节,其导数的变化范围影响网络的收敛速度和学习速度。常用的激活函数有sigmoid,双曲正切等。激活函数的数字电路实现方式主要有以下方式:

  1. 泰勒级数展开
    可通过求激活函数的五阶泰勒级数来实现。这种方法精度损失小,占用很少存储器空间,但需要比较多的计算单元,并且通用性差。
  2. 简单的查找表
    通过传统的查找表方式将所有结果保存在存储器中来实现。这种方法具有较高的灵活性,精度可任意调整,消耗运算资源少,但随着精度要求的提升,存储器资源的负担也指数增长。例如一个16位输入,16位输出的查找表,其消耗的存储器大小为128KB。
  3. 分段线性逼近
    分段线化(PWL)逼近的基本思想是用一系列折线来逼近激活函数。在实现的时候,可将分段函数的断点存入查找表,断点间的区间用线化函数来得到中间值。这种方式占用存储器资源少于查找表,消耗计算单元也小于泰勒展开。
    PWL实现方式如下:在函数f(x)上选择一个线性区,并设定最大允许误差。比较线性区原函数与线性函数之间的误差,直至到达最大误差时,从该点开始一个新的线性区。重复上述操作直至函数定义域内所有区域均已遍历。
  4. CORDIC算法
    CORDIC算法本质是利用一组常数的角度基底去逼近任意一个旋转角度,通过多次迭代可得到任意分辨率输入数据的结果,消耗一定的运算资源,适合精度要求较高的实现场合。

4. 基于FPGA的加速器设计

4.1 整体结构

加速器的整体结构如上图所示。注意,要加速的过程是前向预测过程,反向训练以得到参数的过程是在主机上完成的。 主机把权值和图像以及指令传给FPGA,FPGA计算结束后将结果传回主机。

4.2 卷积计算单元

卷积运算是本次设计的优化重点,其实现决定了CNN计算单元的整体结构。由于CNN是一个前向传播结构,层间运算具有独立性且各层运算具有高度相似性,因此可通过复用单层运算资源来实现完整的CNN神经网络计算,在实现过程中只需实现单层的卷积计算结构。

上图是计算过程。在该实例中,有4副输入特征图,4副输出特征图,核的大小为3*3,上图中分左边阶段和右边阶段。采用并行性组合的方式,输出特征图之间的并行度为2,即同时计算两个输出特征图;输入特征图之间的并行度为2,即同时计算两个输入特征图;同一输入特征图不同卷积窗口的并行度为2,即同时计算两个卷积窗口。
如右阶段所示,把两输出特征图的计算完成后,接着计算剩下两副输出特征图的结果。

基于FPGA的卷积神经网络加速器_余子健相关推荐

  1. 基于FPGA的卷积神经网络加速器研究

    摘 要 卷积神经网络(Convolution Neural Network,CNN)是在计算机视觉,图像识别和 分类等领域应用最成功的人工神经网络数学模型.高性能神经网络结构规模庞大,一次 完整推理过 ...

  2. 【基于zynq的卷积神经网络加速器设计】(一)熟悉vivado和fpga开发流程:使用Vivado硬件调试烧写hello-world led闪烁程序实现及vivado软件仿真

    HIGHLIGHT: vivado设计流程: note: 分析与综合 和 约束输入 可以调换顺序 [基于zynq的卷积神经网络加速器设计](一)熟悉vivado和fpga开发流程:使用Vivado硬件 ...

  3. 基于FPGA的卷积神经网络实现(七)数据读写

    目录: 简介 框架 资源分配(1) 资源分配(2) 数据量化(1) 数据量化(2) 数据读写 卷积模块 池化.全连接与输出 我发现点下面的链接会跳到一个不知道是谁的CSDN下面需要付费下载,这个很迷惑 ...

  4. 用FPGA加速卷积神经网络的知识储备

    用FPGA加速卷积神经网络的知识储备 1.FPGA 1.FPGA分类 2.开发工具 3.开发工具2 2.卷积神经网络 1.卷积神经网络基础 2.开发语言 3.总结 参考内容 本文是我经过一段时间学习的 ...

  5. 【论文精读】GoSPA:一种高能效高性能的全局优化稀疏卷积神经网络加速器

    GoSPA: An Energy-efficient High-performance Globally Optimized SParse Convolutional Neural Network A ...

  6. 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(一)

    [深度学习]基于Pytorch的卷积神经网络API妙用(一) 文章目录 1 不变性 2 卷积的数学分析 3 通道 4 互相关运算 5 图像中目标的边缘检测 6 基于Pytorch的卷积核 7 特征映射 ...

  7. 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(二)

    [深度学习]基于Pytorch的卷积神经网络API妙用(二) 文章目录1 Padding和Stride 2 多输入多输出Channel 3 1*1 Conv(笔者在看教程时,理解为降维和升维) 4 池 ...

  8. 基于Python的卷积神经网络和特征提取

     基于Python的卷积神经网络和特征提取 发表于2015-08-27 21:39| 4577次阅读| 来源blog.christianperone.com/| 13 条评论| 作者Christi ...

  9. 基于Keras的卷积神经网络(CNN)可视化

    基于Keras的卷积神经网络(CNN)可视化 标签(空格分隔): 深度学习 卷积神经网络可视化 本文整理自Deep Learning with Python,书本上完整的代码在 这里的5.4节,并陪有 ...

  10. 论文浅尝 | 基于注意力图卷积神经网络的依存驱动关系抽取

    笔记整理:王大壮 论文链接:https://aclanthology.org/2021.acl-long.344.pdf 动机 句法信息,特别是依存树,已经被广泛应用于关系提取,以更好地分析与给定实体 ...

最新文章

  1. R语言回归模型协方差分析(Analysis of Covariance)
  2. 怎么解释三线圈直流电机工作原理更好?
  3. STlink下载出现st-link usb communication error解决方法
  4. WordPress中J.parentNode’为空或不是对象的解决方法
  5. 【PC工具】图片批量添加水印工具,绿色免安装工具软件,妈妈再也不用担心我.....
  6. oracle standby同步,ORACLE 利用rman增量备份同步standby库
  7. C#Winform怎么让控件随着主界面大小变化
  8. UValive4195 Heroes of Money and Magic
  9. 用链表队列实现基数排序;
  10. delphi 2010 mysql_delphi2010读取MySQL数据库TEXT类型乱码的解决方案
  11. 酷家乐面试经历(图形引擎渲染工程师)
  12. 20.4版本Ubuntu中部署LAMP环境,部署论坛discuz
  13. oracle imp00069,imp-00069 如何解决啊?不是字符集问题
  14. 我也曾经是“不适合”编程的人
  15. 毕业设计-基于微信小程序的电影票网购系统
  16. 升级光伏供应链体系,供应商系统规范供应商管理,促进企业与供应商高效协同
  17. 2019.6月全国房价地图
  18. Eclipse导出JavaDoc中文乱码问题解决
  19. FBI阅人术——用最短的时间了解一个人
  20. 哨向 Mika Lelush 3

热门文章

  1. git大坑---cleanup
  2. 1寸证件照排版、1寸照片、1寸证件照尺寸,不改变图片大小改分辨率,不改变分辨率改变(保证分辨率)...
  3. 入职Apifox研发组三个月,我领悟了30个高效开发方法
  4. 查询计算机物理地址指令,怎么查询mac地址命令_如何查mac地址
  5. 【BLE-CC2640】CC2640之OLED
  6. Pytorch文本分类
  7. Maven创建一个Servlet项目(五)
  8. 计算机系统结构变革在即?
  9. 邮件群发软件如何群发邮件,企业邮箱可以吗?
  10. 青春是一列不再回头的火车…