В этом примере показано, как создать, скомпилируйте и разверните dlhdl.Workflow
объект, который имеет Сеть Распознавания Логотипа как сетевой объект с помощью Пакета Поддержки Deep Learning HDL Toolbox™ для FPGA Xilinx и SoC. Использование MATLAB®, чтобы получить предсказание следует из целевого устройства.
Логотипы помогают пользователям в идентификации бренда и распознавании. Многие компании включают свои логотипы в рекламу, материалы документации и продвижения. Сеть распознавания логотипа (logonet) была разработана в MATLAB® и может распознать 32 логотипа при различных условиях освещения и движениях камеры. Поскольку эта сеть фокусируется только на распознавании, можно использовать его в приложениях, где локализация не требуется.
Комплект разработчика Xilinx ZCU102 SoC
Пакет поддержки Deep Learning HDL Toolbox™ для FPGA Xilinx и SoC
Deep Learning Toolbox™
Deep Learning HDL Toolbox™
Загружать предварительно обученную серийную сеть logonet, введите:
snet = getLogoNetwork();
Просмотреть слои предварительно обученной серийной сети, введите:
analyzeNetwork(snet)
Создайте целевой объект, который имеет пользовательское имя для вашего целевого устройства и интерфейса, чтобы соединить ваше целевое устройство к хосту - компьютеру. Интерфейсные опции являются JTAG и Ethernet. Чтобы использовать JTAG, установите Набор Проекта Xilinx™ Vivado™ 2019.2. Установить Xilinx Vivado toolpath, введите:
% hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2019.2\bin\vivado.bat');
Создать целевой объект, введите:
hTarget = dlhdl.Target('Xilinx','Interface','Ethernet');
Создайте объект dlhdl.Workflow
класс. Когда вы создаете объект, задаете сеть и имя потока битов. Укажите, что сохраненное предварительно обучило logonet нейронную сеть, snet
, как сеть. Убедитесь, что имя потока битов совпадает с типом данных и платой FPGA, для которой вы предназначаетесь. В этом примере целевая плата FPGA является платой ZCU102 SOC Xilinx. Поток битов использует один тип данных.
hW = dlhdl.Workflow('network', snet, 'Bitstream', 'zcu102_single','Target',hTarget); % If running on Xilinx ZC706 board, instead of the above command, % uncomment the command below. % % hW = dlhdl.Workflow('Network', snet, 'Bitstream', 'zc706_single','Target',hTarget);
Чтобы скомпилировать сеть распознавания логотипа, запустите функцию компиляции dlhdl.Workflow
объект.
dn = hW.compile
offset_name offset_address allocated_space _______________________ ______________ _________________ "InputDataOffset" "0x00000000" "24.0 MB" "OutputResultOffset" "0x01800000" "4.0 MB" "SystemBufferOffset" "0x01c00000" "60.0 MB" "InstructionDataOffset" "0x05800000" "12.0 MB" "ConvWeightDataOffset" "0x06400000" "32.0 MB" "FCWeightDataOffset" "0x08400000" "44.0 MB" "EndOffset" "0x0b000000" "Total: 176.0 MB"
dn = struct with fields:
Operators: [1×1 struct]
LayerConfigs: [1×1 struct]
NetConfigs: [1×1 struct]
Чтобы развернуть сеть на оборудовании Xilinx ZCU102 SoC, запустите развернуть функцию dlhdl.Workflow
объект. Эта функция использует выход функции компиляции, чтобы программировать плату FPGA при помощи файла программирования. Это также загружает сетевые веса и смещения. Развернуть функция начинает программировать устройство FPGA, сообщения о ходе выполнения отображений, и время, которое требуется, чтобы развернуть сеть.
hW.deploy
### FPGA bitstream programming has been skipped as the same bitstream is already loaded on the target FPGA. ### Loading weights to FC Processor. ### 33% finished, current time is 28-Jun-2020 12:40:14. ### 67% finished, current time is 28-Jun-2020 12:40:14. ### FC Weights loaded. Current time is 28-Jun-2020 12:40:14
Загрузите изображение в качестве примера.
image = imread('heineken.png');
inputImg = imresize(image, [227, 227]);
imshow(inputImg);
Выполните предсказать функцию на dlhdl.Workflow
возразите и отобразите результат:
[prediction, speed] = hW.predict(single(inputImg),'Profile','on');
### Finished writing input activations. ### Running single input activations.
Deep Learning Processor Profiler Performance Results LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s ------------- ------------- --------- --------- --------- Network 38865102 0.17666 1 38865144 5.7 conv_module 34299592 0.15591 conv_1 6955899 0.03162 maxpool_1 3306384 0.01503 conv_2 10396300 0.04726 maxpool_2 1207215 0.00549 conv_3 9269094 0.04213 maxpool_3 1367650 0.00622 conv_4 1774679 0.00807 maxpool_4 22464 0.00010 fc_module 4565510 0.02075 fc_1 2748478 0.01249 fc_2 1758315 0.00799 fc_3 58715 0.00027 * The clock frequency of the DL processor is: 220MHz
[val, idx] = max(prediction); snet.Layers(end).ClassNames{idx}
ans = 'heineken'