主要内容

采用迁移学习网络进行车道检测

此示例演示如何创建、编译和部署一个dlhdl。工作流该对象具有车道检测卷积神经网络作为网络对象,通过使用深度学习HDL工具箱™。使用Xilinx FPGA和SoC的深度学习HDL工具箱™支持包,网络可以检测和输出车道标记边界作为网络对象。万博1manbetx使用MATLAB®从目标设备检索预测结果。

先决条件

  • Xilinx ZCU102 SoC开发工具包

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

  • 深度学习工具箱™

  • 深度学习HDL工具箱™

加载预训练的SeriesNetwork

要加载预训练的系列网络lanenet,输入:

snet = getLaneDetectionNetwork;

规范化输入层

通过修改输入层的类型来规范化输入层,输入:

inputlayer = imageInputLayer(snet.Layers(1).InputSize“归一化”,“没有”);snet = SeriesNetwork([输入层;snet.Layers(2:结束)]);

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

analyzeNetwork (snet)保存的网络包含23层,包括输入,卷积,ReLU,跨通道归一化,最大池,完全连接,回归输出层。

lane_detection_layers.png

创建目标对象

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

hTarget = dlhdl。目标(“Xilinx”,“界面”,“以太网”);

生成比特流以运行网络

车道检测网络由多个跨通道归一化层组成。为了在万博1manbetx硬件上支持这一层,需要在用于FPGA推断的位流中打开conv模块的“LRNBlockGeneration”属性。shipping zcu102_single bitstream没有打开此属性。可以使用以下几行代码生成新的比特流。生成的位流可以与dlhdl一起使用。用于推理的工作流对象。

当创建dlhdl时。ProcessorConfig对象用于现有的传输位流,请确保位流名称与数据类型和目标FPGA板匹配。本例中目标FPGA板为Xilinx ZCU102 SoC板,date类型为single。更新处理器配置,“LRNBlockGeneration”打开,“SegmentationBlockGeneration”关闭。关闭后者,以适应FPGA上的深度学习IP,避免过度使用资源。

% hPC = dlhdl。ProcessorConfig(“比特流”、“zcu102_single”);% hPC。setModuleProperty('conv', 'LRNBlockGeneration', 'on');% hPC。setModuleProperty('conv', 'SegmentationBlockGeneration', 'off');% dlhdl.buildProcessor (hPC)

如果目标是Xilinx ZC706单板,请将上面第一个命令中的'zc706_single'替换为'zcu102_single'。

要了解如何使用生成的位流文件,请参见生成自定义比特流

创建工作流对象

属性的对象dlhdl。工作流类。创建类时,指定网络和位流名称。请确保使用生成的位流,它可以在FPGA上处理跨通道归一化层。指定保存的预训练的lanenet神经网络snet作为网络。

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

编译Lanenet系列网络

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

dn = hW.compile;
offset_name offset_address allocated_space _______________________ ______________ _________________ "InputDataOffset" "0x00000000" "24.0 MB" "OutputResultOffset" "0x01800000" "4.0 MB" "SystemBufferOffset" "0x01c00000" "28.0 MB" "InstructionDataOffset" "0x03800000" "4.0 MB" "ConvWeightDataOffset" "0x03c00000" "16.0 MB" "FCWeightDataOffset" "0x04c00000" "148.0 MB" "EndOffset" "0x0e000000" "Total: 224.0 MB"

编程位流到FPGA和下载网络权值

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

hW.deploy;
FPGA位流编程已经跳过,因为相同的位流已经加载到目标FPGA上。###加载权重到FC处理器。完成13%,当前时间是2020年6月28日12:36:09。完成25%,当前时间是2020年6月28日12:36:10。完成38%,当前时间是2020年6月28日12:36:11。完成50%,当前时间是2020年6月28日12:36:12。63%完成,当前时间是2020年6月28日12:36:13。完成75%,当前时间是2020年6月28日12:36:14。88%完成,当前时间是2020年6月28日12:36:14。### FC权重加载。 Current time is 28-Jun-2020 12:36:15

运行预测为例视频

为对象运行demoOnVideo函数dlhdl。工作流类对象。该函数加载示例视频,执行的预测函数dlhdl。工作流对象,然后绘制结果。

demoOnVideo (hW, 1);
###已完成输入激活。###运行单输入激活。深度学习处理器性能分析结果LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s ------------- ------------- --------- --------- --------- Network 24904175 0.11320 1 24904217 8.8 conv_module 8967009 0.04076 conv1 1396633 0.00635 norm1 623003 0.00283 pool1 226855 0.00103 conv2 3410044 0.01550 norm2 378531 0.00172 pool2 233635 0.00106 conv3 1139419 0.00518 conv4 892918 0.00406 conv5 615897 0.00280 pool5 50189 0.00023 fc_module 159371660.07244 fc6 15819257 0.07191 fclone117125 0.00053 fclone2 782 0.00000 * DL处理器的时钟频率为:220MHz