В этом примере показано, как создать, скомпилировать и развернуть dlhdl.Workflow
объект, который имеет Logo Recognition Network в качестве сетевого объекта с использованием пакета поддержки Deep Learning HDL Toolbox™ для Xilinx FPGA и SoC. Используйте MATLAB ®, чтобы получить результаты предсказания с целевого устройства .
Логотипы помогают пользователям в идентификации и распознавании бренда. Многие компании включают свои логотипы в рекламные, документационные материалы и рекламные акции. Сеть распознавания логотипов (logonet) была разработана в MATLAB ® и может распознавать 32 логотипа при различных условиях подсветки и движениях камеры. Поскольку эта сеть фокусируется только на распознавании, ее можно использовать в приложениях, где локализация не требуется.
Набор для разработки Xilinx ZCU102 SoC
Пакет поддержки Deep Learning HDL Toolbox™ для Xilinx FPGA и SoC
Deep Learning Toolbox™
Deep Learning HDL Toolbox™
Чтобы загрузить предварительно обученный сетевой логонет серии, введите:
snet = getLogoNetwork();
Чтобы просмотреть слои предварительно обученной последовательной сети, введите:
analyzeNetwork(snet)
Создайте целевой объект, который имеет пользовательское имя для вашего целевого устройства и интерфейс для подключения вашего целевого устройства к хосту-компьютеру. Опции интерфейса 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','Interface','Ethernet');
Создайте объект dlhdl.Workflow
класс. Когда вы создаете объект, задайте сеть и имя битового потока. Задайте сохраненную предварительно обученную логосетевую нейронную сеть, snet
, как сеть. Убедитесь, что имя битового потока соответствует типу данных и плате FPGA, на которую вы нацелены. В этом примере целевой платой FPGA является плата Xilinx ZCU102 SOC. Битовый поток использует один тип данных.
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'