Выполнение Сетей Только для свертки при помощи Развертывания FPGA

Изучать и отлаживать сверточные сети, запускаясь и визуализируя данные - полезный tool.This пример, показывает, как развернуть, запустить и отлаживает сеть только для свертки при помощи развертывания FPGA.

Необходимые условия

  • Оценочный комплект Xilinx Zynq ZCU102

  • Пакет поддержки Deep Learning HDL Toolbox™ для FPGA Xilinx и SoC

  • Deep Learning Toolbox™

  • Deep Learning HDL Toolbox™

  • Модель Deep Learning Toolbox™ для сети Resnet-50

Сеть Resnet-50

ResNet-50 является сверточной нейронной сетью, которой имеет 50 слоёв глубины. Эта предварительно обученная сеть может классифицировать изображения в 1 000 категорий объектов (таких как клавиатура, мышь, карандаш и другие).The сеть изучил богатые представления функции для широкого спектра изображений. Сеть имеет входной размер изображений 224 224.

Загрузите сеть Resnet-50

Загрузите сеть ResNet-50.

rnet = resnet50;

Визуализировать структуру сети Resnet-50, в командной строке MATLAB, введите:

analyzeNetwork(rnet)

Создайте подмножество сети Resnet-50

Исследовать выходные параметры max_pooling2d_1 слой, создайте эту сеть, которая является подмножеством сети ResNet-50:

layers = rnet.Layers(1:5);
outLayer = regressionLayer('Name','output');
layers(end+1) = outLayer;

snet = assembleNetwork(layers);

Создайте целевой объект

Создайте целевой объект с пользовательским именем и интерфейсом, чтобы соединить ваше целевое устройство к хосту - компьютеру. Интерфейсные опции являются JTAG и Ethernet. Чтобы использовать JTAG, установите Набор Проекта Xilinx™ Vivado™ 2019.2. Установить Xilinx Vivado toolpath, введите:

%hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'D:/share/apps/HDLTools/Vivado/2019.2-mw-0/Win/Vivado/2019.2\bin\vivado.bat');
hTarget = dlhdl.Target('Xilinx','Interface','Ethernet');

Создайте объект рабочего процесса

Создайте объект dlhdl.Workflow класс. Когда вы создаете объект, задаете сеть и имя потока битов. Укажите, что сохраненное предварительно обучило сеть подмножества ResNet-50, snet, как сеть. Убедитесь, что имя потока битов совпадает с типом данных и платой FPGA, для которой вы предназначаетесь. В этом примере целевая плата FPGA является платой ZCU102 SOC Xilinx. Поток битов использует один тип данных.

hW = dlhdl.Workflow('network', snet, 'Bitstream', 'zcu102_single','Target',hTarget);

Компиляция модифицированная серийная сеть Resnet-50

Чтобы скомпилировать модифицированную сеть серии ResNet-50, запустите функцию компиляции dlhdl.Workflow объект.

hW.compile

dn = hW.compile
### Optimizing series network: Fused 'nnet.cnn.layer.BatchNormalizationLayer' into 'nnet.cnn.layer.Convolution2DLayer'
          offset_name          offset_address    allocated_space 
    _______________________    ______________    ________________

    "InputDataOffset"           "0x00000000"     "24.0 MB"       
    "OutputResultOffset"        "0x01800000"     "24.0 MB"       
    "SystemBufferOffset"        "0x03000000"     "28.0 MB"       
    "InstructionDataOffset"     "0x04c00000"     "4.0 MB"        
    "ConvWeightDataOffset"      "0x05000000"     "4.0 MB"        
    "EndOffset"                 "0x05400000"     "Total: 84.0 MB"
dn = struct with fields:
       Operators: [1×1 struct]
    LayerConfigs: [1×1 struct]
      NetConfigs: [1×1 struct]

Поток битов программы на FPGA и Веса Сети Загрузки

Чтобы развернуть сеть на оборудовании 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.

Загрузите изображение в качестве примера

Загрузите и отобразите изображение, чтобы использовать в качестве входного изображения к серийной сети.

I = imread('daisy.jpg');
imshow(I)

Запустите предсказание

Выполните предсказать функцию dlhdl.Workflow объект.

[P, speed] = hW.predict(single(I),'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                    2813005                  0.01279                       1            2813015             78.2
    conv_module            2813005                  0.01279 
        conv1              2224168                  0.01011 
        max_pooling2d_1     588864                  0.00268 
 * The clock frequency of the DL processor is: 220MHz

Данные о результате возвращены как трехмерный массив с третьей индексацией размерности через 64 изображения функции.

sz = size(P)
sz = 1×3

    56    56    64

Чтобы визуализировать все 64 функции в одном изображении, данные изменены в 4 размерности, который является соответствующим входом к imtile функция

R = reshape(P, [sz(1) sz(2) 1 sz(3)]);
sz = size(R)
sz = 1×4

    56    56     1    64

Вход к imtile нормирован с помощью mat2gray. Все значения масштабируются так, чтобы минимальная активация была 0, и максимальная активация равняется 1.

J = imtile(mat2gray(R), 'GridSize', [8 8]);

Показать эти активации при помощи imtile функционируйте, измените размерность массива к 4-D. Третья размерность во входе к imtile представляет цвет изображения. Установите третью размерность измерять 1, потому что активации не имеют цвета. Четвертая размерность индексирует канал. Размер скрипа 8x8 выбран, потому что существует 64 функции, чтобы отобразиться.

imshow(J)

Яркие функции указывают на сильную активацию. Изучать и отлаживать сверточные сети, запускаясь и визуализируя данные - полезный инструмент.

Для просмотра документации необходимо авторизоваться на сайте