主要内容

深入学习FPGA在Xilinx ZCU102 SoC上的部署

此示例演示如何创建、编译和部署dlhdl。工作流使用深度学习HDL工具箱,将具有手写字符检测序列网络的对象作为网络对象™ Xilinx FPGA和SoC的支持包。使用MATLAB®从目标设备检索预测结果。万博1manbetx

先决条件

  • Xilinx ZCU102 SoC开发工具包。

  • 深度学习HDL工具箱™

  • 深度学习HDL工具箱™ Xilinx FPGA和SoC万博1manbetx支持包

  • 深度学习工具箱™

加载预训练的串联网络

要加载经过修改后的国家理工学院标准(MNIST)数据库培训的预培训系列网络,请输入:

snet=getDigitNetwork();

要查看预训练系列网络的图层,请输入:

分析网络(snet)

创建目标对象

创建一个目标对象,该对象具有目标设备的自定义名称和将目标设备连接到主机的接口。接口选项有JTAG和以太网。

hTarget=dlhdl.Target(“Xilinx”,“界面”,“以太网”)
hTarget=具有以下属性的目标:供应商:'Xilinx'接口:以太网IP地址:'192.168.1.101'用户名:'root'端口:22

创建工作流对象

创建的对象dlhdl。工作流类。在创建对象时指定网络和位流名称。指定保存的预先训练的MNIST神经网络snet作为网络。确保位流名称与您的目标数据类型和FPGA板匹配。在本例中,目标FPGA板为Xilinx ZCU102 SOC板,位流使用单一数据类型。

hW = dlhdl。工作流(“网络”,snet,“比特流”,“zcu102_single”,“目标”hTarget)
hW =带有属性的工作流:Network: [1×1 SeriesNetwork] Bitstream: 'zcu102_single' ProcessorConfig: [] Target: [1×1 dlhdl. hW = []目标]

编制MNIST系列网络

要编译MNIST系列网络,请运行dlhdl。工作流对象。

dn=hW.compile;
###编译网络深度学习FPGA原型…### FPGA bitstream zcu102_single…###网络包括以下几层:1“imageinput”图像输入28××28日1图像“zerocenter”正常化(SW层)2的conv_1卷积8 3×3×1的隆起与步幅[1]和填充“相同”(HW层)3的batchnorm_1批量标准化批量标准化与8通道(HW层)4的relu_1 ReLU ReLU (HW层)5“maxpool_1”马克斯池2×2马克斯池步[22]和填充[0 0 0 0](HW层)6的conv_2卷积16 3×3×8旋转步[1]和填充“相同”(HW层)7“batchnorm_2”批量标准化批量标准化16通道(HW层)8“relu_2”ReLU ReLU (HW层)9“maxpool_2”马克斯池2×2马克斯池步(2 - 2)和填充[0 0 0 0](HW层)10“conv_3”卷积32 3×3×16旋转步[1]和填充“相同”(HW层)11的batchnorm_3批量标准化批量标准化与32通道(HW层)12的relu_3 ReLU ReLU (HW层)13 fc的完全连接10完全连接层(HW层)14的softmax softmax softmax(层)西南15 classoutput分类输出crossentropyex与'0'和9个其他类(SW层)创建3个内存区域。编译段:conv_1>>relu_3…###优化系列网络:融合' net.cnn. Layer . batchnormalizationlayer '到' net.cnn. Layer . convolution2dlayer '###注意:(图层10)类型为“net.cnn. Layer . regressionoutputlayer”的图层“output”是在软件中实现的。 Compiling leg: conv_1>>relu_3 ... complete. Compiling leg: fc ... ### Notice: (Layer 1) The layer 'data' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software. ### Notice: (Layer 3) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software. Compiling leg: fc ... complete. Skipping: softmax Skipping: classoutput Creating Schedule... ....... Creating Schedule...complete. Creating Status Table... ...... Creating Status Table...complete. Emitting Schedule... ...... Emitting Schedule...complete. Emitting Status Table... ........ Emitting Status Table...complete. ### Allocating external memory buffers: offset_name offset_address allocated_space _______________________ ______________ ________________ "InputDataOffset" "0x00000000" "4.0 MB" "OutputResultOffset" "0x00400000" "4.0 MB" "SchedulerDataOffset" "0x00800000" "4.0 MB" "SystemBufferOffset" "0x00c00000" "28.0 MB" "InstructionDataOffset" "0x02800000" "4.0 MB" "ConvWeightDataOffset" "0x02c00000" "4.0 MB" "FCWeightDataOffset" "0x03000000" "4.0 MB" "EndOffset" "0x03400000" "Total: 52.0 MB" ### Network compilation complete.

在FPGA上编程Bitstream并下载网络权重

要在Xilinx ZCU102 SoC硬件上部署网络,请运行dlhdl。工作流对象。该函数使用compile函数的输出,利用编程文件对FPGA板进行编程。它还下载了网络权重和偏差。deploy函数启动FPGA设备编程,显示进度消息,以及部署网络所需的时间。

hW.deploy
###使用以太网编程FPGA Bitstream…下载目标FPGA设备配置通过以太网到SD卡…#将/tmp/hdlcoder_rd拷贝到/mnt/hdlcoder_rd。bit to /mnt/hdlcoder_rd #设置Bitstream为hdlcoder_rd/hdlcoder_system。#复制devicetree_dlhdl. bit #复制devicetree_dlhdl. bit #复制devicetree_dlhdl。dtb为/mnt/hdlcoder_rd #设置Devicetree为hdlcoder_rd/devicetree_dlhdl。dtb # Set boot for Reference Design: ' axis - stream DDR Memory Access: 3-AXIM'现在系统将重新启动以使持久更改生效。系统正在重启. . . . . .### FPGA位流编程已成功完成###加载权值到Conv处理器。### Conv权重加载。 Current time is 30-Dec-2020 15:13:03 ### Loading weights to FC Processor. ### FC Weights loaded. Current time is 30-Dec-2020 15:13:03

运行预测示例映像

要加载示例图像,请执行dlhdl。工作流对象,然后显示FPGA结果,输入:

inputImg=imread(‘五个28x28.pgm’);imshow (inputImg);

在配置文件“打开”的情况下运行预测,以查看延迟和吞吐量结果。

[预测,速度]=硬件预测(单个(输入),“个人资料”,“开”);
###完成写入输入激活。###运行单输入激活。深度学习处理器Profiler性能结果LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s ------------- ------------- --------- --------- --------- Network 98117 0.00045 1 98117 2242.2 conv_1 6607 0.00003 maxpool_1 4716 0.00002 conv_2 4637 0.00002 maxpool_2 2977 0.00001 conv_3 6752 0.00003 fc 724280.00033 * DL处理器的时钟频率为:220MHz
[val,idx]=max(预测);fprintf('预测结果为%d\n', idx-1);
预测结果为5

相关的话题