activations

Класс: dlhdl.Workflow
Пакет: dlhdl

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

Описание

пример

act = activations(image,layername) возвращает промежуточные результаты данных об активации слоя для данных изображения в imIn, и имя слоя задано в layername. Размер результата зависит от выходного размера слоя. Выходной размер слоя может быть получен при помощи analyzeNetwork.

act = activations(imIn,layername, Name,Value)возвращает промежуточные результаты данных об активации слоя для данных изображения в imIn, и имя слоя задано в layername, с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы. Размер результата зависит от выходного размера слоя. Выходной размер слоя может быть получен при помощи analyzeNetwork.

Входные параметры

развернуть все

Введите изображение в виде m-by-n-by-k числовой массив. m, n и k должны совпадать с размерностями входного слоя изображения нейронной сети для глубокого обучения. Например, для сети LogoNet, измените размер входных изображений к 227 227 3 массивами.

Типы данных: single

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

Слой должен иметь тип Convolution, Fully Connected, Max Pooling, ReLU, или DropoutСвертка и Fully Connected слои позволены, пока они не сопровождаются ReLU слой.

Пример: 'maxpool_3'

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

Пример: 'Profiler','on'

Выходные аргументы

развернуть все

Промежуточные данные об активации слоя, возвращенные как массив одиночных игр. Размер массивов зависит от слоя выходной размер. Например, для сети ResNet-18 pool1 слой, размер возвращенного массива результата 56 56 64.

Примеры

развернуть все

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

Сеть распознавания логотипа

Логотипы помогают в идентификации бренда и распознавании. Многие компании включают свои логотипы в рекламу, материалы документации и продвижения. Сеть распознавания логотипа (LogoNet) была разработана в MATLAB® и может распознать 32 логотипа при различных условиях освещения и движениях камеры. Поскольку эта сеть фокусируется только на распознавании, можно использовать его в приложениях, где локализация не требуется.

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

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

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

  • Deep Learning Toolbox™

  • Deep Learning HDL Toolbox™

  • Computer Vision Toolbox™

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

Загружать предварительно обученную серийную сеть LogoNet, введите:

snet = getLogoNetwork();

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

Создайте целевой объект, который имеет пользовательское имя для вашего целевого устройства и интерфейса, чтобы соединить ваше целевое устройство к хосту - компьютеру. Интерфейсные опции являются JTAG и Ethernet. Чтобы использовать JTAG, установите Intel™ Quartus™ Standard Edition 18.1 Прайма. Создайте путь к своему установленному Intel исполняемый файл Куарта Прайма, если это уже не настраивается. Например, чтобы установить toolpath, введите:

% hdlsetuptoolpath('ToolName', 'Altera Quartus II','ToolPath', 'C:\altera\18.1\quartus\bin64');

Создать целевой объект, введите:

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

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

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

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

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

im = imread('ferrari.jpg');
imshow(im)

imgSize = size(im);
imgSize = imgSize(1:2);

Просмотрите сетевую архитектуру

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

analyzeNetwork(snet)

Слой Image Input задает входной размер. Прежде, чем передать изображение через сеть, можно изменить размер его. Сеть может также обработать увеличенные изображения.. Если вы питаете сетевые увеличенные изображения, активации также становятся больше. Поскольку сеть обучена на изображениях размера 227 227, это не обучено распознать большие объекты или функции.

Покажите активации первого слоя Maxpool

Исследуйте функции путем наблюдения, какие области в maxpool слоях активируются на изображении и сравнении того изображения к соответствующим областям в оригинальных изображениях. Каждый слой сверточной нейронной сети состоит из названных каналов многих 2D массивов. Передайте изображение через сеть и исследуйте выходные активации maxpool_1 слой.

act1 = hW.activations(single(im),'maxpool_1','Profiler','on');
          offset_name          offset_address     allocated_space 
    _______________________    ______________    _________________

    "InputDataOffset"           "0x00000000"     "24.0 MB"        
    "OutputResultOffset"        "0x01800000"     "136.0 MB"       
    "SystemBufferOffset"        "0x0a000000"     "64.0 MB"        
    "InstructionDataOffset"     "0x0e000000"     "8.0 MB"         
    "ConvWeightDataOffset"      "0x0e800000"     "4.0 MB"         
    "EndOffset"                 "0x0ec00000"     "Total: 236.0 MB"

### Programming FPGA Bitstream using JTAG...
### Programming the FPGA bitstream has been completed successfully.
### Finished writing input activations.
### Running single input activations.


              Deep Learning Processor Profiler Performance Results

                   LastLayerLatency(cycles)   LastLayerLatency(seconds)       FramesNum      Total Latency     Frames/s
                         -------------             -------------              ---------        ---------       ---------
Network                   10182024                  0.06788                       1           10182034             14.7
    conv_module           10182024                  0.06788 
        conv_1             7088885                  0.04726 
        maxpool_1          3093166                  0.02062 
 * The clock frequency of the DL processor is: 150MHz

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

sz = size(act1);
act1 = reshape(act1,[sz(1) sz(2) 1 sz(3)]);

Отобразите активации. Каждая активация может принять любое значение, поэтому нормировать выход с помощью mat2gray. Все активации масштабируются так, чтобы минимальная активация была 0, и максимальная активация равняется 1. Отобразите 96 изображений на 12 8 сетка, один для каждого канала в слое.

I = imtile(mat2gray(act1),'GridSize',[12 8]);
imshow(I)

Исследуйте активации в определенных каналах

Каждой мозаикой в сетке активаций является выход канала в maxpool_1 слой. Белые пиксели представляют сильные положительные активации, и черные пиксели представляют сильные отрицательные активации. Канал, который является в основном серым, не активируется как строго на входном изображении. Положение пикселя в активации канала соответствует тому же положению в оригинальном изображении. Белый пиксель в местоположении в канале указывает, что канал строго активируется в том положении.

Измените размер активаций в канале 33, чтобы быть одного размера с оригинальным изображением и отобразить активации.

act1ch33 = act1(:,:,:,22);
act1ch33 = mat2gray(act1ch33);
act1ch33 = imresize(act1ch33,imgSize);

I = imtile({im,act1ch33});
imshow(I)

Найдите самый сильный канал активации

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

[maxValue,maxValueIndex] = max(max(max(act1)));
act1chMax = act1(:,:,:,maxValueIndex);
act1chMax = mat2gray(act1chMax);
act1chMax = imresize(act1chMax,imgSize);

I = imtile({im,act1chMax});
imshow(I)

Сравните самое сильное изображение канала активации с оригинальным изображением. Этот канал активируется на ребрах. Это активируется положительно на легких левых/темных правых краях и негативно на темных левых/легких правых краях.

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

| | |

Введенный в R2020b