Глубокие изображения мечты с использованием GoogLeNet

В этом примере показано, как сгенерировать изображения с помощью 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)

См. также

| | | |

Похожие темы