Класс: dlhdl.Workflow
Пакет: dlhdl
Получите промежуточные результаты слоя для развернутой нейронной сети для глубокого обучения
возвращает промежуточные результаты данных об активации слоя для данных изображения в act
= activations(image
,layername
)imIn
, и имя слоя задано в layername
. Размер результата зависит от выходного размера слоя. Выходной размер слоя может быть получен при помощи analyzeNetwork
.
возвращает промежуточные результаты данных об активации слоя для данных изображения в act
= activations(imIn
,layername
, Name,Value
)imIn
, и имя слоя задано в layername
, с дополнительными опциями, заданными одним или несколькими Name,Value
парные аргументы. Размер результата зависит от выходного размера слоя. Выходной размер слоя может быть получен при помощи analyzeNetwork
.
image
— Введите изображениеВведите изображение в виде m-by-n-by-k числовой массив. m, n и k должны совпадать с размерностями входного слоя изображения нейронной сети для глубокого обучения. Например, для сети LogoNet, измените размер входных изображений к 227 227 3 массивами.
Типы данных: single
layername
— Имя слоя в развернутой нейронной сети для глубокого обученияИмя слоя в развернутой нейронной сети для глубокого обучения, результаты которой получены для изображения, заданного в imIn
.
Слой должен иметь тип Convolution
, Fully Connected
, Max Pooling
, ReLU
, или Dropout
Свертка
и Fully Connected
слои позволены, пока они не сопровождаются ReLU
слой.
Пример: 'maxpool_3'
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
Profiler
— Отметьте, который возвращает профильные результатыОтметьте, чтобы возвратить профильные результаты для нейронной сети для глубокого обучения, развернутой на требуемой плате.
Пример: 'Profiler','on'
act
— Промежуточные данные об активации слояarray of single
Промежуточные данные об активации слоя, возвращенные как массив одиночных игр. Размер массивов зависит от слоя выходной размер. Например, для сети 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)
Сравните самое сильное изображение канала активации с оригинальным изображением. Этот канал активируется на ребрах. Это активируется положительно на легких левых/темных правых краях и негативно на темных левых/легких правых краях.
compile
| deploy
| getBuildInfo
| predict
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.