基于FPGA实现的MobileNet V1,FPGA深度学习加速器设计 CNN Accelerators based on FPGAs

Automatic Generation of Multi-precision Multi-arithmetic CNN Accelerators for FPGAs

最近arXiv上挂出来一篇文章,采用FPGA实现MobileNet V1,并且完全是不借助片外资源,用的是on-chip memory,没有利用off-chip RAM。整个模型在FPGA的内部有限资源上实现的。能够使得帧率在3000 FPS,这个是最近我看到的一个很快的实现速度了。整个网络采用了多精度实现,而且是软硬件结合的方式。整个实现流程如图所示。

基于FPGA实现的MobileNet V1,FPGA深度学习加速器设计 CNN Accelerators based on FPGAs
图1: 基于FPGA实现的MobileNet V1加速器设计流程

 

整个卷积的计算采用的寄存器实现,能够高效的进行操作。这个工程量还是非常大的。

基于FPGA实现的MobileNet V1,FPGA深度学习加速器设计 CNN Accelerators based on FPGAs
图2: 网络的实现过程

 

整体实现难度很大,需要仔细的去看实现细节。在真实实现过程中,问题还是很多。各种配置文件。c++写一些比较上层难以优化和实现的算法和代码。下端verilog写卷积的模板文件,以及可分离卷积,这些规则极强,大量for循环计算的模块,Verilog效率高。混合精度的实现,需要利用寄存器来发挥优势,而浮点数据的操作,就要消耗更多资源,这时候需要用上层一点的类似于HLS来实现。整个流水的设计,需要紧密的在每一层上做好时钟计算和设计,上一层的网络输出结果,以如何的方式,直接接入下一层的计算。整个流水排开之后,才能达到所叙述的3000fps。单独处理一张图片,应该是不能达到的。

基于FPGA实现的MobileNet V1,FPGA深度学习加速器设计 CNN Accelerators based on FPGAs
图3:流水现实过程

 

论文链接:Automatic Generation of Multi-precision Multi-arithmetic CNN Accelerators for FPGAs https://arxiv.org/pdf/1910.10075v1.pdf