Разверните квантованную нейронную сеть

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

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

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

Создайте модифицированную серийную сеть при помощи передачи обучения

Создайте модифицированную серийную сеть при помощи передачи обучения. Для получения дополнительной информации смотрите, Создают Серийную Сеть для Квантования.

Создайте квантованный сетевой объект

Создайте dlquantizer возразите и задайте сеть, чтобы квантовать и ExecutionEnvironment . netTransfer сетью является выход модифицированной сети, созданной, переводом учась. Создать netTransfer серийная сеть, смотрите, Создают Серийную Сеть для Квантования.

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

Загрузите обучающие данные

Разархивируйте и загрузите новые изображения как datastore изображений. imageDatastore автоматически помечает изображения на основе имен папок и хранит данные как ImageDatastore объект. Datastore изображений позволяет вам сохранить большие данные изображения, включая данные, которые не умещаются в памяти, и эффективно считать пакеты изображений во время обучения сверточной нейронной сети.

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

curDir = pwd;
newDir = fullfile(matlabroot,'examples','deeplearning_shared','data','logos_dataset.zip');
copyfile(newDir,curDir);
unzip('logos_dataset.zip');
unzip('logos_dataset.zip');

imds = imageDatastore('logos_dataset', ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');

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

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

imageData = imageDatastore(fullfile(curDir,'logos_dataset'),...
 'IncludeSubfolders',true,'FileExtensions','.JPG','LabelSource','foldernames');

dlQuantObj.calibrate(imageData);

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

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

hTarget = dlhdl.Target('Xilinx','Interface','Ethernet','IPAddress','192.168.1.101');

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

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

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

Скомпилируйте квантованную серийную сеть

Скомпилируйте квантованную серийную сеть.

dn = hW.compile
    offset_name                 offset_address    allocated_space
    "InputDataOffset"           "0x00000000"     "48.0 MB"        
    "OutputResultOffset"        "0x03000000"     "4.0 MB"         
    "SystemBufferOffset"        "0x03400000"     "28.0 MB"        
    "InstructionDataOffset"     "0x05000000"     "4.0 MB"         
    "ConvWeightDataOffset"      "0x05400000"     "4.0 MB"         
    "FCWeightDataOffset"        "0x05800000"     "56.0 MB"        
    "EndOffset"                 "0x09000000"     "Total: 144.0 MB"
dn = struct with fields:
       Operators: [1×1 struct]
    LayerConfigs: [1×1 struct]
      NetConfigs: [1×1 struct]

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

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

hW.deploy

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

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

idx = randperm(numel(imdsValidation.Files),4);
figure
for i = 1:4
    subplot(2,2,i)
    I = readimage(imdsValidation,idx(i));
    imshow(I)
    [prediction, speed] = hW.predict(single(I),'Profile','on');
    [val, index] = max(prediction);
    netTransfer.Layers(end).ClassNames{index}
    label = netTransfer.Layers(end).ClassNames{index}
    title(string(label));
end
### Finished writing input activations.
### Running single input activations.
Deep Learning Processor Profiler Performance ResultsLastLayerLatency(cycles)   LastLayerLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                    7615557                  0.05077                       1            7616123             19.7
    conv_module            3123657                  0.02082 
        conv1               733903                  0.00489 
        norm1               485953                  0.00324 
        pool1               108979                  0.00073 
        conv2               631639                  0.00421 
        norm2               289646                  0.00193 
        pool2               115286                  0.00077 
        conv3               307112                  0.00205 
        conv4               249627                  0.00166 
        conv5               176223                  0.00117 
        pool5                25404                  0.00017 
    fc_module              4491900                  0.02995 
        fc6                3083885                  0.02056 
        fc7                1370258                  0.00914 
        fc                   37755                  0.00025 
 * The clock frequency of the DL processor is: 150MHz
ans = 'carlsberg'
### Finished writing input activations.
### Running single input activations.


              Deep Learning Processor Profiler Performance ResultsLastLayerLatency(cycles)   LastLayerLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                    7615364                  0.05077                       1            7615905             19.7
    conv_module            3123385                  0.02082 
        conv1               733946                  0.00489 
        norm1               485695                  0.00324 
        pool1               108971                  0.00073 
        conv2               631616                  0.00421 
        norm2               289612                  0.00193 
        pool2               115363                  0.00077 
        conv3               307034                  0.00205 
        conv4               249683                  0.00166 
        conv5               176216                  0.00117 
        pool5                25364                  0.00017 
    fc_module              4491979                  0.02995 
        fc6                3083961                  0.02056 
        fc7                1370258                  0.00914 
        fc                   37758                  0.00025 
 * The clock frequency of the DL processor is: 150MHz
ans = 'pepsi'
### Finished writing input activations.
### Running single input activations.


              Deep Learning Processor Profiler Performance ResultsLastLayerLatency(cycles)   LastLayerLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                    7615042                  0.05077                       1            7615582             19.7
    conv_module            3123107                  0.02082 
        conv1               733949                  0.00489 
        norm1               485783                  0.00324 
        pool1               108565                  0.00072 
        conv2               631567                  0.00421 
        norm2               289568                  0.00193 
        pool2               115037                  0.00077 
        conv3               307355                  0.00205 
        conv4               249793                  0.00167 
        conv5               176217                  0.00117 
        pool5                25388                  0.00017 
    fc_module              4491935                  0.02995 
        fc6                3083920                  0.02056 
        fc7                1370258                  0.00914 
        fc                   37755                  0.00025 
 * The clock frequency of the DL processor is: 150MHz
ans = 'tsingtao'
### Finished writing input activations.
### Running single input activations.


              Deep Learning Processor Profiler Performance ResultsLastLayerLatency(cycles)   LastLayerLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                    7615303                  0.05077                       1            7615843             19.7
    conv_module            3123324                  0.02082 
        conv1               733883                  0.00489 
        norm1               485688                  0.00324 
        pool1               108995                  0.00073 
        conv2               631598                  0.00421 
        norm2               289636                  0.00193 
        pool2               115351                  0.00077 
        conv3               307108                  0.00205 
        conv4               249623                  0.00166 
        conv5               176193                  0.00117 
        pool5                25364                  0.00017 
    fc_module              4491979                  0.02995 
        fc6                3083961                  0.02056 
        fc7                1370258                  0.00914 
        fc                   37758                  0.00025 
 * The clock frequency of the DL processor is: 150MHz
ans = 'singha'

Смотрите также

Функции

Объекты

Похожие темы

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