В этом примере показано, как создавать изображения с помощью deepDreamImage с предварительно обученной сверточной нейронной сетью GoogLeNet.
Deep Dream - это метод визуализации функций в глубоком обучении, который синтезирует изображения, которые сильно активируют сетевые уровни. Визуализируя эти изображения, можно выделить элементы изображения, полученные сетью. Эти изображения полезны для понимания и диагностики поведения сети.
Вы можете создавать интересные изображения, визуализируя особенности слоев к концу сети.
В этом примере для создания изображений используются Toolbox™ Deep Learning и модель инструментария Deep Learning Toolbox для сети GoogLeNet.
Загрузите предварительно подготовленную сеть GoogLeNet. Если не установлен пакет поддержки Deep Learning Toolbox Model для сети GoogLeNet, то программное обеспечение предоставляет ссылку на загрузку.
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. Эта команда использует совместимый графический процессор, если он доступен. В противном случае он использует ЦП. Для использования графического процессора требуется Toolbox™ параллельных вычислений и поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (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