一起学习用Verilog在FPGA上实现CNN----总体概述

Posted 鲁棒最小二乘支持向量机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起学习用Verilog在FPGA上实现CNN----总体概述相关的知识,希望对你有一定的参考价值。

1 总体概述

为避免闭门造车,找一个不错的开源项目,学习在FPGA上实现CNN,为后续的开发奠定基础

1.1 项目链接

大佬的开源项目链接: CNN-FPGA
链接跳转界面如下:


大佬的该项目已经发表论文,而且开源工程结构清晰,同时附带了硬件文档,所以对于咱们初学者来说,这个项目很友好

发表的论文:

硬件文档:

1.2 项目介绍

用ZYNQ FPGA搭建LeNet-5卷积神经网络(CNN),实现手写数字识别,数据集为MNIST。LeNet-5网络结构如图所示:


图片来自附带的技术文档《Hardware Documentation》

1.2.1 卷积(Convolution)

LeNet-5网络有3个卷积层,每个层的卷积核大小均为5x5。本项目的实现方案权衡并行度、速度和资源占用。下图中绿色部分即为卷积层:


图片来自附带的技术文档《Hardware Documentation》

1.2.2 TanH激活函数(TanH Activation)

LeNet-5网络的激活函数是双曲正切函数(TanH),如图紫色部分所示:


图片来自附带的技术文档《Hardware Documentation》

1.2.3 SoftMax激活函数(SoftMax Activation)

LeNet-5网络的最后一层是SoftMax激活层,输出最终的手写数字分类结果,如图蓝色部分所示:


图片来自附带的技术文档《Hardware Documentation》

1.2.4 平均池化层(Average Pooling)

LeNet-5网络有2个平均池化层,减小卷积层的输出数据的大小,如图橙色部分所示:


图片来自附带的技术文档《Hardware Documentation》

1.2.5 综合网络(Integrating Network)

将上述模块综合到一起,调通控制通路和数据通路,如图所示:


图片来自附带的技术文档《Hardware Documentation》

1.3 验证思路

(1)在不同软件设计语言(Python和C++)编写的脚本上运行功能相似的代码
(2)为设计模块创建相应的TestBench(激励),记录输出结果
(3)对比两组输出数据是否一致,并随机抽样进行转换验证
(4)如果有错误,修改代码逻辑

1.4 项目目录

项目完整目录如下:

Final Code Files文件夹展开:

Testing Scripts文件夹展开:


希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

以上是关于一起学习用Verilog在FPGA上实现CNN----总体概述的主要内容,如果未能解决你的问题,请参考以下文章

一起学习用Verilog在FPGA上实现CNN----integrationFC设计

一起学习用Verilog在FPGA上实现CNN----池化层设计

一起学习用Verilog在FPGA上实现CNN----integrationConv设计

一起学习用Verilog在FPGA上实现CNN----SoftMax层设计

一起学习用Verilog在FPGA上实现CNN----全连接层设计

一起学习用Verilog在FPGA上实现CNN----卷积层设计