В этом примере показано, как создавать, компилировать и развертывать dlhdl.Workflow объект, имеющий сетевой объект серии обнаружения рукописных символов с помощью пакета поддержки Deep Learning HDL Toolbox™ для Intel FPGA и SoC. Используйте MATLAB ® для извлечения результатов прогнозирования из целевого устройства .
Комплект для разработки программного обеспечения Intel Arria™ 10
Пакет поддержки Toolbox™ HDL для Intel FPGA и SoC
Глубокое обучение HDL Toolbox™
Глубокое обучение Toolbox™
Для загрузки предварительно обученной сети серии, прошедшей обучение в базе данных Модифицированного национального технологического института (MNIST), введите:
snet = getDigitsNetwork();
Для просмотра уровней предварительно обученной сети серии введите:
analyzeNetwork(snet)
Создайте целевой объект с пользовательским именем для целевого устройства и интерфейсом для подключения целевого устройства к хост-компьютеру. Опции интерфейса - JTAG и Ethernet. Для использования JTAG установите Intel™ Quartus™ Prime Standard Edition 18.1. Настройте путь к установленному исполняемому файлу Intel Quartus Prime, если он еще не настроен. Например, чтобы задать траекторию движения инструмента, введите:
% hdlsetuptoolpath('ToolName', 'Altera Quartus II','ToolPath', 'C:\altera\18.1\quartus\bin64');hTarget = dlhdl.Target('Intel')hTarget =
Target with properties:
Vendor: 'Intel'
Interface: JTAG
Создание объекта dlhdl.Workflow класс. При создании объекта укажите сеть и имя битового потока. Укажите в качестве сети сохраненную предварительно обученную нейронную сеть MNIST, snet. Убедитесь, что имя битового потока соответствует типу данных и целевой плате FPGA. В этом примере целевой платой FPGA является плата Intel Arria 10 SOC, и битовый поток использует один тип данных.
hW = dlhdl.Workflow('network', snet, 'Bitstream', 'arria10soc_single','Target',hTarget)
hW =
Workflow with properties:
Network: [1×1 SeriesNetwork]
Bitstream: 'arria10soc_single'
ProcessorConfig: []
Target: [1×1 dlhdl.Target]
Для компиляции сети серии MNIST выполните функцию компиляции dlhdl.Workflow объект.
dn = hW.compile;
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
offset_name offset_address allocated_space
_______________________ ______________ ________________
"InputDataOffset" "0x00000000" "4.0 MB"
"OutputResultOffset" "0x00400000" "4.0 MB"
"SystemBufferOffset" "0x00800000" "28.0 MB"
"InstructionDataOffset" "0x02400000" "4.0 MB"
"ConvWeightDataOffset" "0x02800000" "4.0 MB"
"FCWeightDataOffset" "0x02c00000" "4.0 MB"
"EndOffset" "0x03000000" "Total: 48.0 MB"
Для развертывания сети на оборудовании 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. ### Loading weights to FC Processor. ### FC Weights loaded. Current time is 28-Jun-2020 13:45:47
Чтобы загрузить пример изображения, выполните функцию прогнозирования dlhdl.Workflow объект, а затем просмотрите результат FPGA, введите:
inputImg = imread('five_28x28.pgm');
imshow(inputImg);
Выполните прогнозирование с профилем «on», чтобы увидеть результаты задержки и пропускной способности.
[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 49243 0.00033 1 49807 3011.6
conv_module 25983 0.00017
conv_1 6813 0.00005
maxpool_1 4705 0.00003
conv_2 5205 0.00003
maxpool_2 3839 0.00003
conv_3 5481 0.00004
fc_module 23260 0.00016
fc 23260 0.00016
* The clock frequency of the DL processor is: 150MHz
[val, idx] = max(prediction);
fprintf('The prediction result is %d\n', idx-1);The prediction result is 5