FPGA神经⽹络部署ZynqUltrascaleYolov3-tinyVGG16
⼯程描述:
该⼯程实现了⼀个通⽤的卷积神经⽹络加速器,成功搭载Yolov3tiny。配合摄像头采集+显⽰器回显环路,构建了⼀个⾼性能实时⽬标识别与检测系统。
验证平台:
Xilinx Zynq Ultrascale系列xzcu3eg芯⽚,Digilent官⽅Genesys ZU3EG板卡
基本外设:
1194年
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