优秀的 Verilog/FPGA开源项目介绍(十四)- 使用FPGA实现LeNet-5 深度神经网络模型

2022-01-10 08:33:06 浏览数 (1)

优秀的 Verilog/FPGA开源项目介绍(十四)- 使用FPGA实现LeNet-5 深度神经网络模型

简介

LeNet-5:是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一。

LenNet-5共有7层(不包括输入层),每层都包含不同数量的训练参数,如下图所示。

LeNet-5中主要有2个卷积层、2个下抽样层(池化层)、3个全连接层3种连接方式。

项目简介

https://github.com/lulinchen/cnn_open

该项目是通过 FPGA 实现硬件 CNN 结构的尝试。

代码由 Verilog/SystemVerilog 编写,并使用 Vivado 在 Xilinx FPGA 上合成实验。

该代码只是功能的实验性代码,并未完全优化。

FPGA板卡介绍

Xilinx KCU105 Board

https://china.xilinx.com/products/boards-and-kits/kcu105.html

XCKU040-2FFVA1156E FPGA

系统逻辑单元 (K)

530

DSP slice

1,920

Block RAM (Mb)

21.1

16.3Gb/s 收发器

20

I/O 引脚

520

CNN实现结果

仅实现了 4 个基本模块:

  • conv,这个模块执行卷积计算,全连接也和卷积一样处理,内核大小等于输入数据大小。
  • The max_pool
  • The relu
  • 迭代器(The iterator),在输入数据周围跑,并馈送至计算单元。

演示

LeNet 使用上诉 4 个基本模块构成,权重和偏差存储在 ROM 中编码(这也是纯FPGA实现CNN的难点,参数不好修改和存储)。

参考 Tenserflow Lenet 代码,来自CarND-LeNet-Lab(https://github.com/udacity/CarND-LeNet-Lab)。

Xilinx KCU105 Board,采用HDMI输入输出子板。

通过 HDMI 电缆将 PC 连接到 HDMI 输入节点。

一个 32x32 大小的输入从 PC 屏幕输出中裁剪出来,然后输入 Lenet。分类结果显示在 HDMI 输出上。

下图截自FPGA的HDMI输出。白色矩形是由 FPGA 绘制的。将Mnist 数字图片移动到矩形中,或使用Paint 软件手动绘制一个数字。矩形下方打印的数字为分类结果。

参考

原始的软件代码参考:

1、https://github.com/udacity/CarND-LeNet-Lab

2、https://github.com/udacity/CarND-Term1-Starter-Kit

总结

到底纯FPGA适不适合这种大型神经网络的设计?这个问题其实我们不适合回答,但是FPGA厂商是的实际操作是很有权威性的,现在不论是Intel还是Xilinx都没有在自己传统的FPGA上推广AI,都是在基于FPGA的SoC上推广(Vitis和OpenVINO,前者Xilinx后者Intel),总结来看就是:纯 RTL 硬件设计不是AI的好选择。特别是对于大规模网络,权重和中间结果需要存储在外部存储器中。并且数据迭代器会更加复杂。设计周期长,AI相关领域迭代速度快,综上以上几点,可以很容易给你们指引一条道路。

最好使用通用或专用处理器来做控制工作,让硬件来执行计算(加速的概念)。

综上,此项目仅仅适合需要了解相关概念的朋友参考,不建议深入,一些简单的算法可以深入学习一下,推荐下面的项目:

https://github.com/suisuisi/FPGAandCNN/tree/main/DigitalRecognition

最后,还是感谢各个大佬开源的项目,让我们受益匪浅。今天就到这,我是爆肝的碎碎思,期待下期文章与你相见。

优秀的 Verilog/FPGA开源项目介绍(十三)- I2C

优秀的 Verilog/FPGA开源项目介绍(十二)- 玩FPGA不乏味

优秀的 Verilog/FPGA开源项目介绍(十一)- SPI/SPI FLASH/SD卡

优秀的 Verilog/FPGA开源项目介绍(十)- H.264和H.265

优秀的 Verilog/FPGA开源项目介绍(九)- DP(增改版)

优秀的 Verilog/FPGA开源项目介绍(八)- HDMI

优秀的 Verilog/FPGA开源项目介绍(七)- CAN通信

优秀的 Verilog/FPGA开源项目介绍(六)- MIPI

优秀的 Verilog/FPGA开源项目介绍(五)- USB通信

优秀的 Verilog/FPGA开源项目介绍(四)- Ethernet

优秀的 Verilog/FPGA开源项目介绍(三)- 大厂的项目

串行总线技术(二)-串行总线中的先进设计理念及SerDes/PMA介绍

优秀的 Verilog/FPGA开源项目介绍(二)-RISC-V

优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信

0 人点赞