快捷搜索: 王者荣耀 脱发

复现-基于FPGA的CNN的实现

本文用来记录复现基于FPGA的CNN的实现的过程,主要分为以下三个部分:

一、在python中设计CNN

该网络反向传播是通过软件方式生成,FPGA内部不进行反向传播计算。该节通过Python获取训练数据集,并通过Pytorch框架搭建的CNN网络进行网络的训练。并将训练的最优参数导出,这一节先导出至Matlab进行网络的验证以及数据的量化。图1.1是正弦、余弦、三角波不加噪声的信号,图1.2是加入噪声后的信号。

图1.1 正弦、余弦、三角波形

图1.2 加入噪声后的正、余、三角波形

2.1获取数据集

首先我们要构建数据集抛到网络中进行训练。数据集是从正弦、余弦和三角波含噪的信号中选取的。

2.2搭建模型

网络模型如下所示:

图1.3 网络模型

基于Pytorch的网络模型代码如图1.4所示:

图1.4 基于Pytorch的网络模型代码

1.3训练模型

将网络模型进行1000次迭代。

1.4 导出参数

导出最优参数,即将权重最小的数值导出,导到Matlab中。

图2.5 Matlab中显示最优参数

二、Matlab中对结果进行验证

选择Matlab进行结果的验证。而且,通过 matlab的验证流程,可以很容易地分析 FPGA的内部结构。最佳的训练参数是通过 Pytorch框架进行的,参数是输出到. mat文件中的。

该节通过Matlab利用基础的乘加计算来搭建CNN网络的前向计算(不是用深度学习库),从底层熟悉CNN是怎么实现的。(知道底层是怎么实现的,才能够在FPGA上进行搭建)

(a)正弦波识别结果 (b)余弦波识别结果

图2.1 正、余弦波的验证结果

图2.2 识别结果

三、CNN在FPGA实现

CNN在FPGA中进行实现。上一节已经通过Matlab中基础的乘加运算进行了CNN网络的前向计算过程。该节利用Matlab将导出的CNN网络所需要的参数进行定点量化,最后传输至FPGA端进行计算。在分享的开源代码中无FPGA部分的代码,所以此过程无复现。

经验分享 程序员 微信小程序 职场和发展