FPGA神经网络部署 Zynq Ultrascale Yolov3-tiny VGG16

工程描述:
该工程实现了一个通用的卷积神经网络加速器,成功搭载Yolov3tiny。配合摄像头采集+显示器回显环路,构建了一个高性能实时目标识别与检测系统。
验证平台:
Xilinx Zynq Ultrascale系列xzcu3eg芯片,Digilent官方Genesys ZU3EG板卡
基本外设:
Digilent PCAM 5C MIPI摄像头,Ultrascale标配的mini DisplayPort显示器接口
实现方式:
纯Verilog实现卷积加速器的设计,C语言实现Zynq PS端的开发,Python实现神经网络的搭建与量化
开发工具套件:
Vivado,Vitis,Python,Pytorch
性能指标:
Yolov3tiny推理时间小于50ms,VGG16主干推理时间小于200ms,最高时钟频率超过250MHz,峰值速率超过172GOPS,INT8量化
耗用资源:
24K个LUT,23K个FF,40个BRAM36K,296个DSP48
工程自带的demo:
基于Yolov3tiny的人脸口罩识别、基于Yolov3tiny的头盔识别
卷积加速器能实现的运算:
1x1 Conv,3x3 Conv,2x2 Maxpooling步长为=1/2,通过查表法实现任意激活函数,Relu,Tanh,sigmoid,leakyRelu
所需背景知识:
需要熟练掌握Verilog,熟悉Zynq架构,熟悉AXI总线,了解卷积神经网络

常见问题:
Q1:该工程只能实现Yolov3tiny算法吗?
A:该工程在PL端实现了一个通用的卷积加速器,理论上可以实现任意卷积神经网络的推理。需要在PS端自己根据网络的架构设计调度程序。
Q2:该工程支持哪些卷积神经网络的运算?
A:1x1 Conv,3x3 Conv,2x2 Maxpooling步长为=1/2,通过查表法实现任意激活函数,Relu,Tanh,sigmoid,leakyRelu
Q3:我能移植到我自己的开发板上吗?
A:可以。但是需要自己根据自己的摄像头,显示器,板子的约束,自己进行移植。
Q3:该加速器的实现耗用的资源大吗?
A:不大。24K个LUT,23K个FF,40个BRAM36K,几乎所有Xilinx的板子都有充足的资源。唯一的就是DSP耗用较多,如果芯片的DSP48不够的话,可以自己将乘法器映射成LUT。
Q4:不带CPU的Artix或者Virtex系列的FPGA能跑吗?
A:理论上可以。该加速器必须得有一个CPU进行调度。可以自己尝试例化MicroBlaze或者Cortex M1/3甚至Riscv的软核
Q5:Python训练好的权重数据怎么放到FPGA里面?
A:我将权重数据进行一定的预处理之后,放到SD卡里面,在PS端调用自带的xilff.h的SD卡驱动库,读取SD卡的二进制权重文件,灌入DDR之后,PL端通过AXI DMA核访问DDR的数据进行推理计算
Q6:该加速器的架构是怎样的?
A:该加速器的设计借鉴了清华大学汪玉老师的团队的两篇论文:Angel-Eye A Complete Design Flow for Mapping CNN Onto Embedded FPGA与Going Deeper with Embedded FPGA Platform for Convolutional Neural Network

我能从该工程里学到什么?
1 卷积加速器Verilog的设计。可以了解到如何通过Linebuffer计算卷积,如何堆并行,
2 AXI总线的设计。该系统大量使用了AXI LITE,AXI STREAM,AXI FULL的总线,可以学习到如何根据AXI总线协议进行数据交互。
3 摄像头显示器回路的搭建。该系统实现了采集+处理+显示回路,可以学习如何搭建摄像头与显示器回路。
4 神经网络的硬件实现。可以了解到如何进行Yolov3tiny的具体实现,如何将一个CNN完整地映射至FPGA当中。
5 Pytorch的相关知识。如何利用Pytorch进行线性INT8量化等等。

感兴趣可以加QQ交流,1830711937

 

上一篇:FPGA 按键key


下一篇:基于FPGA的按键计数(通过按键实现对FPGA板子的数码管显示数进行控制)