Этот пример показывает, как использовать 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, переводом учась. В передаче обучения можно взять предварительно обученную сеть и использовать ее в качестве начальной точки, чтобы изучить новую задачу. Подстройка сети с передачей обучения обычно намного быстрее и легче, чем обучение сети со случайным образом инициализированными весами с нуля. Можно быстро передать изученные функции новой задаче с помощью меньшего числа учебных изображений.
Загрузите предварительно обученную сеть 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
объект. Установите целевую среду выполнения на FPGA..
dlQuantObj = dlquantizer(netTransfer,'ExecutionEnvironment','FPGA');
Используйте calibrate
функционируйте, чтобы осуществить сеть при помощи демонстрационных входных параметров, чтобы собрать информацию области значений. calibrate
функционируйте осуществляет сеть и собирает динамические диапазоны для настраиваемых параметров свертки и полносвязных слоев сети.
Для лучших результатов квантования калибровочные данные должны быть представителем фактических входных параметров, которые предсказаны сетью.
dlQuantObj.calibrate(augimdsTrain);
Установите инструмент 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]
Чтобы развернуть сеть на оборудовании 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). Для получения дополнительной информации смотрите Запуск Вывода Профиля.