exponenta event banner

deepDreamImage

Визуализация сетевых функций с помощью глубокого сна

Описание

I = deepDreamImage(net,layer,channels) возвращает массив изображений, которые сильно активируют каналы channels внутри сети net слоя с числовым индексом или именем, указанным layer. Эти изображения отображают функции, полученные сетью.

пример

I = deepDreamImage(net,layer,channels,Name,Value) возвращает изображение с дополнительными параметрами, указанными одним или несколькими Name,Value аргументы пары.

Примеры

свернуть все

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

net = alexnet;

Визуализация первых 25 функций, полученных первым сверточным слоем ('conv1') с использованием deepDreamImage. Набор 'PyramidLevels' до 1, чтобы изображения не масштабировались.

layer = 'conv1';
channels = 1:25;

I = deepDreamImage(net,layer,channels, ...
    'PyramidLevels',1, ...
    'Verbose',0);

figure
for i = 1:25
    subplot(5,5,i)
    imshow(I(:,:,:,i))
end

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

свернуть все

Обученная сеть, указанная как SeriesNetwork объект или DAGNetwork объект. Обученную сеть можно получить, импортируя предварительно обученную сеть или обучая собственную сеть с помощью trainNetwork функция. Дополнительные сведения о предварительно обученных сетях см. в разделе Предварительно обученные глубокие нейронные сети.

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

Слой для визуализации, заданный как положительное целое число, символьный вектор или строковый скаляр. Если net является DAGNetwork объект, укажите layer только в виде вектора символов или строкового скаляра. Определить layer в качестве индекса или имени слоя, для которого требуется визуализировать активации. Чтобы визуализировать элементы классификационного слоя, выберите последний полностью связанный слой перед классификационным слоем.

Совет

Выбор ReLU или выбывающих слоев для визуализации может не привести к созданию полезных изображений из-за влияния этих слоев на градиенты сети.

Запрашиваемые каналы, определяемые как скаляр или вектор индексов каналов. Если channels является вектором, активации слоев для каждого канала оптимизируются независимо. Возможные варианты для channels зависит от выбранного слоя. Для сверточных слоев: NumFilters свойство определяет количество выходных каналов. Для полностью соединенных слоев, OutputSize свойство определяет количество выходных каналов.

Аргументы пары «имя-значение»

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

Пример: deepDreamImage(net,layer,channels,'NumItetations',100,'ExecutionEnvironment','gpu') генерирует изображения, используя 100 итераций на уровень пирамиды, и использует графический процессор.

Изображение для инициализации Deep Dream. Используйте этот синтаксис, чтобы увидеть, как изображение изменяется, чтобы максимизировать активации сетевого уровня. Минимальная высота и ширина исходного изображения зависят от всех слоев до выбранного слоя включительно:

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

  • Для слоев к началу сети высота и ширина исходного изображения может быть меньше, чем входной слой изображения. Однако она должна быть достаточно большой, чтобы создать скалярный выход на выбранном уровне.

  • Количество каналов исходного изображения должно соответствовать количеству каналов на уровне ввода изображения сети.

Если исходное изображение не указано, программа использует случайное изображение с пикселами, построенными из стандартного нормального распределения. См. также 'PyramidLevels'.

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

Пример: 'PyramidLevels',3

Масштаб между каждым уровнем пирамиды, заданный как скаляр со значением > 1. Уменьшите масштаб пирамиды, чтобы включить мелкозернистые детали в выходное изображение. Корректировка масштаба пирамиды может помочь генерировать более информативные изображения для слоев в начале сети.

Пример: 'PyramidScale',1.4

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

Пример: 'NumIterations',10

Тип масштабирования, применяемого к выходному изображению, определяемый как разделенная запятыми пара, состоящая из 'OutputScaling' и одно из следующих:

СтоимостьОписание
'linear'Масштабировать выходные значения пикселей в интервале [0,1]. Выходное изображение, соответствующее каналу каждого слоя, I(:,:,:,channel), масштабируется независимо.
'none'Отключить масштабирование выходных данных.

Масштабирование значений пикселей может привести к неправильной классификации выходного изображения в сети. Если необходимо классифицировать выходное изображение, установите 'OutputScaling' значение для 'none'.

Пример: 'OutputScaling','linear'

Индикатор для отображения информации о ходе выполнения в командном окне, указанном как разделенная запятыми пара, состоящая из 'Verbose' и либо 1 (true) или 0 (false). Отображаемая информация включает уровень пирамиды, итерацию и силу активации.

Пример: 'Verbose',0

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

Аппаратный ресурс, указанный как разделенная запятыми пара, состоящая из 'ExecutionEnvironment' и одно из следующих:

  • 'auto' - использовать графический процессор, если он доступен; в противном случае используйте CPU.

  • 'gpu' - Использовать графический процессор. Для использования графического процессора требуется Toolbox™ параллельных вычислений и поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Если панель инструментов Parallel Computing Toolbox или подходящий графический процессор недоступны, программа возвращает ошибку.

  • 'cpu' - Использовать ЦП.

Пример: 'ExecutionEnvironment','cpu'

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

свернуть все

Выходное изображение, определяемое последовательностью изображений в градациях серого или цветных (RGB) изображений, хранящихся в массиве 4-D. Изображения сцеплены вдоль четвертого размера I таким образом, что изображение, которое максимизирует вывод channels(k) является I(:,:,:,k). Выводимое изображение можно отобразить с помощью imshow(Панель инструментов обработки изображений).

Алгоритмы

Эта функция реализует версию глубокого сна, которая использует пирамиду изображения с множественным разрешением и лапласианскую пирамидальную градиентную нормализацию для генерации изображений с высоким разрешением. Дополнительные сведения о нормализации градиента лапласийской пирамиды см. в записи блога DeepDreaming with TensorFlow.

При обучении сети с помощью trainNetwork функция или при использовании функций прогнозирования или проверки с DAGNetwork и SeriesNetwork объекты, программное обеспечение выполняет эти вычисления, используя арифметику с одной точностью и плавающей запятой. Функции обучения, прогнозирования и проверки включают trainNetwork, predict, classify, и activations. Программа использует арифметику с одинарной точностью при обучении сетей с использованием процессоров и графических процессоров.

Ссылки

[1] Глубокий сон с помощью TensorFlow. https://github.com/tensorflow/docs/blob/master/site/en/tutorials/generative/deepdream.ipynb

Представлен в R2017a