基于FPGA的卷积网络加速设计

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hunterlew/article/details/79104004

       答辩完了,放上来毕设的最后一部分内容,CNN的硬件加速。大多数论文采用的FPGA加速大多基于HLS或是OpenCL,用高级语言编写的。我没有接触过,不知道转化为底层HDL效率如何。本科学了verilog,因此还是用的verilog HDL硬件语言设计的。

       传送门如下:https://github.com/hunterlew/convolution_network_on_FPGA

       有两个文件夹,分别是v7-415t和v7-485t FPGA仿真实现。为了简化设计,仅仅仿真了7层的网络,并用16位有符号定点数保证精度。由于资源不同,实现上有细微差别,以保证资源够用。因为文件大小限制,只能上传verilog文件而无法上传工程。

       为了权衡系统资源及计算速度,制定了以下并行策略,如图所示。首先,第一层卷积单独采用移位寄存器结构加速(可以参考相关论文,使用大量乘法器,以计算资源换取速度,实现每个周期输出一个卷积结果),其它层卷积采用纯流水线的结构(即每个通道为一个乘法器+一个加法器)。由于带宽限制,第二层卷积采用通道分组策略,排队输出,最后完成通道合并。针对两款FPGA设定不同的组数。这种策略能实现组间的资源复用,减少资源消耗。

       FPGA加速还有很多优化的空间。比如流水线以及资源复用这块,可以发挥FPGA的优势;量化这块,可以采用较小位数,牺牲部分精度而换取资源和速度;裁剪这块,结合全局均值池化、1*1卷积、剪枝等参数裁剪方法,减少参数移植;卷积结构这块,可以考虑像caffe那种使用toplitz矩阵形式的卷积计算,同样是资源换取速度的方法等等。

猜你喜欢

转载自blog.csdn.net/hunterlew/article/details/79104004