В этом примере показано, как создать, скомпилировать и развернуть dlhdl.Workflow
объект, который имеет рукописный сетевой объект для обнаружения символов с помощью пакета поддержки Deep Learning HDL Toolbox™ для Intel FPGA и SoC. Используйте MATLAB ®, чтобы получить результаты предсказания с целевого устройства .
Комплект для разработки Intel Arria™ 10 SoC
Deep Learning HDL Toolbox™ поддержки для Intel FPGA и SoC
Deep Learning HDL Toolbox™
Deep Learning 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