工程描述:
該工程實現了一個通用的卷積神經網絡加速器,成功搭載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