Этот пример показывает вам, как создать, скомпилировать, и развернуть dlhdl.Workflow
объект с alexnet как сетевой объект при помощи Пакета поддержки Deep Learning HDL Toolbox™ для FPGA Xilinx и 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;
Загружать предварительно обученную серийную сеть darknet19, введите:
% 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]
Чтобы развернуть сеть на оборудовании Xilinx ZCU102, запустите развернуть функцию 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
функция отображает результат предсказания изображений сверху изображений, которые собраны в массив 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