主要内容

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

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

先决条件

  • Xilinx ZCU102 SoC开发工具包。

  • 深度学习HDL工具箱™

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

  • 深度学习工具箱™

加载Pretrained系列网络

加载pretrained系列网络,已经在修改后的国家标准的技术研究所(MNIST)数据库,输入:

snet = getDigitsNetwork ();

查看pretrained系列的层网络,输入:

analyzeNetwork (snet)

创建目标对象

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

hTarget = dlhdl.Target (“Xilinx”,“界面”,“以太网”)
hTarget =目标属性:供应商:Xilinx的接口:以太网IPAddress:“192.168.1.101”用户名:“根”端口:22

创建工作流对象

创建一个对象dlhdl.Workflow类。指定网络在对象创建和比特流名称。指定保存pretrained MNIST神经网络,snet网络。确保比特流名称匹配的数据类型和FPGA板你的目标。在这个例子中,目标FPGA板Xilinx ZCU102 SOC董事会和比特流使用一个数据类型。

hW = dlhdl.Workflow (“网络”snet,“比特流”,“zcu102_single”,“目标”hTarget)
hW =工作流属性:网络:[1×1 SeriesNetwork]比特流:“zcu102_single”ProcessorConfig:[]目标:[1×1 dlhdl.Target]

编译MNIST系列网络

编译MNIST系列网络运行的编译功能dlhdl.Workflow对象。

dn = hW.compile;
# # #编译网络深度学习FPGA原型……# # #针对FPGA比特流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马克斯池步(2 - 2)和填充[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创建内存区域。跳过:imageinput编译腿:conv_1 > > relu_3……# # #系列优化网络:融合“nnet.cnn.layer.BatchNormalizationLayer”到“nnet.cnn.layer.Convolution2DLayer”# # #注意:(1)层图层的数据型“nnet.cnn.layer.ImageInputLayer”是在软件中实现。# # #注意:(层10)“输出”型“nnet.cnn.layer.RegressionOutputLayer”是在软件中实现。编译腿:conv_1 > > relu_3…完成了。编译腿:fc…# # #注意:(1)层图层的数据型“nnet.cnn.layer.ImageInputLayer”是在软件中实现。 ### 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.Workflow对象。这个函数使用编译函数程序的输出FPGA板通过编程文件。它也可以下载网络权重和偏见。部署功能开始编程的FPGA器件,显示进度信息,所花费的时间部署网络。

hW.deploy
# # #编程的FPGA比特流使用以太……下载目标FPGA在以太网设备配置SD卡……# / tmp / hdlcoder_rd复制到/ mnt / hdlcoder_rd # hdlcoder_system拷贝比特流。位/ mnt / hdlcoder_rd #集hdlcoder_rd / hdlcoder_system比特流。位#复制Devicetree devicetree_dlhdl。dtb / mnt / hdlcoder_rd #集Devicetree hdlcoder_rd / devicetree_dlhdl。dtb #为参考设计设置引导:“AXI-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

运行预测例如形象

加载图片的例子中,执行的预测功能dlhdl.Workflow对象,然后显示FPGA的结果,输入:

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

运行预测与剖面上的看到的延迟和吞吐量的结果。

(预测、速度)= hW.predict(单(inputImg),“配置文件”,“上”);
# # #写完输入激活。# # #运行单个输入激活。深度学习处理器分析器性能结果LastFrameLatency(周期)LastFrameLatency总延迟(秒)FramesNum帧/ s - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -网络98117 0.00045 4716 0.00002 98117 2242.2 conv_1 6607 0.00003 maxpool_1 conv_2 0.00001 conv_3 6752 0.00003 4637 0.00002 maxpool_2 2977 fc 72428 0.00033 * DL处理器的时钟频率是:220 mhz
[val, idx] = max(预测);流(“预测结果% d \ n”,idx-1);
预测结果是5

相关的话题