【超详细教程(附源码)】用FPGA加速卷积神经网络CNN运算
原创教程,转载请联系作者并注明出处:https://github.com/WalkerLau
源码地址:https://github.com/WalkerLau/Accelerating-CNN-with-FPGA
最近发现很多小伙伴都想用FPGA加速卷积神经网络运算,而恰好我刚做完的本科毕设就是这个题目,所以就有了写这个教程的想法,希望能给还没开始的小伙伴一点思路与帮助,更希望大神们给出一些进一步优化的建议。
最终加速性能
话不多说,先看最终的加速效果。本加速系统仅加速卷积层的运算,下图展示了仅采用CPU和采用CPU+FPGA加速系统来处理VIPLFaceNet人脸识别算法时,计算7个卷积层所耗费的时钟数的对比。由图可见,相比于4核ARM A53处理器,本加速系统最终可以对VIPLFaceNet的大部分卷积层实现45~75倍的运算加速。
项目描述及特点
本加速系统采用中科院计算所的SeetaFace人脸识别项目进行加速功能的验证,所用的卷积神经网络模型是VIPLFaceNet。本项目的设计工具是Xilinx SDSOC,个人认为这是个人或小团队进行FPGA嵌入式开发最高效的工具,因此不会涉及HDL的编写。本加速系统具有以下特点:
-
容易移植:本项目采用Xilinx SDSOC进行设计,可以直接把C/C++代码综合成FPGA电路,只需修改FPGA加速模块的代码中卷积层结构相关的参数就可以移植到别的卷积神经网络算法中。
-
高性能,采用了如下几种加速策略,具体原理见最后一节:
-
独创的输入体复用架构
-
数据的低精度转换
-
16通道并行计算单元及加法树结构
-
流水线策略
-
片上存储BRAM的partition及卷积层间共享
-
多层卷积的加速实施策略
-
你需要准备什么?
-
硬件:
- Xilinx Ultrascale+ MPSOC ZCU102 (也可以用ZCU104或其他合适的Xilinx嵌入式开发板)
-
软件:
-
Ubuntu 16.04 操作系统(用于安装和运行SDSOC,由于后面需要编译板载Linux系统,必须使用Linux主机不能用Windows,以下所有开发都在Linux环境中进行)
-
Xilinx SDSOC 2018.2 开发套件(戳这里的SDSOC安装及配置教程,请务必跟教程走)
-
Xilinx reVISION platform(由于SeetaFace的小部分代码用到了OpenCV,这里安装reVISION是为了使用里面的xfopencv库,上一项的SDSOC安装教程详细讲了reVISION的安装与使用方法)
-
[可选,建议安装] CodeBlocks(用于对算法程序进行离板调试)
-
[可选,建议安装] 安装OpenCV 2.4.13.6(SeetaFace的小部分代码用到了OpenCV,用于对算法程序进行离板调试)
-
-
一些基本知识:
-
虽然在上面的SDSOC安装及配置教程的最后一节中已经提到过SDSOC的官方使用教程<
-