exponenta event banner

Изображения Deep Dream с помощью GoogLeNet

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

См. также

| | | |

Связанные темы