В этом примере показано, как создать пользовательскую настройку процессора и оценить эффективность предварительно обученной серийной сети. Можно затем изменить параметры пользовательской настройки процессора и повторно оценить эффективность. Если вы достигли своих требований к производительности, можно сгенерировать пользовательский поток битов при помощи пользовательской настройки процессора.
HDL глубокого обучения пакет Toolbox™Support для FPGA Xilinx и SoC
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"
ModuleGeneration: 'on'
LRNBlockGeneration: 'on'
ConvThreadNumber: 16
InputMemorySize: [227 227 3]
OutputMemorySize: [227 227 3]
FeatureSizeLimit: 2048
Processing Module "fc"
ModuleGeneration: 'on'
SoftmaxBlockGeneration: 'off'
FCThreadNumber: 4
InputMemorySize: 25088
OutputMemorySize: 4096
Processing Module "adder"
ModuleGeneration: 'on'
InputMemorySize: 40
OutputMemorySize: 40
Processor Top Level Properties
RunTimeControl: 'register'
InputDataInterface: 'External Memory'
OutputDataInterface: 'External Memory'
ProcessorDataType: '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 объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и производительность сети в кадрах в секунду (Frames/s).
hPC.estimatePerformance(snet)
### Notice: The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: The layer 'classoutput' with type 'nnet.cnn.layer.ClassificationOutputLayer' is implemented in software.
Deep Learning Processor Estimator Performance Results
LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 39926006 0.18148 1 39926006 5.5
____conv_1 6825671 0.03103
____maxpool_1 3755088 0.01707
____conv_2 10440701 0.04746
____maxpool_2 1447840 0.00658
____conv_3 9405685 0.04275
____maxpool_3 1765856 0.00803
____conv_4 1819636 0.00827
____maxpool_4 28098 0.00013
____fc_1 2651288 0.01205
____fc_2 1696632 0.00771
____fc_3 89511 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.ProcessorDataType = 'int8'; hPCNew.setModuleProperty('conv', 'ConvThreadNumber', 64); hPCNew.setModuleProperty('fc', 'FCThreadNumber', 16); hPCNew
hPCNew =
Processing Module "conv"
ModuleGeneration: 'on'
LRNBlockGeneration: 'on'
ConvThreadNumber: 64
InputMemorySize: [227 227 3]
OutputMemorySize: [227 227 3]
FeatureSizeLimit: 2048
Processing Module "fc"
ModuleGeneration: 'on'
SoftmaxBlockGeneration: 'off'
FCThreadNumber: 16
InputMemorySize: 25088
OutputMemorySize: 4096
Processing Module "adder"
ModuleGeneration: 'on'
InputMemorySize: 40
OutputMemorySize: 40
Processor Top Level Properties
RunTimeControl: 'register'
InputDataInterface: 'External Memory'
OutputDataInterface: 'External Memory'
ProcessorDataType: 'int8'
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, используйте estimatePerformance функция dlhdl.ProcessorConfig объект. Функция возвращает предполагаемую задержку слоя, сетевую задержку и производительность сети в кадрах в секунду (Frames/s).
hPCNew.estimatePerformance(dlquantObj)
### Notice: The layer 'imageinput' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: The layer 'classoutput' with type 'nnet.cnn.layer.ClassificationOutputLayer' is implemented in software.
Deep Learning Processor Estimator Performance Results
LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s
------------- ------------- --------- --------- ---------
Network 14306694 0.04769 1 14306694 21.0
____conv_1 3477191 0.01159
____maxpool_1 1876680 0.00626
____conv_2 2932291 0.00977
____maxpool_2 723536 0.00241
____conv_3 2611391 0.00870
____maxpool_3 882544 0.00294
____conv_4 641788 0.00214
____maxpool_4 14025 0.00005
____fc_1 665265 0.00222
____fc_2 425425 0.00142
____fc_3 56558 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);
Чтобы изучить, как использовать сгенерированный файл потока битов, смотрите, Генерируют Пользовательский Поток битов.
Сгенерированный поток битов в этом примере похож на zcu102_int8 поток битов. Развернуть квантованную сеть LogoNet с помощью zcu102_int8 передайте поток битов, смотрите, Получают Результаты Предсказания для Квантованной Сети LogoNet.