В этом примере показано, как сгенерировать изображения с помощью deepDreamImage
с предварительно обученной сверточной нейронной сетью GoogLeNet.
Deep Dream - это метод визуализации функций в глубоком обучении, который синтезирует изображения, которые сильно активируют слои сети. Визуализируя эти изображения, можно выделить функции изображения, выученные сетью. Эти изображения полезны для понимания и диагностики поведения сети.
Можно сгенерировать интересные изображения, визуализируя функции слоев к концу сети.
Для генерации изображений в примере используются Deep Learning Toolbox™ и Deep Learning Toolbox Model для GoogLeNet Network.
Загрузите предварительно обученную сеть GoogLeNet. Если не установлен пакет поддержки Deep Learning Toolbox Model для GoogLeNet Network, то программное обеспечение предоставляет ссылку загрузки.
net = googlenet;
Чтобы создать изображения, которые наиболее близко напоминают данный класс, выберите полностью соединенный слой. Во-первых, найдите индекс слоя этого слоя, просматривая сетевую архитектуру с помощью analyzeNetwork
.
analyzeNetwork(net)
Затем выберите полностью соединенный слой, в этом примере, 142.
layer = 142; layerName = net.Layers(layer).Name
layerName = 'loss3-classifier'
Можно сгенерировать несколько изображений сразу путем выбора нескольких классов. Выберите классы, которые нужно визуализировать, установив channels
быть индексами этих имен классов.
channels = [114 293 341 484 563 950];
Классы хранятся в Classes
свойство выходного слоя (последнего слоя). Можно просмотреть имена выбранных классов, выбрав записи в channels
.
net.Layers(end).Classes(channels)
ans = 6×1 categorical
snail
tiger
zebra
castle
fountain
strawberry
Сгенерируйте изображения с помощью deepDreamImage
. Эта команда использует совместимый графический процессор, если он доступен. В противном случае используется центральный процессор. Для использования графический процессор требуется Parallel Computing Toolbox™ и поддерживаемый графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox).
I = deepDreamImage(net,layerName,channels);
|==============================================| | Iteration | Activation | Pyramid Level | | | Strength | | |==============================================| | 1 | 0.09 | 1 | | 2 | 0.67 | 1 | | 3 | 4.86 | 1 | | 4 | 8.41 | 1 | | 5 | 11.27 | 1 | | 6 | 14.86 | 1 | | 7 | 17.39 | 1 | | 8 | 22.84 | 1 | | 9 | 27.78 | 1 | | 10 | 34.39 | 1 | | 1 | 3.99 | 2 | | 2 | 11.51 | 2 | | 3 | 13.82 | 2 | | 4 | 19.87 | 2 | | 5 | 20.67 | 2 | | 6 | 20.82 | 2 | | 7 | 24.01 | 2 | | 8 | 27.20 | 2 | | 9 | 28.24 | 2 | | 10 | 35.93 | 2 | | 1 | 34.91 | 3 | | 2 | 46.18 | 3 | | 3 | 41.03 | 3 | | 4 | 48.84 | 3 | | 5 | 51.13 | 3 | | 6 | 58.65 | 3 | | 7 | 58.12 | 3 | | 8 | 61.68 | 3 | | 9 | 71.53 | 3 | | 10 | 76.01 | 3 | |==============================================|
Отобразите все изображения вместе с помощью imtile
.
figure I = imtile(I); imshow(I)
Увеличение количества уровней пирамиды и итераций на уровень пирамиды может создать более подробные изображения за счет дополнительных расчетов.
Вы можете увеличить количество итераций, используя 'NumIterations'
опция. Установите количество итераций равным 100.
iterations = 100;
Сгенерируйте подробное изображение, которое сильно активирует класс 'tiger' (канал 293). Задайте 'Verbose'
false для подавления подробной информации о процессе оптимизации.
channels = 293; I = deepDreamImage(net,layerName,channels, ... 'Verbose',false, ... 'NumIterations',iterations); figure imshow(I)
Чтобы получить большие и более подробные выходные изображения, можно увеличить как количество уровней пирамиды, так и итерации на каждый уровень пирамиды.
Установите количество уровней пирамиды равным 4.
levels = 4;
Сгенерируйте подробное изображение, которое сильно активирует класс 'castle' (канал 484).
channels = 484; I = deepDreamImage(net,layerName,channels, ... 'Verbose',false, ... 'NumIterations',iterations, ... 'PyramidLevels',levels); figure imshow(I)
deepDreamImage
| googlenet
| gradCAM
| imageLIME
| occlusionSensitivity