基于FPGA的VGG16卷积神经网络加速器--WL

VGG16是一个典型的卷积神经网络,由13层卷积层,5层池化层和3层全连接层组成。且卷积层的计算时间在整个计算过程中占比极大,通过FPGA的并行运算可以有效的加快卷积层的计算速度。

基于FPGA的VGG16卷积神经网络加速器--WL_第1张图片
一个卷积层可以有若干个卷积核,以第一层为例,该层对应的卷积核为64个3×3×3的卷积核,3×3是卷积核的尺寸,相当于将1个卷积核也按照RGB 分成3份(卷积核的通道数=输入图片的通道数),对其进行卷积也就是乘加运算。

以尺寸为7×7的3通道图片与2个3×3的3通道卷积核为例
基于FPGA的VGG16卷积神经网络加速器--WL_第2张图片
采用SoPC(ARM+FPGA),通过C语言将数据放置在片外SDRAM中,并向硬件中的卷积状态机传输地址,通道数,卷积核数等参数和一个卷积使能信号。通过FPGA来进行卷积运算。

第一层的数据在SDRAM中的排列顺序如下:
基于FPGA的VGG16卷积神经网络加速器--WL_第3张图片
硬件架构如下图,卷积状态机conv_state控制全部的计算过程,当PE单元完成1次计算并输出后,状态机控制DMA加载数据继续计算,直至全部完成。
基于FPGA的VGG16卷积神经网络加速器--WL_第4张图片
卷积层第一二层的计算流程图如下:
基于FPGA的VGG16卷积神经网络加速器--WL_第5张图片
在片上内存中存储整层的权重数据和3×3×channel个图片数据。

每次从片上内存中加载64个权重和1个图片数据,在PE单元的64个mac单元中同时进行1个权重×1个图片输入,得到64个结果,存储在PE中,再重复上述过程3×3×channel次,加载数据并计算,将每次结果相加得到64个通道的一点输出数据。

加载下一个9×channel个图片数据到片上内存中,将其输入到PE计算,得到64个通道的第二点输出数据,重复加载图片数据,直至加载完全部的数据。

但是由于卷积层的权重数据不断增多,第13层达到51233*512个数据,FPGA内存资源有限,无法全部存入到片上内存中,所以采用循环输入的办法,每次只加载64个卷积核的64个通道,即64×3×3×64,计算完成后再加载剩余的通道,计算完全部通道后,加载64-128个卷积核的64个通道,64-128通道…,直至全部数据计算完成。
数据在SDRAM中的排列顺序如下:
基于FPGA的VGG16卷积神经网络加速器--WL_第6张图片
基于FPGA的VGG16卷积神经网络加速器--WL_第7张图片
基于FPGA的VGG16卷积神经网络加速器--WL_第8张图片
前一层卷积计算得到的结果经过包0处理后就可以作为下一层的输入存储到SDRAM中,每次的计算结果可先通过system console进行硬件验证。

你可能感兴趣的:(fpga开发,cnn,人工智能)