Этот пример показывает вам, как создать, скомпилировать, и развернуть dlhdl.Workflow объект с alexnet как сетевой объект при помощи Пакета Поддержки Deep Learning HDL Toolbox™ для FPGA Intel и SoC. Использование MATLAB®, чтобы получить предсказание следует из целевого устройства. Alexnet является предварительно обученной сверточной нейронной сетью, которая была обучена на более чем миллионе изображений и может классифицировать изображения в 1 000 категорий объектов (таких как клавиатура, кофе, кружка, карандаш и многие животные). Можно также использовать VGG-19 и даркнет 19 как сетевые объекты.
Комплект разработчика Xilinx ZCU102 SoC
Пакет поддержки Deep Learning HDL Toolbox™ для FPGA Xilinx и SoC
Модель Deep Learning Toolbox™ для Alexnet
Deep Learning Toolbox™
Deep Learning HDL Toolbox™
Загружать предварительно обученную серийную сеть alexnet, введите:
snet = alexnet;
Загружать предварительно обученную серийную сеть vgg19, введите:
% snet = vgg19;Загружать предварительно обученный серийный даркнет сети 19, введите:
% snet = darknet19;Просмотреть слои предварительно обученной серийной сети, введите:
analyzeNetwork(snet) % The saved network contains 25 layers including input, convolution, ReLU, cross channel normalization, % max pool, fully connected, and the softmax output layers.

Используйте dlhdl.Target класс, чтобы создать целевой объект с пользовательским именем для вашего целевого устройства и интерфейса, чтобы соединить ваше целевое устройство к хосту - компьютеру. Интерфейсные опции являются 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 класс, чтобы создать объект. Когда вы создаете объект, задаете сеть и имя потока битов. Укажите, что сохраненное предварительно обучило alexnet нейронную сеть как сеть. Убедитесь, что имя потока битов совпадает с типом данных и платой FPGA, для которой вы предназначаетесь. В этом примере целевая плата FPGA является платой Xilinx ZCU102 SoC. Поток битов использует один тип данных.
hW = dlhdl.Workflow('Network', snet, 'Bitstream', 'zcu102_single','Target',hTarget);
Чтобы скомпилировать сеть серии Alexnet, запустите метод компиляции dlhdl.Workflow объект. Можно опционально задать максимальное количество входных кадров.
dn = hW.compile('InputFrameNumberLimit',15) offset_name offset_address allocated_space
_______________________ ______________ _________________
"InputDataOffset" "0x00000000" "12.0 MB"
"OutputResultOffset" "0x00c00000" "4.0 MB"
"SystemBufferOffset" "0x01000000" "28.0 MB"
"InstructionDataOffset" "0x02c00000" "4.0 MB"
"ConvWeightDataOffset" "0x03000000" "16.0 MB"
"FCWeightDataOffset" "0x04000000" "224.0 MB"
"EndOffset" "0x12000000" "Total: 288.0 MB"
dn = struct with fields:
Operators: [1×1 struct]
LayerConfigs: [1×1 struct]
NetConfigs: [1×1 struct]
Чтобы развернуть сеть на оборудовании Intel Arria 10 SoC, запустите развернуть функцию dlhdl.Workflow объект. Эта функция использует выход функции компиляции, чтобы программировать плату FPGA при помощи файла программирования. Это также загружает сетевые веса и смещения. Развернуть функция начинает программировать устройство FPGA, сообщения о ходе выполнения отображений, и время, которое требуется, чтобы развернуть сеть.
hW.deploy
### FPGA bitstream programming has been skipped as the same bitstream is already loaded on the target FPGA. ### Deep learning network programming has been skipped as the same network is already loaded on the target FPGA.
Загрузите изображение в качестве примера.
imgFile = 'espressomaker.jpg';
inputImg = imresize(imread(imgFile), [227,227]);
imshow(inputImg)
Выполните предсказать метод на dlhdl.Workflow возразите и затем покажите метку в окне команды MATLAB.
[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 33531964 0.15242 1 33531979 6.6
conv_module 8965629 0.04075
conv1 1396567 0.00635
norm1 622836 0.00283
pool1 226593 0.00103
conv2 3409730 0.01550
norm2 378491 0.00172
pool2 233223 0.00106
conv3 1139273 0.00518
conv4 892869 0.00406
conv5 615895 0.00280
pool5 50267 0.00023
fc_module 24566335 0.11167
fc6 15819119 0.07191
fc7 7030644 0.03196
fc8 1716570 0.00780
* The clock frequency of the DL processor is: 220MHz
[val, idx] = max(prediction);
snet.Layers(end).ClassNames{idx}ans = 'espresso maker'
Загрузите повторные изображения и получите их предсказание reults при помощи функции поддержки системы координат нескольких. Для получения дополнительной информации смотрите Несколько Поддержка Системы координат.
demoOnImage функционируйте загружает повторные изображения и получает их результаты предсказания. annotateresults функция отображает результат предсказания изображений сверху изображений, которые являются assembed в массив 3 на 5.
imshow(inputImg)

demoOnImage;
### Finished writing input activations. ### Running single input activations.
FPGA PREDICTION: envelope FPGA PREDICTION: file FPGA PREDICTION: folding chair FPGA PREDICTION: mixing bowl FPGA PREDICTION: toilet seat FPGA PREDICTION: dining table FPGA PREDICTION: envelope FPGA PREDICTION: espresso maker FPGA PREDICTION: computer keyboard FPGA PREDICTION: monitor FPGA PREDICTION: mouse FPGA PREDICTION: ballpoint FPGA PREDICTION: letter opener FPGA PREDICTION: analog clock FPGA PREDICTION: ashcan
