主要内容

通过使用FPGA部署中运行卷积只有网络

要理解和调试卷积网络,运行和可视化的数据是一个有用的tool.This示例演示如何部署,运行,并通过使用FPGA部署调试只卷积网络。

先决条件

  • 赛灵思ZYNQ ZCU102评估套件

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

  • 深度学习工具箱™

  • 深度学习HDL工具箱™

  • 深度学习工具箱™模型RESNET-50网络

Resnet-50网络

RESNET-50是一个卷积神经网络,其深50层。此预训练的网络可以将影像分为1000个对象类别(如键盘,鼠标,笔,更)。该网络了解到丰富特征表示为广泛范围的图像。该网络具有的224-通过-224图像输入大小。

负载Resnet-50网络

加载ResNet-50网络。

RNET = resnet50;

为了显现RESNET-50网络的结构中,在MATLAB命令提示下,输入:

analyzeNetwork(RNET)

创建RESNET-50网络的子集

要检查的输出max_pooling2d_1层,创建这个网络,它是ResNet-50网络的一个子集:

层= rnet.Layers(1:5);outLayer = regressionLayer('姓名''输出');层(端+ 1)= outLayer;SNET = assembleNetwork(层);

创建目标对象

创建一个具有自定义名称和接口的目标对象,以将目标设备连接到主机。接口选项有JTAG和Ethernet。要使用JTAG,请安装Xilinx™Vivado™Design Suite 2019.2。要设置Xilinx Vivado工具路径,输入:

%hdlsetuptoolpath( '工具名称', '赛灵思Vivado', '刀具路径', 'd:/share/apps/HDLTools/Vivado/2019.2-mw-0/Win/Vivado/2019.2 \ BIN \ vivado.bat');
hTarget = dlhdl.Target(“Xilinx”“界面”“以太网”);

创建工作流程对象

创建的对象dlhdl.Workflow类。在创建对象时,指定网络和位流名称。指定保存的预训练的ResNet-50子集网络,SNET,如网络。确保位流名称与您的目标数据类型和FPGA板匹配。在本例中,目标FPGA板是Xilinx ZCU102 SOC板。位流使用单一的数据类型。

hW = dlhdl。工作流('网络',SNET,“比特流”“zcu102_single”'目标', hTarget);

编译修改RESNET-50系列网络

要编译修改后的ResNet-50系列网络,请运行dlhdl.Workflow目的。

hW.compile

DN = hW.compile
###优化系列网络:融合 'nnet.cnn.layer.BatchNormalizationLayer' 到 'nnet.cnn.layer.Convolution2DLayer' offset_name offset_address allocated_space _______________________ ______________ ________________ “InputDataOffset”, “00000000”, “24.0 MB” “OutputResultOffset” “0x01800000”“24.0 MB”, “SystemBufferOffset” “0x03000000”, “28.0 MB” “InstructionDataOffset” “0x04c00000” “4.0 MB” “ConvWeightDataOffset” “0x05000000”, “4.0 MB” “EndOffset” “0x05400000”, “总计:84.0 MB”
DN =结构体字段:算:[1×1结构] LayerConfigs:[1×1结构] NetConfigs:[1×1结构]

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

要部署在赛灵思ZCU102硬件网络,运行的部署功能dlhdl.Workflow目的。该函数使用编译函数的输出通过使用编程文件到FPGA板进行编程。它还下载网重量和偏见。部署功能程序的FPGA器件,显示进度消息,并且所花费的时间来部署网络。

hW.deploy
### FPGA编程比特流已跳过一样的比特流已经被装载到目标FPGA。###深学习网络编程已经跳过作为同一网络已经装载到目标FPGA。

加载示例图像

加载和显示一个图像作为输入图像,以所述一系列网络使用。

I = imread('daisy.jpg');imshow(i)

运行预测

执行的预测功能dlhdl.Workflow目的。

[P, speed] = hW.predict(single(I),'轮廓''在');
###完成写入输入激活。###运行单输入激活。
Deep Learning Processor Profiler Performance Results LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s ------------- ------------- --------- --------- --------- Network 2813005 0.01279 1 2813015 78.2 conv_module 2813005 0.01279 conv1 2224168 0.01011 max_pooling2d_1 588864 0.00268 * DL的时钟频率处理器:220 mhz

结果数据被返回作为3 d阵列,并在保持64个特征图像中的第三维的索引。

深圳=大小(P)
SZ =1×3.56 56 64

为了可视化在单个图像中的所有特征64,该数据被再成形为4米的尺寸,这是适当的输入到inmtile.函数

R =重塑(P, [sz(1) sz(2) 1 sz(3)]);深圳=大小(右)
SZ =1×4.56 56 1 64

的输入inmtile.归一化使用mat2gray..所有值都按比例缩放,使最小激活值为0,最大激活值为1。

J = imtile (mat2gray (R),'GridSize'[8 8]);

来显示这些激活inmtile.功能,重塑阵列4-d。在输入到第三维inmtile.表示图像的颜色。将第三维尺寸1,因为激活没有颜色。第四维指标的通道。被选择的8×8的大小gride因为有64个特征来显示。

imshow (J)

明亮的特征表明强烈的激活。要理解和调试卷积网络,运行和可视化数据是一个有用的工具。