卷积神经网络的FPGA硬件加速——QMJ

一、本次实验目的:

1)学习卷积神经网络;

2)FPGA中实现卷积运算。

二、脉动阵列结构设计

   PE(处理单元)的内部结构设计如图1所示,PE完成乘加运算得到的结果保存于寄存器中,其中IN和W表示1个字节(8bit)的输入和权重数据传递到PE。

卷积神经网络的FPGA硬件加速——QMJ_第1张图片

图1 PE结构

  图2中,W、IN和OUT表示阵列的输入和输出,脉动阵列一行4个PE单元组成一组。

  脉动阵列PE得到的结果传递到out1,out2,out3的步骤:

  第一步:PE单元完成4次乘加运算;

  第二步:将一组PE得到的结果,从左到右依次传递给out1[0:7],out1[8:15],out1[16:23],out1[24:31];

  第三步:PE的寄存器进行清零,再开始执行第一步。
卷积神经网络的FPGA硬件加速——QMJ_第2张图片

图2 阵列结构

三、脉动阵列的数据流动

  本次卷积计算过程中,输入矩阵选用的是5*5的矩阵数据,权重选用的是3个2*2的矩阵数据。
  图4显示IN矩阵在向脉动阵列传递数据过程中,将5*5的矩阵分成了两个4*5的矩阵IN1,IN2,分别选取的是IN矩阵1~4行和2~5行的矩阵数据。
卷积神经网络的FPGA硬件加速——QMJ_第3张图片

图3 卷积矩阵

  图4显示IN矩阵在向脉动阵列传递数据过程中,将5*5的矩阵分成了两个4*5的矩阵IN1,IN2,分别选取的是IN矩阵1~4行和2~5行的矩阵数据。
卷积神经网络的FPGA硬件加速——QMJ_第4张图片

图4 输入矩阵

  图5表示的是输入矩阵IN和权重矩阵W,将数据传输到脉动阵列过程中的数据传递方式。

  输入矩阵IN数据 [ INi ] [ i ] [ j],其中INi表示选取输入矩阵的分矩阵,i,j分别对应输入矩阵的行和列。

  权重矩阵的输入过程中 [ Wi] [r] [c],其中Wi表示权重矩阵的选取,r,c分别表示权重矩阵的行和列。
卷积神经网络的FPGA硬件加速——QMJ_第5张图片

图5 脉动阵列数据传递

  图5脉动阵列中PE[1][1]和PE[1][2],在图5中仅展示的数据,实现权重矩阵W1和IN矩阵的计算如图6,图7所示。
卷积神经网络的FPGA硬件加速——QMJ_第6张图片

图6 PE[1] [1]

卷积神经网络的FPGA硬件加速——QMJ_第7张图片

图7 PE[1][2]

  之后,脉动阵列的行输入,由权重矩阵数据重复输入;脉动阵列的列输入,由矩阵IN1和IN2的下一行数据传入。

四、实验结果分析

  本次实验在Modelsim中得到的仿真时序结果,截止全部卷积过程结束,所需的脉冲数大约为90次,若是在FPGA硬件上实现,时钟为50MHZ,所需时间约为1.8us。

卷积神经网络的FPGA硬件加速——QMJ_第8张图片

图8 仿真时序结果

  为了更好的观察实验的结果,3个权重矩阵得到的卷积结果被分别写入到3个.txt文件中。图9中每一行数字表示图2中out1从一组PE单元中得到十六进制结果。

卷积神经网络的FPGA硬件加速——QMJ_第9张图片

图9 权重矩阵W1卷积结果

你可能感兴趣的:(嵌入式,fpga开发,cnn,深度学习)