В этом примере показано, как создавать, компилировать и развертывать dlhdl.Workflow объект, имеющий сеть распознавания логотипов в качестве сетевого объекта с использованием пакета поддержки Deep Learning HDL Toolbox™ для Xilinx FPGA и SoC. Используйте MATLAB ® для извлечения результатов прогнозирования из целевого устройства .
Логотипы помогают пользователям идентифицировать и узнавать торговые марки. Многие компании используют свои логотипы в рекламе, документации и рекламных акциях. Сеть распознавания логотипов (logonet) была разработана в MATLAB ® и может распознавать 32 логотипа при различных условиях освещения и движении камеры. Поскольку эта сеть ориентирована только на распознавание, ее можно использовать в приложениях, где локализация не требуется.
Комплект для разработки Xilinx ZCU102 SoC
Пакет поддержки HDL Toolbox™ глубокого обучения для Xilinx FPGA и SoC
Глубокое обучение Toolbox™
Глубокое обучение 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'