Классифицируйте изображения на FPGA при помощи квантованной сети GoogLeNet

Этот пример показывает, как использовать Deep Learning HDL Toolbox™, чтобы развернуть квантованную сеть GoogleNet, чтобы классифицировать изображение. Пример использует предварительно обученную сеть GoogLeNet, чтобы продемонстрировать передачу обучения, квантование и развертывание для квантованной сети. Квантование помогает уменьшать требования к памяти глубокой нейронной сети путем квантования весов, смещений и активаций слоев сети к 8-битным масштабированным целочисленным типам данных. Используйте MATLAB®, чтобы получить результаты предсказания.

Разверните квантованную сеть GoogLeNet путем создания dlhdl.Workflow объект. Используйте dlhdl.Workflow объект к:

  • Сгенерируйте список инструкций, весов и смещений при помощи compile метод.

  • Сгенерируйте файл программирования для FPGA при помощи deploy метод.

  • Получите сетевые результаты предсказания и эффективность при помощи predict метод.

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

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

  • Deep Learning Toolbox™

  • Deep Learning HDL Toolbox™

  • Модель Deep Learning Toolbox для сети GoogLeNet

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

  • Image Processing Toolbox™

  • Комплект разработчика Intel Arria10 SoC

  • Пакет поддержки Библиотеки Квантования Модели Deep Learning Toolbox™.

  • Интерфейс MATLAB Coder для Библиотек Глубокого обучения

Передача обучения Используя GoogLeNet

Чтобы выполнить классификацию на новом наборе изображений, вы подстраиваете предварительно обученную сверточную нейронную сеть GoogLeNet, переводом учась. В передаче обучения можно взять предварительно обученную сеть и использовать ее в качестве начальной точки, чтобы изучить новую задачу. Подстройка сети с передачей обучения обычно намного быстрее и легче, чем обучение сети со случайным образом инициализированными весами с нуля. Можно быстро передать изученные функции новой задаче с помощью меньшего числа учебных изображений.

Загрузка предварительно обученная сеть DAG

Загрузите предварительно обученную сеть DAG, GoogLeNet.

net = googlenet;

Используйте analyzeNetwork функция, чтобы получить информацию о слоях сети.

analyzeNetwork(net);

Первый слой, изображение ввело слой, требует входных изображений размера 224 224 3, где 3 количество цветовых каналов.

inputSize = net.Layers(1).InputSize
inputSize = 1×3

   224   224     3

Задайте наборы данных обучения и валидации

Этот пример использует MathWorks Набор данных MerchData. Это - небольшой набор данных, содержащий 75 изображений товаров MathWorks, принадлежа пяти различным классам (дно, куб, игра в карты, отвертка и факел).

unzip('MerchData.zip');
imds = imageDatastore('MerchData', ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

Разделите данные на наборы данных обучения и валидации. Используйте 70% изображений для обучения и 30% для валидации. splitEachLabel разделяет images datastore в два новых хранилища данных.

[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');

Этот набор данных теперь содержит 55 учебных изображений и 20 изображений валидации. Отобразите некоторые демонстрационные изображения.

numTrainImages = numel(imdsTrain.Labels);
idx = randperm(numTrainImages,16);
figure
for i = 1:16
    subplot(4,4,i)
    I = readimage(imdsTrain,idx(i));
    imshow(I)
end

Замените последние слои

Полносвязный слой и слой классификации предварительно обученной сети net сконфигурированы для 1 000 классов. Эти два слоя, loss3-classifier и output в GoogLeNet содержите информацию о том, как сочетать функции, которые сеть извлекает в вероятности класса, значение потерь и предсказанные метки. Чтобы переобучить предварительно обученную сеть, чтобы классифицировать новые изображения, замените эти два слоя на новые слои, адаптированные к новому набору данных.

Извлеките график слоев из обучившего сеть.

lgraph = layerGraph(net)
lgraph = 
  LayerGraph with properties:

         Layers: [144×1 nnet.cnn.layer.Layer]
    Connections: [170×2 table]
     InputNames: {'data'}
    OutputNames: {'output'}

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

numClasses = numel(categories(imdsTrain.Labels))
numClasses = 5

Удалите 'loss3-классификатор', 'prob' и 'выведите' слои от lgraph.

layers = net.SortedLayers;
for i = 0:2
    lgraph = removeLayers(lgraph,layers(end-i).Name);
end

Создайте три новых слоя и добавьте их в lgraph. Гарантируйте, что переданные и новые слои правильно соединяются вместе в lgraph.

newLayers = [
    fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20,'Name','newFC')
    softmaxLayer('Name','newProb')
    classificationLayer('Name','newClassOutput',"Classes","auto")];

lgraph = addLayers(lgraph,newLayers);
lgraph = connectLayers(lgraph,layers(end-3).Name,'newFC');

Обучение сети

Сеть требует входных изображений размера 224 224 3, но изображения в хранилищах данных изображений имеют различные размеры. Используйте увеличенный datastore изображений, чтобы автоматически изменить размер учебных изображений. Задайте дополнительные операции увеличения, чтобы выполнить на учебных изображениях: случайным образом инвертируйте учебные изображения вдоль вертикальной оси, и случайным образом переведите их до 30 пикселей горизонтально и вертикально. Увеличение данных помогает препятствовать тому, чтобы сеть сверхсоответствовала и запомнила точные детали учебных изображений.

pixelRange = [-30 30];
imageAugmenter = imageDataAugmenter( ...
    'RandXReflection',true, ...
    'RandXTranslation',pixelRange, ...
    'RandYTranslation',pixelRange);
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain, ...
    'DataAugmentation',imageAugmenter);

Чтобы автоматически изменить размер изображений валидации, не выполняя дальнейшее увеличение данных, используйте увеличенный datastore изображений, не задавая дополнительных операций предварительной обработки.

augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);

Задайте опции обучения. Для передачи обучения сохраните функции от ранних слоев предварительно обученной сети (переданные веса слоя). Чтобы замедлить изучение в переданных слоях, установите начальную скорость обучения на маленькое значение. На предыдущем шаге факторы скорости обучения были увеличены для полностью связанного слоя, чтобы ускорить изучение в новых последних слоях. Эта комбинация настроек скорости обучения приводит к быстрому изучению только в новых слоях и более медленном изучении в других слоях. При использовании обучение с переносом вы не должны обучаться для как много эпох. Эпоха является полным учебным циклом на целом обучающем наборе данных. Задайте мини-пакетный размер, чтобы быть 11. Программное обеспечение проверяет сеть каждый ValidationFrequency итерации во время обучения.

options = trainingOptions('sgdm', ...
    'MiniBatchSize',11, ...
    'MaxEpochs',5, ...
    'InitialLearnRate',2e-4, ...
    'Shuffle','every-epoch', ...
    'ValidationData',augimdsValidation, ...
    'ValidationFrequency',3, ...
    'Verbose',false, ...
    'Plots','training-progress');

Обучите сеть, которая состоит из переданных и новых слоев. По умолчанию, trainNetwork использует графический процессор, если вы доступны (требует Parallel Computing Toolbox™ и поддерживаемого устройства графического процессора. Для получения дополнительной информации смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox)). В противном случае сеть использует центральный процессор (требует Интерфейса MATLAB Coder для Глубокого обучения Libraries™). Можно также задать среду выполнения при помощи 'ExecutionEnvironment' аргумент значения имени trainingOptions.

netTransfer = trainNetwork(augimdsTrain,lgraph,options);

Создайте Объект dlquantizer

Создайте квантованную сеть при помощи dlquantizer объект. Установите целевую среду выполнения на FPGA..

dlQuantObj = dlquantizer(netTransfer,'ExecutionEnvironment','FPGA');

Калибруйте квантованную сеть

Используйте calibrate функционируйте, чтобы осуществить сеть при помощи демонстрационных входных параметров, чтобы собрать информацию области значений. calibrate функционируйте осуществляет сеть и собирает динамические диапазоны для настраиваемых параметров свертки и полносвязных слоев сети.

Для лучших результатов квантования калибровочные данные должны быть представителем фактических входных параметров, которые предсказаны сетью.

dlQuantObj.calibrate(augimdsTrain);

Создайте Intel Куарт главный стандарт

Установите инструмент path синтеза указывать на установленный исполняемый файл Intel® Quartus® Prime Standard Edition 18.1. Вы, должно быть, уже установили Altera® Quartus II.

% hdlsetuptoolpath('ToolName','Altera Quartus II','ToolPath','C:\intel\18.1\quartus\bin\quartus.exe');

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

Создайте целевой объект с пользовательским именем для вашего целевого устройства и интерфейса, чтобы соединить ваше целевое устройство к хосту - компьютеру. Интерфейсные опции являются JTAG и Ethernet.

hTarget = dlhdl.Target('Intel','Interface','JTAG');

В качестве альтернативы можно использовать интерфейс Ethernet.

% hTarget = dlhdl.Target('Intel','Interface','Ethernet');

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

Создайте объект dlhdl.Workflow класс. Specify dlQuantObj как сеть. Убедитесь, что имя потока битов совпадает с типом данных и платой FPGA, для которой вы предназначаетесь. В этом примере целевая плата FPGA является платой Intel Arria10 SOC, и поток битов использует int8 тип данных.

hW = dlhdl.Workflow('network', dlQuantObj, 'Bitstream', 'arria10soc_int8','Target',hTarget);

Скомпилируйте объект рабочего процесса

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

dn = hW.compile
### Compiling network for Deep Learning FPGA prototyping ...
### Targeting FPGA bitstream arria10soc_int8.
### The network includes the following layers:
     1   'data'                           Image Input                   224×224×3 images with 'zerocenter' normalization                       (SW Layer)
     2   'conv1-7x7_s2'                   Convolution                   64 7×7×3 convolutions with stride [2  2] and padding [3  3  3  3]      (HW Layer)
     3   'conv1-relu_7x7'                 ReLU                          ReLU                                                                   (HW Layer)
     4   'pool1-3x3_s2'                   Max Pooling                   3×3 max pooling with stride [2  2] and padding [0  1  0  1]            (HW Layer)
     5   'pool1-norm1'                    Cross Channel Normalization   cross channel normalization with 5 channels per element                (HW Layer)
     6   'conv2-3x3_reduce'               Convolution                   64 1×1×64 convolutions with stride [1  1] and padding [0  0  0  0]     (HW Layer)
     7   'conv2-relu_3x3_reduce'          ReLU                          ReLU                                                                   (HW Layer)
     8   'conv2-3x3'                      Convolution                   192 3×3×64 convolutions with stride [1  1] and padding [1  1  1  1]    (HW Layer)
     9   'conv2-relu_3x3'                 ReLU                          ReLU                                                                   (HW Layer)
    10   'conv2-norm2'                    Cross Channel Normalization   cross channel normalization with 5 channels per element                (HW Layer)
    11   'pool2-3x3_s2'                   Max Pooling                   3×3 max pooling with stride [2  2] and padding [0  1  0  1]            (HW Layer)
    12   'inception_3a-1x1'               Convolution                   64 1×1×192 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    13   'inception_3a-relu_1x1'          ReLU                          ReLU                                                                   (HW Layer)
    14   'inception_3a-3x3_reduce'        Convolution                   96 1×1×192 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    15   'inception_3a-relu_3x3_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    16   'inception_3a-3x3'               Convolution                   128 3×3×96 convolutions with stride [1  1] and padding [1  1  1  1]    (HW Layer)
    17   'inception_3a-relu_3x3'          ReLU                          ReLU                                                                   (HW Layer)
    18   'inception_3a-5x5_reduce'        Convolution                   16 1×1×192 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    19   'inception_3a-relu_5x5_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    20   'inception_3a-5x5'               Convolution                   32 5×5×16 convolutions with stride [1  1] and padding [2  2  2  2]     (HW Layer)
    21   'inception_3a-relu_5x5'          ReLU                          ReLU                                                                   (HW Layer)
    22   'inception_3a-pool'              Max Pooling                   3×3 max pooling with stride [1  1] and padding [1  1  1  1]            (HW Layer)
    23   'inception_3a-pool_proj'         Convolution                   32 1×1×192 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    24   'inception_3a-relu_pool_proj'    ReLU                          ReLU                                                                   (HW Layer)
    25   'inception_3a-output'            Depth concatenation           Depth concatenation of 4 inputs                                        (HW Layer)
    26   'inception_3b-1x1'               Convolution                   128 1×1×256 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    27   'inception_3b-relu_1x1'          ReLU                          ReLU                                                                   (HW Layer)
    28   'inception_3b-3x3_reduce'        Convolution                   128 1×1×256 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    29   'inception_3b-relu_3x3_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    30   'inception_3b-3x3'               Convolution                   192 3×3×128 convolutions with stride [1  1] and padding [1  1  1  1]   (HW Layer)
    31   'inception_3b-relu_3x3'          ReLU                          ReLU                                                                   (HW Layer)
    32   'inception_3b-5x5_reduce'        Convolution                   32 1×1×256 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    33   'inception_3b-relu_5x5_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    34   'inception_3b-5x5'               Convolution                   96 5×5×32 convolutions with stride [1  1] and padding [2  2  2  2]     (HW Layer)
    35   'inception_3b-relu_5x5'          ReLU                          ReLU                                                                   (HW Layer)
    36   'inception_3b-pool'              Max Pooling                   3×3 max pooling with stride [1  1] and padding [1  1  1  1]            (HW Layer)
    37   'inception_3b-pool_proj'         Convolution                   64 1×1×256 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    38   'inception_3b-relu_pool_proj'    ReLU                          ReLU                                                                   (HW Layer)
    39   'inception_3b-output'            Depth concatenation           Depth concatenation of 4 inputs                                        (HW Layer)
    40   'pool3-3x3_s2'                   Max Pooling                   3×3 max pooling with stride [2  2] and padding [0  1  0  1]            (HW Layer)
    41   'inception_4a-1x1'               Convolution                   192 1×1×480 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    42   'inception_4a-relu_1x1'          ReLU                          ReLU                                                                   (HW Layer)
    43   'inception_4a-3x3_reduce'        Convolution                   96 1×1×480 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    44   'inception_4a-relu_3x3_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    45   'inception_4a-3x3'               Convolution                   208 3×3×96 convolutions with stride [1  1] and padding [1  1  1  1]    (HW Layer)
    46   'inception_4a-relu_3x3'          ReLU                          ReLU                                                                   (HW Layer)
    47   'inception_4a-5x5_reduce'        Convolution                   16 1×1×480 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    48   'inception_4a-relu_5x5_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    49   'inception_4a-5x5'               Convolution                   48 5×5×16 convolutions with stride [1  1] and padding [2  2  2  2]     (HW Layer)
    50   'inception_4a-relu_5x5'          ReLU                          ReLU                                                                   (HW Layer)
    51   'inception_4a-pool'              Max Pooling                   3×3 max pooling with stride [1  1] and padding [1  1  1  1]            (HW Layer)
    52   'inception_4a-pool_proj'         Convolution                   64 1×1×480 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    53   'inception_4a-relu_pool_proj'    ReLU                          ReLU                                                                   (HW Layer)
    54   'inception_4a-output'            Depth concatenation           Depth concatenation of 4 inputs                                        (HW Layer)
    55   'inception_4b-1x1'               Convolution                   160 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    56   'inception_4b-relu_1x1'          ReLU                          ReLU                                                                   (HW Layer)
    57   'inception_4b-3x3_reduce'        Convolution                   112 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    58   'inception_4b-relu_3x3_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    59   'inception_4b-3x3'               Convolution                   224 3×3×112 convolutions with stride [1  1] and padding [1  1  1  1]   (HW Layer)
    60   'inception_4b-relu_3x3'          ReLU                          ReLU                                                                   (HW Layer)
    61   'inception_4b-5x5_reduce'        Convolution                   24 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    62   'inception_4b-relu_5x5_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    63   'inception_4b-5x5'               Convolution                   64 5×5×24 convolutions with stride [1  1] and padding [2  2  2  2]     (HW Layer)
    64   'inception_4b-relu_5x5'          ReLU                          ReLU                                                                   (HW Layer)
    65   'inception_4b-pool'              Max Pooling                   3×3 max pooling with stride [1  1] and padding [1  1  1  1]            (HW Layer)
    66   'inception_4b-pool_proj'         Convolution                   64 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    67   'inception_4b-relu_pool_proj'    ReLU                          ReLU                                                                   (HW Layer)
    68   'inception_4b-output'            Depth concatenation           Depth concatenation of 4 inputs                                        (HW Layer)
    69   'inception_4c-1x1'               Convolution                   128 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    70   'inception_4c-relu_1x1'          ReLU                          ReLU                                                                   (HW Layer)
    71   'inception_4c-3x3_reduce'        Convolution                   128 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    72   'inception_4c-relu_3x3_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    73   'inception_4c-3x3'               Convolution                   256 3×3×128 convolutions with stride [1  1] and padding [1  1  1  1]   (HW Layer)
    74   'inception_4c-relu_3x3'          ReLU                          ReLU                                                                   (HW Layer)
    75   'inception_4c-5x5_reduce'        Convolution                   24 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    76   'inception_4c-relu_5x5_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    77   'inception_4c-5x5'               Convolution                   64 5×5×24 convolutions with stride [1  1] and padding [2  2  2  2]     (HW Layer)
    78   'inception_4c-relu_5x5'          ReLU                          ReLU                                                                   (HW Layer)
    79   'inception_4c-pool'              Max Pooling                   3×3 max pooling with stride [1  1] and padding [1  1  1  1]            (HW Layer)
    80   'inception_4c-pool_proj'         Convolution                   64 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    81   'inception_4c-relu_pool_proj'    ReLU                          ReLU                                                                   (HW Layer)
    82   'inception_4c-output'            Depth concatenation           Depth concatenation of 4 inputs                                        (HW Layer)
    83   'inception_4d-1x1'               Convolution                   112 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    84   'inception_4d-relu_1x1'          ReLU                          ReLU                                                                   (HW Layer)
    85   'inception_4d-3x3_reduce'        Convolution                   144 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    86   'inception_4d-relu_3x3_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    87   'inception_4d-3x3'               Convolution                   288 3×3×144 convolutions with stride [1  1] and padding [1  1  1  1]   (HW Layer)
    88   'inception_4d-relu_3x3'          ReLU                          ReLU                                                                   (HW Layer)
    89   'inception_4d-5x5_reduce'        Convolution                   32 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    90   'inception_4d-relu_5x5_reduce'   ReLU                          ReLU                                                                   (HW Layer)
    91   'inception_4d-5x5'               Convolution                   64 5×5×32 convolutions with stride [1  1] and padding [2  2  2  2]     (HW Layer)
    92   'inception_4d-relu_5x5'          ReLU                          ReLU                                                                   (HW Layer)
    93   'inception_4d-pool'              Max Pooling                   3×3 max pooling with stride [1  1] and padding [1  1  1  1]            (HW Layer)
    94   'inception_4d-pool_proj'         Convolution                   64 1×1×512 convolutions with stride [1  1] and padding [0  0  0  0]    (HW Layer)
    95   'inception_4d-relu_pool_proj'    ReLU                          ReLU                                                                   (HW Layer)
    96   'inception_4d-output'            Depth concatenation           Depth concatenation of 4 inputs                                        (HW Layer)
    97   'inception_4e-1x1'               Convolution                   256 1×1×528 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    98   'inception_4e-relu_1x1'          ReLU                          ReLU                                                                   (HW Layer)
    99   'inception_4e-3x3_reduce'        Convolution                   160 1×1×528 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    100   'inception_4e-relu_3x3_reduce'   ReLU                          ReLU                                                                  (HW Layer)
    101   'inception_4e-3x3'               Convolution                   320 3×3×160 convolutions with stride [1  1] and padding [1  1  1  1]  (HW Layer)
    102   'inception_4e-relu_3x3'          ReLU                          ReLU                                                                  (HW Layer)
    103   'inception_4e-5x5_reduce'        Convolution                   32 1×1×528 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    104   'inception_4e-relu_5x5_reduce'   ReLU                          ReLU                                                                  (HW Layer)
    105   'inception_4e-5x5'               Convolution                   128 5×5×32 convolutions with stride [1  1] and padding [2  2  2  2]   (HW Layer)
    106   'inception_4e-relu_5x5'          ReLU                          ReLU                                                                  (HW Layer)
    107   'inception_4e-pool'              Max Pooling                   3×3 max pooling with stride [1  1] and padding [1  1  1  1]           (HW Layer)
    108   'inception_4e-pool_proj'         Convolution                   128 1×1×528 convolutions with stride [1  1] and padding [0  0  0  0]  (HW Layer)
    109   'inception_4e-relu_pool_proj'    ReLU                          ReLU                                                                  (HW Layer)
    110   'inception_4e-output'            Depth concatenation           Depth concatenation of 4 inputs                                       (HW Layer)
    111   'pool4-3x3_s2'                   Max Pooling                   3×3 max pooling with stride [2  2] and padding [0  1  0  1]           (HW Layer)
    112   'inception_5a-1x1'               Convolution                   256 1×1×832 convolutions with stride [1  1] and padding [0  0  0  0]  (HW Layer)
    113   'inception_5a-relu_1x1'          ReLU                          ReLU                                                                  (HW Layer)
    114   'inception_5a-3x3_reduce'        Convolution                   160 1×1×832 convolutions with stride [1  1] and padding [0  0  0  0]  (HW Layer)
    115   'inception_5a-relu_3x3_reduce'   ReLU                          ReLU                                                                  (HW Layer)
    116   'inception_5a-3x3'               Convolution                   320 3×3×160 convolutions with stride [1  1] and padding [1  1  1  1]  (HW Layer)
    117   'inception_5a-relu_3x3'          ReLU                          ReLU                                                                  (HW Layer)
    118   'inception_5a-5x5_reduce'        Convolution                   32 1×1×832 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    119   'inception_5a-relu_5x5_reduce'   ReLU                          ReLU                                                                  (HW Layer)
    120   'inception_5a-5x5'               Convolution                   128 5×5×32 convolutions with stride [1  1] and padding [2  2  2  2]   (HW Layer)
    121   'inception_5a-relu_5x5'          ReLU                          ReLU                                                                  (HW Layer)
    122   'inception_5a-pool'              Max Pooling                   3×3 max pooling with stride [1  1] and padding [1  1  1  1]           (HW Layer)
    123   'inception_5a-pool_proj'         Convolution                   128 1×1×832 convolutions with stride [1  1] and padding [0  0  0  0]  (HW Layer)
    124   'inception_5a-relu_pool_proj'    ReLU                          ReLU                                                                  (HW Layer)
    125   'inception_5a-output'            Depth concatenation           Depth concatenation of 4 inputs                                       (HW Layer)
    126   'inception_5b-1x1'               Convolution                   384 1×1×832 convolutions with stride [1  1] and padding [0  0  0  0]  (HW Layer)
    127   'inception_5b-relu_1x1'          ReLU                          ReLU                                                                  (HW Layer)
    128   'inception_5b-3x3_reduce'        Convolution                   192 1×1×832 convolutions with stride [1  1] and padding [0  0  0  0]  (HW Layer)
    129   'inception_5b-relu_3x3_reduce'   ReLU                          ReLU                                                                  (HW Layer)
    130   'inception_5b-3x3'               Convolution                   384 3×3×192 convolutions with stride [1  1] and padding [1  1  1  1]  (HW Layer)
    131   'inception_5b-relu_3x3'          ReLU                          ReLU                                                                  (HW Layer)
    132   'inception_5b-5x5_reduce'        Convolution                   48 1×1×832 convolutions with stride [1  1] and padding [0  0  0  0]   (HW Layer)
    133   'inception_5b-relu_5x5_reduce'   ReLU                          ReLU                                                                  (HW Layer)
    134   'inception_5b-5x5'               Convolution                   128 5×5×48 convolutions with stride [1  1] and padding [2  2  2  2]   (HW Layer)
    135   'inception_5b-relu_5x5'          ReLU                          ReLU                                                                  (HW Layer)
    136   'inception_5b-pool'              Max Pooling                   3×3 max pooling with stride [1  1] and padding [1  1  1  1]           (HW Layer)
    137   'inception_5b-pool_proj'         Convolution                   128 1×1×832 convolutions with stride [1  1] and padding [0  0  0  0]  (HW Layer)
    138   'inception_5b-relu_pool_proj'    ReLU                          ReLU                                                                  (HW Layer)
    139   'inception_5b-output'            Depth concatenation           Depth concatenation of 4 inputs                                       (HW Layer)
    140   'pool5-7x7_s1'                   2-D Global Average Pooling    2-D global average pooling                                            (HW Layer)
    141   'pool5-drop_7x7_s1'              Dropout                       40% dropout                                                           (HW Layer)
    142   'newFC'                          Fully Connected               5 fully connected layer                                               (HW Layer)
    143   'newProb'                        Softmax                       softmax                                                               (HW Layer)
    144   'newClassOutput'                 Classification Output         crossentropyex with 'MathWorks Cap' and 4 other classes               (SW Layer)
                                                                                                                                             
### Notice: The layer 'data' with type 'nnet.cnn.layer.ImageInputLayer' is implemented in software.
### Notice: The layer 'newClassOutput' with type 'nnet.cnn.layer.ClassificationOutputLayer' is implemented in software.
### Compiling layer group: conv1-7x7_s2>>pool2-3x3_s2 ...
### Compiling layer group: conv1-7x7_s2>>pool2-3x3_s2 ... complete.
### Compiling layer group: inception_3a-1x1>>inception_3a-relu_1x1 ...
### Compiling layer group: inception_3a-1x1>>inception_3a-relu_1x1 ... complete.
### Compiling layer group: inception_3a-3x3_reduce>>inception_3a-relu_3x3 ...
### Compiling layer group: inception_3a-3x3_reduce>>inception_3a-relu_3x3 ... complete.
### Compiling layer group: inception_3a-5x5_reduce>>inception_3a-relu_5x5 ...
### Compiling layer group: inception_3a-5x5_reduce>>inception_3a-relu_5x5 ... complete.
### Compiling layer group: inception_3a-pool>>inception_3a-relu_pool_proj ...
### Compiling layer group: inception_3a-pool>>inception_3a-relu_pool_proj ... complete.
### Compiling layer group: inception_3b-1x1>>inception_3b-relu_1x1 ...
### Compiling layer group: inception_3b-1x1>>inception_3b-relu_1x1 ... complete.
### Compiling layer group: inception_3b-3x3_reduce>>inception_3b-relu_3x3 ...
### Compiling layer group: inception_3b-3x3_reduce>>inception_3b-relu_3x3 ... complete.
### Compiling layer group: inception_3b-5x5_reduce>>inception_3b-relu_5x5 ...
### Compiling layer group: inception_3b-5x5_reduce>>inception_3b-relu_5x5 ... complete.
### Compiling layer group: inception_3b-pool>>inception_3b-relu_pool_proj ...
### Compiling layer group: inception_3b-pool>>inception_3b-relu_pool_proj ... complete.
### Compiling layer group: pool3-3x3_s2 ...
### Compiling layer group: pool3-3x3_s2 ... complete.
### Compiling layer group: inception_4a-1x1>>inception_4a-relu_1x1 ...
### Compiling layer group: inception_4a-1x1>>inception_4a-relu_1x1 ... complete.
### Compiling layer group: inception_4a-3x3_reduce>>inception_4a-relu_3x3 ...
### Compiling layer group: inception_4a-3x3_reduce>>inception_4a-relu_3x3 ... complete.
### Compiling layer group: inception_4a-5x5_reduce>>inception_4a-relu_5x5 ...
### Compiling layer group: inception_4a-5x5_reduce>>inception_4a-relu_5x5 ... complete.
### Compiling layer group: inception_4a-pool>>inception_4a-relu_pool_proj ...
### Compiling layer group: inception_4a-pool>>inception_4a-relu_pool_proj ... complete.
### Compiling layer group: inception_4b-1x1>>inception_4b-relu_1x1 ...
### Compiling layer group: inception_4b-1x1>>inception_4b-relu_1x1 ... complete.
### Compiling layer group: inception_4b-3x3_reduce>>inception_4b-relu_3x3 ...
### Compiling layer group: inception_4b-3x3_reduce>>inception_4b-relu_3x3 ... complete.
### Compiling layer group: inception_4b-5x5_reduce>>inception_4b-relu_5x5 ...
### Compiling layer group: inception_4b-5x5_reduce>>inception_4b-relu_5x5 ... complete.
### Compiling layer group: inception_4b-pool>>inception_4b-relu_pool_proj ...
### Compiling layer group: inception_4b-pool>>inception_4b-relu_pool_proj ... complete.
### Compiling layer group: inception_4c-1x1>>inception_4c-relu_1x1 ...
### Compiling layer group: inception_4c-1x1>>inception_4c-relu_1x1 ... complete.
### Compiling layer group: inception_4c-3x3_reduce>>inception_4c-relu_3x3 ...
### Compiling layer group: inception_4c-3x3_reduce>>inception_4c-relu_3x3 ... complete.
### Compiling layer group: inception_4c-5x5_reduce>>inception_4c-relu_5x5 ...
### Compiling layer group: inception_4c-5x5_reduce>>inception_4c-relu_5x5 ... complete.
### Compiling layer group: inception_4c-pool>>inception_4c-relu_pool_proj ...
### Compiling layer group: inception_4c-pool>>inception_4c-relu_pool_proj ... complete.
### Compiling layer group: inception_4d-1x1>>inception_4d-relu_1x1 ...
### Compiling layer group: inception_4d-1x1>>inception_4d-relu_1x1 ... complete.
### Compiling layer group: inception_4d-3x3_reduce>>inception_4d-relu_3x3 ...
### Compiling layer group: inception_4d-3x3_reduce>>inception_4d-relu_3x3 ... complete.
### Compiling layer group: inception_4d-5x5_reduce>>inception_4d-relu_5x5 ...
### Compiling layer group: inception_4d-5x5_reduce>>inception_4d-relu_5x5 ... complete.
### Compiling layer group: inception_4d-pool>>inception_4d-relu_pool_proj ...
### Compiling layer group: inception_4d-pool>>inception_4d-relu_pool_proj ... complete.
### Compiling layer group: inception_4e-1x1>>inception_4e-relu_1x1 ...
### Compiling layer group: inception_4e-1x1>>inception_4e-relu_1x1 ... complete.
### Compiling layer group: inception_4e-3x3_reduce>>inception_4e-relu_3x3 ...
### Compiling layer group: inception_4e-3x3_reduce>>inception_4e-relu_3x3 ... complete.
### Compiling layer group: inception_4e-5x5_reduce>>inception_4e-relu_5x5 ...
### Compiling layer group: inception_4e-5x5_reduce>>inception_4e-relu_5x5 ... complete.
### Compiling layer group: inception_4e-pool>>inception_4e-relu_pool_proj ...
### Compiling layer group: inception_4e-pool>>inception_4e-relu_pool_proj ... complete.
### Compiling layer group: pool4-3x3_s2 ...
### Compiling layer group: pool4-3x3_s2 ... complete.
### Compiling layer group: inception_5a-1x1>>inception_5a-relu_1x1 ...
### Compiling layer group: inception_5a-1x1>>inception_5a-relu_1x1 ... complete.
### Compiling layer group: inception_5a-3x3_reduce>>inception_5a-relu_3x3 ...
### Compiling layer group: inception_5a-3x3_reduce>>inception_5a-relu_3x3 ... complete.
### Compiling layer group: inception_5a-5x5_reduce>>inception_5a-relu_5x5 ...
### Compiling layer group: inception_5a-5x5_reduce>>inception_5a-relu_5x5 ... complete.
### Compiling layer group: inception_5a-pool>>inception_5a-relu_pool_proj ...
### Compiling layer group: inception_5a-pool>>inception_5a-relu_pool_proj ... complete.
### Compiling layer group: inception_5b-1x1>>inception_5b-relu_1x1 ...
### Compiling layer group: inception_5b-1x1>>inception_5b-relu_1x1 ... complete.
### Compiling layer group: inception_5b-3x3_reduce>>inception_5b-relu_3x3 ...
### Compiling layer group: inception_5b-3x3_reduce>>inception_5b-relu_3x3 ... complete.
### Compiling layer group: inception_5b-5x5_reduce>>inception_5b-relu_5x5 ...
### Compiling layer group: inception_5b-5x5_reduce>>inception_5b-relu_5x5 ... complete.
### Compiling layer group: inception_5b-pool>>inception_5b-relu_pool_proj ...
### Compiling layer group: inception_5b-pool>>inception_5b-relu_pool_proj ... complete.
### Compiling layer group: pool5-7x7_s1 ...
### Compiling layer group: pool5-7x7_s1 ... complete.
### Compiling layer group: newFC ...
### Compiling layer group: newFC ... complete.

### Allocating external memory buffers:

          offset_name          offset_address    allocated_space 
    _______________________    ______________    ________________

    "InputDataOffset"           "0x00000000"     "12.0 MB"       
    "OutputResultOffset"        "0x00c00000"     "4.0 MB"        
    "SchedulerDataOffset"       "0x01000000"     "4.0 MB"        
    "SystemBufferOffset"        "0x01400000"     "28.0 MB"       
    "InstructionDataOffset"     "0x03000000"     "8.0 MB"        
    "ConvWeightDataOffset"      "0x03800000"     "32.0 MB"       
    "FCWeightDataOffset"        "0x05800000"     "4.0 MB"        
    "EndOffset"                 "0x05c00000"     "Total: 92.0 MB"

### Network compilation complete.
dn = struct with fields:
             weights: [1×1 struct]
        instructions: [1×1 struct]
           registers: [1×1 struct]
    syncInstructions: [1×1 struct]

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

Чтобы развернуть сеть на оборудовании Intel Arria10 SoC, запустите развернуть функцию dlhdl.Workflow объект. Эта функция использует выход функции компиляции, чтобы программировать плату FPGA при помощи файла программирования. Функция также загружает сетевые веса и смещения. Развернуть функция начинает программировать устройство FPGA, сообщения о ходе выполнения отображений, и время, которое требуется, чтобы развернуть сеть.

hW.deploy
### Programming FPGA Bitstream using JTAG...
### Programming the FPGA bitstream has been completed successfully.
### Loading weights to Conv Processor.
### Conv Weights loaded. Current time is 11-Jun-2021 22:20:12
### Loading weights to FC Processor.
### FC Weights loaded. Current time is 11-Jun-2021 22:20:12

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

I = imresize(readimage(imdsValidation,1),[224 224]);
figure
imshow(I)

Получите предсказание изображений

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

[prediction, speed] = hW.predict(single(I),'Profile','off');
### Finished writing input activations.
### Running single input activation.
[val, index] = max(prediction);
label = netTransfer.Layers(end).ClassNames{index}
label = 
'MathWorks Cap'
title(string(label));

Получите развернутую производительность сети

Просмотрите эффективность ofd развернутая сеть при помощи predict метод с Profile набор аргумента к on.

[~, speed] = hW.predict(single(I),'Profile','on')
### Finished writing input activations.
### Running single input activation.


              Deep Learning Processor Profiler Performance Results

                   LastFrameLatency(cycles)   LastFrameLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                   15836394                  0.10558                       1           15845325              9.5
    conv1-7x7_s2           1139964                  0.00760 
    pool1-3x3_s2            268928                  0.00179 
    pool1-norm1             310985                  0.00207 
    conv2-3x3_reduce        278740                  0.00186 
    conv2-3x3               823735                  0.00549 
    conv2-norm2             952105                  0.00635 
    pool2-3x3_s2            273479                  0.00182 
    inception_3a-1x1        198078                  0.00132 
    inception_3a-3x3_reduce    280845                  0.00187 
    inception_3a-3x3        196410                  0.00131 
    inception_3a-5x5_reduce     73846                  0.00049 
    inception_3a-5x5         35295                  0.00024 
    inception_3a-pool        94554                  0.00063 
    inception_3a-pool_proj    115223                  0.00077 
    inception_3b-1x1        619945                  0.00413 
    inception_3b-3x3_reduce    620509                  0.00414 
    inception_3b-3x3        367297                  0.00245 
    inception_3b-5x5_reduce    207909                  0.00139 
    inception_3b-5x5        178552                  0.00119 
    inception_3b-pool       179959                  0.00120 
    inception_3b-pool_proj    344959                  0.00230 
    pool3-3x3_s2            293640                  0.00196 
    inception_4a-1x1        332992                  0.00222 
    inception_4a-3x3_reduce    181829                  0.00121 
    inception_4a-3x3         83777                  0.00056 
    inception_4a-5x5_reduce     55639                  0.00037 
    inception_4a-5x5         14500                  0.00010 
    inception_4a-pool        77187                  0.00051 
    inception_4a-pool_proj    130965                  0.00087 
    inception_4b-1x1        300254                  0.00200 
    inception_4b-3x3_reduce    220515                  0.00147 
    inception_4b-3x3        101764                  0.00068 
    inception_4b-5x5_reduce     73096                  0.00049 
    inception_4b-5x5         25720                  0.00017 
    inception_4b-pool        82277                  0.00055 
    inception_4b-pool_proj    139530                  0.00093 
    inception_4c-1x1        246715                  0.00164 
    inception_4c-3x3_reduce    246987                  0.00165 
    inception_4c-3x3        129291                  0.00086 
    inception_4c-5x5_reduce     72855                  0.00049 
    inception_4c-5x5         25444                  0.00017 
    inception_4c-pool        82661                  0.00055 
    inception_4c-pool_proj    139761                  0.00093 
    inception_4d-1x1        220154                  0.00147 
    inception_4d-3x3_reduce    273136                  0.00182 
    inception_4d-3x3        159811                  0.00107 
    inception_4d-5x5_reduce     86719                  0.00058 
    inception_4d-5x5         32485                  0.00022 
    inception_4d-pool        82309                  0.00055 
    inception_4d-pool_proj    139464                  0.00093 
    inception_4e-1x1        474515                  0.00316 
    inception_4e-3x3_reduce    309661                  0.00206 
    inception_4e-3x3        193442                  0.00129 
    inception_4e-5x5_reduce     88661                  0.00059 
    inception_4e-5x5         62881                  0.00042 
    inception_4e-pool        85098                  0.00057 
    inception_4e-pool_proj    254234                  0.00169 
    pool4-3x3_s2            164072                  0.00109 
    inception_5a-1x1        385821                  0.00257 
    inception_5a-3x3_reduce    250827                  0.00167 
    inception_5a-3x3         99439                  0.00066 
    inception_5a-5x5_reduce     69697                  0.00046 
    inception_5a-5x5         32465                  0.00022 
    inception_5a-pool        53624                  0.00036 
    inception_5a-pool_proj    205084                  0.00137 
    inception_5b-1x1        567107                  0.00378 
    inception_5b-3x3_reduce    295819                  0.00197 
    inception_5b-3x3        139308                  0.00093 
    inception_5b-5x5_reduce     92415                  0.00062 
    inception_5b-5x5         46311                  0.00031 
    inception_5b-pool        53882                  0.00036 
    inception_5b-pool_proj    205632                  0.00137 
    pool5-7x7_s1             69837                  0.00047 
    newFC                    23215                  0.00015 
 * The clock frequency of the DL processor is: 150MHz
speed=75×5 table
                                   Latency(cycles)    Latency(seconds)    NumFrames    Total Latency(cycles)    Frame/s 
                                   _______________    ________________    _________    _____________________    ________

    Network                          1.5836e+07             0.10558          "1"            "15845325"          "9.4665"
    ____conv1-7x7_s2                   1.14e+06           0.0075998          ""             ""                  ""      
    ____pool1-3x3_s2                 2.6893e+05           0.0017929          ""             ""                  ""      
    ____pool1-norm1                  3.1098e+05           0.0020732          ""             ""                  ""      
    ____conv2-3x3_reduce             2.7874e+05           0.0018583          ""             ""                  ""      
    ____conv2-3x3                    8.2374e+05           0.0054916          ""             ""                  ""      
    ____conv2-norm2                   9.521e+05           0.0063474          ""             ""                  ""      
    ____pool2-3x3_s2                 2.7348e+05           0.0018232          ""             ""                  ""      
    ____inception_3a-1x1             1.9808e+05           0.0013205          ""             ""                  ""      
    ____inception_3a-3x3_reduce      2.8084e+05           0.0018723          ""             ""                  ""      
    ____inception_3a-3x3             1.9641e+05           0.0013094          ""             ""                  ""      
    ____inception_3a-5x5_reduce           73846          0.00049231          ""             ""                  ""      
    ____inception_3a-5x5                  35295           0.0002353          ""             ""                  ""      
    ____inception_3a-pool                 94554          0.00063036          ""             ""                  ""      
    ____inception_3a-pool_proj       1.1522e+05          0.00076815          ""             ""                  ""      
    ____inception_3b-1x1             6.1994e+05            0.004133          ""             ""                  ""      
      ⋮

speed таблица содержит информацию о задержке для каждого слоя, общей сетевой задержки и полной производительности сети в кадрах в секунду (FPS). Для получения дополнительной информации смотрите Запуск Вывода Профиля.