В этом примере показано, как создать пользовательское строение процессора и оценить эффективность предварительно обученной последовательной сети. Затем можно изменить параметры пользовательского строения процессора и повторно оценить эффективность. После достижения требований к эффективности можно сгенерировать пользовательский битовый поток с помощью пользовательского строения процессора.
Необходимые условия
Глубокое обучение пакет Toolbox™Support HDL для Xilinx FPGA и СнК
Deep Learning Toolbox™
Deep Learning HDL Toolbox™
Библиотека квантования модели Deep Learning Toolbox
MATLAB CODER для библиотек глубокого обучения
Для загрузки предварительно обученной сети LogoNet введите:
snet = getLogoNetwork;
Чтобы создать пользовательское строение процессора, используйте dlhdl.ProcessorConfig
объект. Для получения дополнительной информации смотрите dlhdl.ProcessorConfig
. Чтобы узнать об изменяемых параметрах строения процессора, смотрите getModuleProperty
и setModuleProperty
.
hPC = dlhdl.ProcessorConfig; hPC.TargetFrequency = 220; hPC
hPC = Processing Module "conv" ConvThreadNumber: 16 InputMemorySize: [227 227 3] OutputMemorySize: [227 227 3] FeatureSizeLimit: 2048 KernelDataType: 'single' Processing Module "fc" FCThreadNumber: 4 InputMemorySize: 25088 OutputMemorySize: 4096 KernelDataType: 'single' Processing Module "adder" InputMemorySize: 40 OutputMemorySize: 40 KernelDataType: 'single' System Level Properties TargetPlatform: 'Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit' TargetFrequency: 220 SynthesisTool: 'Xilinx Vivado' ReferenceDesign: 'AXI-Stream DDR Memory Access : 3-AXIM' SynthesisToolChipFamily: 'Zynq UltraScale+' SynthesisToolDeviceName: 'xczu9eg-ffvb1156-2-e' SynthesisToolPackageName: '' SynthesisToolSpeedValue: ''
По estimate
эффективность сети серии LogoNet, используйте estimatePerformance
функция dlhdl.ProcessorConfig
объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и эффективность сети в системах координат в секунду (кадры/с).
hPC.estimatePerformance(snet)
3 Memory Regions created. ### Notice: (Layer 1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software. ### Notice: (Layer 14) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software. ### Notice: (Layer 1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software. ### Notice: (Layer 7) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software. Deep Learning Processor Estimator Performance Results LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s ------------- ------------- --------- --------- --------- Network 39864176 0.18120 1 39864176 5.5 conv_1 6825287 0.03102 maxpool_1 3755088 0.01707 conv_2 10440701 0.04746 maxpool_2 1447840 0.00658 conv_3 9393397 0.04270 maxpool_3 1765856 0.00803 conv_4 1770484 0.00805 maxpool_4 28098 0.00013 fc_1 2651286 0.01205 fc_2 1696630 0.00771 fc_3 89509 0.00041 * The clock frequency of the DL processor is: 220MHz
Оценка систем координат в секунду составляет 5,5 кадров/с. Чтобы улучшить эффективность сети, измените пользовательский тип данных ядра модуля свертки процессора, номер потока процессора свертки, тип данных ядра полносвязного модуля и номер потока полносвязного модуля. Для получения дополнительной информации об этих параметрах процессора смотрите getModuleProperty
и setModuleProperty
.
Чтобы создать пользовательское строение процессора, используйте dlhdl.ProcessorConfig
объект. Для получения дополнительной информации смотрите dlhdl.ProcessorConfig
. Чтобы узнать об изменяемых параметрах строения процессора, смотрите getModuleProperty
и setModuleProperty
.
hPCNew = dlhdl.ProcessorConfig; hPCNew.TargetFrequency = 300; hPCNew.setModuleProperty('conv', 'KernelDataType', 'int8'); hPCNew.setModuleProperty('conv', 'ConvThreadNumber', 64); hPCNew.setModuleProperty('fc', 'KernelDataType', 'int8'); hPCNew.setModuleProperty('fc', 'FCThreadNumber', 16); hPCNew
hPCNew = Processing Module "conv" ConvThreadNumber: 64 InputMemorySize: [227 227 3] OutputMemorySize: [227 227 3] FeatureSizeLimit: 2048 KernelDataType: 'int8' Processing Module "fc" FCThreadNumber: 16 InputMemorySize: 25088 OutputMemorySize: 4096 KernelDataType: 'int8' Processing Module "adder" InputMemorySize: 40 OutputMemorySize: 40 KernelDataType: 'single' System Level Properties TargetPlatform: 'Xilinx Zynq UltraScale+ MPSoC ZCU102 Evaluation Kit' TargetFrequency: 300 SynthesisTool: 'Xilinx Vivado' ReferenceDesign: 'AXI-Stream DDR Memory Access : 3-AXIM' SynthesisToolChipFamily: 'Zynq UltraScale+' SynthesisToolDeviceName: 'xczu9eg-ffvb1156-2-e' SynthesisToolPackageName: '' SynthesisToolSpeedValue: ''
Для квантования сети LogoNet введите:
dlquantObj = dlquantizer(snet,'ExecutionEnvironment','FPGA'); Image = imageDatastore('heineken.png','Labels','Heineken'); dlquantObj.calibrate(Image);
Для оценки эффективности сети серии LogoNet используйте estimate
функция dlhdl.Workflow
объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и эффективность сети в системах координат в секунду (кадры/с).
hPCNew.estimatePerformance(dlquantObj)
3 Memory Regions created. ### Notice: (Layer 1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software. ### Notice: (Layer 14) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software. ### Notice: (Layer 1) The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software. ### Notice: (Layer 7) The layer 'output' with type 'nnet.cnn.layer.RegressionOutputLayer' is implemented in software. Deep Learning Processor Estimator Performance Results LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s ------------- ------------- --------- --------- --------- Network 14155056 0.04718 1 14155056 21.2 conv_1 3475319 0.01158 maxpool_1 1876680 0.00626 conv_2 2932291 0.00977 maxpool_2 723536 0.00241 conv_3 2581439 0.00860 maxpool_3 882544 0.00294 conv_4 521980 0.00174 maxpool_4 14025 0.00005 fc_1 665263 0.00222 fc_2 425423 0.00142 fc_3 56556 0.00019 * The clock frequency of the DL processor is: 300MHz
Оценка систем координат в секунду составляет 21,2 кадров/с.
Используйте новое пользовательское строение процессора, чтобы создать и сгенерировать пользовательский процессор и битовый поток. Используйте пользовательский битовый поток для развертывания сети LogoNet на целевой плате FPGA.
% hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2019.2\bin\vivado.bat'); % dlhdl.buildProcessor(hPCNew);
Чтобы узнать, как использовать сгенерированный файл битового потока, смотрите Generate Custom Bitstream.
Сгенерированный битовый поток в этом примере похож на zcu102_int8
битовый поток. Развертывание квантованной сети LogoNet с помощью zcu102_int8
bitstream, см. «Получение результатов предсказания для квантованной сети LogoNet».