答辩完了,放上来毕设的最后一部分内容,CNN的硬件加速。大多数论文采用的FPGA加速大多基于HLS或是OpenCL,用高级语言编写的。我没有接触过,不知道转化为底层HDL效率如何。本科学了verilog,因此还是用的verilog HDL硬件语言设计的。
为了权衡系统资源及计算速度,制定了以下并行策略,如图所示。首先,第一层卷积单独采用移位寄存器结构加速(可以参考相关论文,使用大量乘法器,以计算资源换取速度,实现每个周期输出一个卷积结果),其它层卷积采用纯流水线的结构(即每个通道为一个乘法器+一个加法器)。由于带宽限制,第二层卷积采用通道分组策略,排队输出,最后完成通道合并。针对两款FPGA设定不同的组数。这种策略能实现组间的资源复用,减少资源消耗。
FPGA加速还有很多优化的空间。比如流水线以及资源复用这块,可以发挥FPGA的优势;量化这块,可以采用较小位数,牺牲部分精度而换取资源和速度;裁剪这块,结合全局均值池化、1*1卷积、剪枝等参数裁剪方法,减少参数移植;卷积结构这块,可以考虑像caffe那种使用toplitz矩阵形式的卷积计算,同样是资源换取速度的方法等等。