主要内容

在Xilinx ZCU102 SoC上开始深度学习FPGA部署

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

先决条件

  • Xilinx ZCU102 SoC开发工具包。

  • 深度学习HDL工具箱™

  • 深度学习HDL工具箱™支持包Xilinx FPGA和S金宝appoC

  • 深度学习工具箱™

加载预训练的系列网络

要加载预先训练的系列网络,该网络已在修改的国家技术标准研究所(MNIST)数据库上进行了训练,请输入:

snet = getDigitsNetwork();

要查看预训练序列网络的层数,输入:

analyzeNetwork (snet)

创建目标对象

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

hTarget = dlhdl。目标(“Xilinx”“界面”“以太网”
hTarget =带有属性的目标器:供应商:'Xilinx'接口:Ethernet IPAddress: '192.168.1.101'用户名:'root'端口:22

创建工作流对象

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

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

编译MNIST系列网络

命令的compile函数编译MNIST系列网络dlhdl。工作流对象。

dn = hW.compile;
###编译深度学习FPGA原型的网络…###目标FPGA位流zcu102_single…###网络包括以下层:1' imageinput'图像输入28×28×1图像与'zerocenter'归一化(SW层)2' conv_1' Convolution 8 3×3×1卷积与stride[1 1]和填充'same' (HW层)3 'batchnorm_1'批归一化批归一化与8通道(HW层)4 'relu_1' ReLU ReLU (HW层)5 'maxpool_1' Max Pooling 2×2最大池化与stride[2 2]和填充[0 0 0 0 0](HW层)6 'conv_2' Convolution 16 3×3×8卷积与stride[1 1]和填充'same' (HW层)7 'batchnorm_2' Batch标准化批量标准化与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 (SW层)15 'classoutput'分类输出crossentropyex与'0'和9个其他类(SW层)创建3个内存区域。编译段:conv_1>>relu_3…###系列网络优化:将“nnet.cnn.layer.BatchNormalizationLayer”融合为“nnet.cnn.layer.Convolution2DLayer”注意:(第一层)层“data”类型为“nnet.cnn.layer.ImageInputLayer”是在软件中实现的。注意:(第10层)层'输出'与类型'nnet.cnn.layer.RegressionOutputLayer'是在软件中实现的。编译段: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和下载网络权值

要在Xilinx ZCU102 SoC硬件上部署网络,请运行dlhdl。工作流对象。该函数利用编译函数的输出,通过编程文件对FPGA板进行编程。它还下载网络权重和偏差。部署功能开始对FPGA设备进行编程,并显示进度消息和部署网络所需的时间。

hW.deploy
使用以太网编程FPGA比特流…通过以太网下载目标FPGA设备配置到SD卡…#复制/tmp/hdlcoder_rd到/mnt/hdlcoder_rdbit to /mnt/hdlcoder_rd #设置Bitstream为hdlcoder_rd/hdlcoder_system。#复制Devicetree devicetree_dlhdl。dtb to /mnt/hdlcoder_rd #设置Devicetree为hdlcoder_rd/devicetree_dlhdl。为参考设计设置引导:' axis - stream DDR内存访问:3-AXIM'通过以太网将目标FPGA设备配置下载到SD卡已完成。系统现在将重新启动以使持久更改生效。系统正在重新启动. . . . . .已成功完成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

运行预测示例图像

方法的predict函数可加载示例图像dlhdl。工作流对象,然后显示FPGA结果,输入:

inputImg = imread(“five_28x28.pgm”);imshow (inputImg);

使用概要文件“on”运行预测,以查看延迟和吞吐量结果。

[预测,速度]= hW.predict(single(inputImg),“配置文件”“上”);
###已完成输入激活。###运行单输入激活。Deep Learning Processor 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 72428 0.00033 * DL处理器的时钟频率为:220MHz
[val, idx] = max(预测);流(“预测结果是%d\n”, idx-1);
预测结果为5

相关的话题