主要内容

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

这个示例展示了如何创建、编译和部署dlhdl。工作流使用Xilinx FPGA和SoC的深度学习HDL工具箱™支持包,以一个手写字符检测系列网络作为网络对象。金宝app使用MATLAB®从目标设备检索预测结果。

先决条件

  • Xilinx ZCU102 SoC开发工具包。

  • 深度学习HDL工具箱™

  • 用于Xilinx FPGA和SoC的深度学习HDL工具金宝app箱™支持包

  • 深度学习工具箱™

加载预训练的串联网络

为了加载已经过国家技术标准研究所(MNIST)数据库训练的预先训练的系列网络,输入:

snet = getDigitsNetwork ();

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

analyzeNetwork (snet)

创建目标对象

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

hTarget = dlhdl。目标(“Xilinx”“界面”“以太网”
hTarget = Target with properties: Vendor: 'Xilinx' Interface: Ethernet IPAddress: '192.168.1.101' Username: 'root' Port: 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硬件上部署网络时,需要运行Xilinx的deploy功能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 (“five_28x28.pgm”);imshow (inputImg);

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

[prediction, speed] = hW.predict(single(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(预测);流('预测结果为%d\n', idx-1);
预测结果为5

相关的话题