ZYNQ7010部署lenet5网络

代码:https://github.com/gonhjj/lenet5-zynq7010

参考博主:https://www.bilibili.com/video/BV1SN4y1n7xh/?spm_id_from=333.999.0.0&vd_source=f7a49875c3e63686508c2e8dc1a5eb58

https://www.bilibili.com/read/cv18010558/

https://blog.csdn.net/u012116328/article/details/117246023

https://blog.csdn.net/qq_44447544/article/details/136460833

本项目采用的是璞致电子科技的板卡,还需一张SD卡存储图片。

使用的软件为pycharm 2021.1        vivado 2019.1

一、训练Lenet5模型(lenet5文件夹)

       这里使用的是pycharm搭建和训练网络,这里不详细讲搭建过程了。由于zynq7010资源限制,保存模型的权重和偏置参数为半精度浮点数。

 

       使用lenet_half.py训练,保存模型为lenet5_m_half.pth(在lenet5_half文件中),在lenet5文件夹中保存的是lenet5_train.py训练的结果。导入到Netron软件当中,将各层的参数导出为.npy文件,然后使用npy_to_txt.py转为txt文件。

        in_to_txt.py是将mnist测试集中的图片下载为.txt文件,然后使用txt_to_bin.py转换为.bin文件。方便后续zynq从SD卡中读取,lenet5文件夹中保存了0到9。

二、在Vivado HLS搭建网络和加速(lenet_hls_010文件夹)

搭建网络:搭建卷积,池化和全连接层,保存在function.cpp中。搭建网络的详细过程可以去看看视频。

加速:参考:https://blog.csdn.net/louvinci/article/details/104447604/

注意输入input和输出Cout的接口类型为bram。优化这部分可以自己再改改,我并没有使用完所有的资源。

s_1为未使用hls优化,s_5是使用了的。生成的IP核保存在s_5/impl/ip/xilinx_com_hls_lenet_1_0

三、创建BD和SDK测试(lenet5_v_p文件夹中)

如果直接使用我给的程序,可跳过这部分,直接看SDK中的测试程序,通过JTAG下载到板子上。

将生成的IP核导入到Vivado中(下面的图片均是在我的项目中做演示)

创建Block Design,连线。修改下ZYNQ IP核的设置(串口,SD卡,DDR这些)。这个BD表示的过程是ZYNQ从SD卡中读取图片数据,然后通过AXI总线传到BRAM0中,然后再到lenet IP核中处理,处理结果再传到BRAM1,最后返回ZYNQ由串口把数据打印出。

 

连完线后点击Generate Output Products,再点击Create HDL Wrapper。

 再点击Run Implementation进行综合布线,然后点击Generate Bitstream生成bit流文件。

 导出硬件描述文件,点击Launch SDK打开Vivado SDK。

打开软件后点击File创建文件 ,将lenet_v_p\lenet_v_p.sdk\lenet\src\中的top.c,sd.c,sd.h放到你的工程目录下,就可以使用了。代码这部分也比较简单,不做过多概述。

 然后下载到板卡

 打开串口工具查看结果。

四、我的一些问题,还未解决(求助)

 做完上述这些,是想把测试放到linux上的,结果搞了段时间连PS端的以太网口都没搞好。

我原本是按照网上的,只把ZYNQ的IP核设置好,然后生成硬件描述到petalinux工程,然后petalinux-config,再petalinux-config -c u-boot,petalinux-config -c kernel。。。设置完后下载到SD卡,启动还是显示,不知道怎么搞。

  1. PHY is not detected

  2. GEM PHY init failed

现在以太网口用的是淘宝卖家给的例程,用的是AXI 1G/2.5G Ethernet Subsystem 这个IP核。但我感觉使用PS端的实现应该不需要额外的IP核吧,不懂linux的开发。

到此结束,有懂的可以联系我,感谢!

  • 14
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LeNet-5是一种经典的卷积神经网络模型,常用于手写数字识别任务。HLS(High-Level Synthesis)是针对FPGA设计的一种高级综合工具,它可以将高级语言如C/C++代码转化为硬件描述语言。 要实现LeNet-5模型的HLS版本,我们可以按照以下步骤进行: 1. 首先,我们需要将LeNet-5的网络结构进行转换,以适应HLS工具的要求。LeNet-5由两个卷积层、两个池化层和三个全连接层组成。我们需要将这些层的相应操作转化为HLS中的硬件描述。例如,卷积操作可以使用HLS中的乘法器和加法器实现,池化操作可以使用选择器进行。 2. 接下来,我们可以使用HLS工具中的数据流和并行指令来优化LeNet-5的实现。通过合理地划分和并行化计算以及使用流水线技术,可以提高模型的效率和速度。 3. 在转换为HLS代码后,我们可以使用HLS工具提供的仿真功能进行测试和验证。通过在测试数据上运行HLS代码,我们可以确保模型在硬件上的实现与预期输出一致。 4. 最后,我们可以将HLS代码综合为目标FPGA设备上的位文件。通过将生成的位文件加载到FPGA上,我们就可以在硬件平台上运行LeNet-5模型进行手写数字识别任务了。 总之,通过使用HLS工具,我们可以将LeNet-5模型从C语言代码转化为硬件实现,并在FPGA上运行,以提高其性能和效率。这种转换过程需要注意HLS工具的特性和限制,并进行适当的优化和测试,以确保模型的正确性和可靠性。 ### 回答2: Lenet-5是一种经典的卷积神经网络(CNN)结构,由Yann LeCun在1998年提出。要在HLS(高层次综合)中实现Lenet-5,主要需要将Lenet-5网络结构转换为可在HLS工具中使用的硬件描述语言(HDL)。 Lenet-5网络结构主要包含七个层级:两个卷积层,两个池化层和三个全连接层。在HLS实现Lenet-5时,每个层级都需要进行适当的转换。 首先是卷积层。在HLS中,可以使用具有适当参数的卷积内核来表示卷积层。通过在HDL描述文件中定义卷积核的大小、步长和填充,可以实现卷积层。 第二是池化层。池化层的操作可以通过在HDL描述文件中定义池化区域的大小和类型来实现。常用的是最大池化和平均池化。 第三是全连接层。全连接层可以通过使用适当的权重矩阵和偏置向量来实现。在HLS中,可以使用乘法和加法操作来实现全连接层。 最后,在HLS工具中,需要将输入数据流和输出数据流与适当的处理单元(如DSP、BRAM等)进行连接,以实现完整的Lenet-5网络结构。 实现完成后,可以对HLS代码进行综合、优化和验证,以生成可在FPGA上运行的硬件实现。在FPGA上运行Lenet-5可以进行图像分类、目标检测等任务。 总而言之,要在HLS中实现Lenet-5,需要将Lenet-5网络结构转化为HDL代码,并对其进行综合、优化和验证,最终生成可在FPGA上运行的硬件实现。这样就能够利用硬件加速的方式快速处理Lenet-5网络的图像识别任务。 ### 回答3: Lenet-5是一个经典的卷积神经网络模型,常用于手写数字识别任务。HLS(High-Level Synthesis)是一种用于FPGA(Field-Programmable Gate Array)的高级综合工具,可以将C/C++代码转化为硬件描述语言(HDL)。 实现Lenet-5模型的HLS过程主要包括以下几个步骤: 1. 定义Lenet-5的网络结构:Lenet-5由两个卷积层、两个池化层和三个全连接层组成。在C代码中,我们需要定义网络的各层结构、参数和激活函数。 2. 数据预处理:在Lenet-5中,输入图像为32x32的灰度图像。我们可以使用C代码读取输入图像,并对其进行预处理,如图像缩放和归一化等操作。 3. 卷积计算:在C代码中,我们可以使用循环嵌套来实现卷积计算。对于每个卷积层,我们需要定义卷积核的大小和数量,并对输入图像进行卷积操作。卷积操作可以通过计算每个卷积核与输入图像的点积得到输出特征图。 4. 池化计算:在C代码中,我们可以使用循环嵌套来实现池化计算。对于每个池化层,我们需要定义池化窗口的大小和步长,并对卷积层的输出特征图进行池化操作。常用的池化操作有最大池化和平均池化,可以根据需求选择适合的池化方法。 5. 全连接计算:在C代码中,我们可以使用矩阵乘法和激活函数来实现全连接计算。对于每个全连接层,我们需要定义权重矩阵和偏置向量,并对前一层的输出进行矩阵乘法运算,然后通过激活函数进行非线性映射。 6. 输出结果:在C代码中,我们可以将最后一个全连接层的输出结果与标签进行比较,计算损失并进行反向传播。 通过以上步骤,我们可以使用C语言编写Lenet-5模型的HLS实现。在完成C代码编写后,可以使用HLS工具将C代码转化为HDL代码,以便在FPGA上进行硬件加速计算。这样可以实现Lenet-5模型的高效部署和运行,提高模型的执行速度和计算效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值