主要内容

使用FPGA部署运行仅卷积网络

典型的系列分类网络包括一个卷积层序列,然后是一个或多个完全连接的层。最近的研究结果表明,直接使用卷积层激活比后续完全连通层的激活具有更好的特征提取和识别性能。

要理解和调试卷积网络,运行和可视化数据是一个有用的工具。这个示例展示了如何使用FPGA部署部署、运行和调试卷积网络。

先决条件

  • Xilinx Zynq ZCU102评估试剂盒

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

  • 深度学习工具箱™

  • 深度学习HDL工具箱™

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

Reset-50网络

Resnet-50是一个卷积神经网络,深度为50层。此佩戴网络可以将图像分为1000个对象类别(例如键盘,鼠标,铅笔等)。网络已经学习了丰富的特征表示,以获得各种图像。该网络具有224×224的图像输入大小。此示例使用ResET50作为起点。

加载Reset-50网络

加载Reset-50网络。

rnet = resnet50;

要在Matlab®命令提示符下可视化Reset-50网络的结构,请输入:

analyzeNetwork (rnet)

创建一个只有卷积的网络

通过选择ResNet-50网络的一个子集来创建一个仅卷积网络。该子集仅包括ResNet50网络的前五层,这五层在本质上是卷积的。

要创建只卷积的网络,输入:

层= rnet.Layers (1:5);支出= regressionLayer (“名字”“输出”);层(端+ 1)=支出;snet = assembleNetwork(层);

创建目标对象

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

%hdl setuptoolpath('toolname','xilinx vivado','toolpath','d:/share/apps/hdltools/vivado/2019.2-mw-0/win/vivado/2019.2 \ bin \ vivado.bat');
hTarget = dlhdl。目标('Xilinx''界面'“以太网”);

创建工作流对象

对象的对象dlhdl。工作流班级。创建对象时,请指定网络和比特流名称。指定已保存的普雷威尔卷积仅网络,snet,作为网络。确保比特流名称与您所定位的数据类型和FPGA板匹配。在该示例中,目标FPGA板是Xilinx ZCU102 SoC板。比特流使用单个数据类型。使用dlhdl。工作流对象部署既包括卷积层又包括完全连接层或仅包含卷积层的网络。

hw = dlhdl.workflow('网络'snet,'比特流''zcu102_single'“目标”,htarget);

编译仅卷积网络

要编译只有卷积的网络,运行的编译功能dlhdl。工作流目的。

hW.compile

dn = hW.compile
###优化系列网络:融合“nnet.cnn.layer.BatchNormalizationLayer”到“nnet.cnn.layer.Convolution2DLayer”offset_name offset_address allocated_space  _______________________ ______________ ________________ " InputDataOffset”“0 x00000000”“24.0 MB”“OutputResultOffset”“0 x01800000”“24.0 MB”“SystemBufferOffset”“0 x03000000”“28.0 MB InstructionDataOffset”"0x04c00000" "4.0 MB" "ConvWeightDataOffset" "0x05000000" "4.0 MB" "EndOffset" "0x05400000" "Total: 84.0 MB"
dn =结构与字段:操作符:[1×1 struct] layerconfig: [1×1 struct] NetConfigs: [1×1 struct]

将比特流程到FPGA和下载网络权重

如果需要将网络部署到Xilinx ZCU102硬件上,请使用Xilinx ZCU102硬件的deploy功能dlhdl。工作流目的。此功能使用编译功能的Compile函数的输出来使用编程文件编程FPGA板。该功能还下载网络权重和偏见。Deploy函数程序程序FPGA设备,显示进度消息,以及部署网络所需的时间。

hw.deploy.
### FPGA位流编程已经被跳过,因为相同的位流已经加载到目标FPGA上。###深度学习网络编程已经被跳过,因为相同的网络已经加载到目标FPGA上。

加载示例图片

加载并显示一个图像,将其用作序列网络的输入图像。

我= imread (“daisy.jpg”);imshow(我)

运行预测

执行预测功能dlhdl。工作流目的。

[p,speed] = hw.predict(单(i),“配置文件”“上”);
###完成写入输入激活。###正在运行单个输入激活。
深度学习处理器分析器性能结果LastLayerLatency(周期)LastLayerLatency(秒)FramesNum总延迟帧/ s ---------------------------------  -   -   -   -   -   -   -   -   -   -   -   - 网络2813005 0.01279 1 2813015 78.2 Conv_Module 2813005 0.01279 CONC1 2224168 0.01279 CONS_POOLING2D_1 588864 0.00268 * DL处理器的时钟频率为:220MHz

结果数据以3-D数组的形式返回,其中包含64个特征图像的3维索引。

sz =尺寸(p)
深圳=1×356 56 64.

为了在单个图像中可视化所有64个特征,数据被重塑为四个维度,这是适当的输入imtile功能

R = REHAPE(P,[SZ(1)SZ(2)1 SZ(3)]);sz = size(r)
深圳=1×456 56 1 64

输入中的第三个维度imtile函数表示图像颜色。将第三维度设置为大小1,因为此示例中的激活信号是标量并且不包括颜色。第四维度索引通道。

输入到imtile是标准化的mat2gray.缩放所有值,以便最小激活为0,最大激活为1。

j = imtile(mat2gray(r),“GridSize”[8]);

选择8 × 8大小的网格,因为有64个功能要显示。

imshow(j)

该图像显示64个功能中的每一个的激活数据。明亮的功能表示强烈的激活。

来自卷积层的输出仅不同于网络的网络与卷积和完全连接的层的不同。卷积层用于减少输入图像尺寸,同时保持所需的特征来获得良好的预测。仅卷积层网络用于研究特征提取。早期的卷积层用于提取低级别功能,如边缘,颜色,渐变等。后来的卷积层用于提取高级功能,例如模式,曲线,线路等。然后可以使用这些高级功能来识别对象。