赞
踩
上图为典型的卷积神经网络的结构。在图中C层代表的是卷积层,S层是子采样层,F代表全连接层。C层与S层是交替出现的。卷积层即特征提取层,子采样层可以二次平均和局部提取。卷积层是FPGA要加速的重点。
上图是一个典型的卷积层,N个输入特征图,M个输出特征图,将会有N*M个卷积核 (Kernals)。这点我觉得很重要:不同的输入特征图,卷积核一定不同;不同的输出特征图,卷积核也一定不同。
具体的卷积和子采样计算过程不赘述。
这一部分是整个论文的核心。在该部分的讨论中,所有的并行情况都单独考虑,不设计多个组合的情况。
即某一个卷积窗口的卷积计算的并行。通常在实现时会加入流水线技术,并行度为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。以此类推。
相同特征图内不同卷积窗口的并行,易理解如下图。
如上图所示为不同输入特征图的同一卷积窗口的并行,原理很好理解。
原理与不同输入特征图的并行基本相同。
到这里为止,四种由小到大,由细到粗的并行结构就结束了,这四种并行结构可以进行组合,在数据带宽和运行效率之间做出平衡。
神经元的缴活函数实现是一个重要的环节,其导数的变化范围影响网络的收敛速度和学习速度。常用的激活函数有sigmoid,双曲正切等。激活函数的数字电路实现方式主要有以下方式:
加速器的整体结构如上图所示。注意,要加速的过程是前向预测过程,反向训练以得到参数的过程是在主机上完成的。 主机把权值和图像以及指令传给FPGA,FPGA计算结束后将结果传回主机。
卷积运算是本次设计的优化重点,其实现决定了CNN计算单元的整体结构。由于CNN是一个前向传播结构,层间运算具有独立性且各层运算具有高度相似性,因此可通过复用单层运算资源来实现完整的CNN神经网络计算,在实现过程中只需实现单层的卷积计算结构。
上图是计算过程。在该实例中,有4副输入特征图,4副输出特征图,核的大小为3*3,上图中分左边阶段和右边阶段。采用并行性组合的方式,输出特征图之间的并行度为2,即同时计算两个输出特征图;输入特征图之间的并行度为2,即同时计算两个输入特征图;同一输入特征图不同卷积窗口的并行度为2,即同时计算两个卷积窗口。
如右阶段所示,把两输出特征图的计算完成后,接着计算剩下两副输出特征图的结果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。