主要内容

基于深度学习的图像分类

此示例演示如何创建、编译和部署工作流程使用Xilinx FPGA和SoC的深度学习HDL工具箱™支持包,以alexnet作为网络对象。万博1manbetx使用MATLAB®从目标设备检索预测结果。Alexnet是一个经过训练的卷积神经网络,已经在100多万张图像上训练过,可以将图像分类为1000个对象类别(如键盘、咖啡、马克杯、铅笔和许多动物)。你也可以使用vgg19和Darknet-19作为网络对象。

先决条件

  • Xilinx ZCU102 SoC开发工具包

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

  • 深度学习工具箱™ Alexnet模型

  • 深度学习工具箱™

  • 深度学习HDL工具箱™

加载预训练的串联网络

要加载预训练系列网络alexnet,请输入:

snet = alexnet;

要加载预训练系列网络vgg19,请输入:

% snet = vgg19;

要加载预训练系列网络黑暗19,请输入:

%snet=darknet19;

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

分析网络(snet)%保存的网络包含25层,包括输入、卷积、ReLU、跨通道归一化、% Max池,全连接,和softmax输出层。

创建目标对象

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

%hdlsetuptoolpath('ToolName','Xilinx Vivado','ToolPath','C:\Xilinx\Vivado\2019.2\bin\Vivado.bat');
hTarget=dlhdl.Target(“Xilinx”,“界面”,“以太网”);

创建工作流对象

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

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

编制Alexnet系列网络

要编译Alexnet系列网络,请运行工作流程对象。您可以选择指定输入帧的最大数目。

dn = hW.compile (“InputFrameNumberLimit”,15)
(U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U“16.0 MB”FCWeightDataOffset“0x04000000”“224.0 MB”“内偏移”“0x12000000”“总计:288.0 MB”
dn=结构体字段:运算符:[1×1结构]层配置:[1×1结构]网络配置:[1×1结构]

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

要在Xilinx ZCU102硬件上部署网络,请运行工作流程对象。该函数使用compile函数的输出,利用编程文件对FPGA板进行编程。它还下载了网络权重和偏差。deploy函数启动FPGA设备编程,显示进度消息,以及部署网络所需的时间。

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

加载图像进行预测

加载示例图像。

imgFile =“espressomaker.jpg”;inputImg=imresize(imread(imgFile),[227227]);imshow(inputImg)

对一个图像运行预测

在上执行预测方法工作流程对象,然后在MATLAB命令窗口中显示标签。

[预测,速度]=硬件预测(单个(输入),“个人资料”,“开”);
###完成写入输入激活。###运行单输入激活。
深度学习处理器探查器性能结果LastLayerLatency(周期)LastLayerLatency(秒)FRAMESUM总延迟帧数/秒-------------------------网络33531964 0.15242 1 33531979 6.6 conv_模块8965629 0.04075 conv1 1396567 0.00635 norm1 622836 0.00283 pool1 226593 0.00103 conv2 3409730.01550 norm2 378491 0.00172 pool2 233 0.00106 conv3 1139273 0.00518 conv4 892869 0.00406 conv5 615895 0.00280 pool5 50267 0.00023 fc_模块24566335 0.11167 fc6 15819119 0.07191 fc7 7030644 0.03196 fc8 1716570 0.00780*DL处理器的时钟频率为:220MHz
[val,idx]=max(预测);snet.Layers(end).ClassNames{idx}
'espresso maker'

              

运行多个图像的预测

使用多帧支持功能加载多个图像并检索其预测结果。有关更多信息,请参阅万博1manbetx多框架支撑万博1manbetx.

这个恶魔形象函数加载多个图像并检索其预测结果注释结果函数将图像预测结果显示在组装成3 × 5数组的图像顶部。

imshow (inputImg)

恶魔形象;
###完成写入输入激活。###运行单输入激活。
FPGA预测:信封FPGA预测:文件FPGA预测:折叠椅FPGA预测:搅拌碗FPGA预测:马桶座FPGA预测:饭桌FPGA预测:信封FPGA预测:咖啡机FPGA预测:计算机键盘FPGA预测:显示器FPGA预测:鼠标FPGA预测:圆珠笔FPGA预测:字母开瓶器FPGA预测:模拟时钟FPGA预测:垃圾桶