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

В этом примере показано, как сгенерировать изображения с помощью deepDreamImage с предварительно обученной сверточной нейронной сетью GoogLeNet.

Глубокая Мечта является методом визуализации функции в глубоком обучении, которое синтезирует изображения, которые строго активируют слоя сети. Путем визуализации этих изображений можно подсветить функции изображений, изученные сетью. Эти изображения полезны для понимания и диагностирования сетевого поведения.

Можно сгенерировать интересные изображения путем визуализации функций слоев к концу сети.

Пример использует Deep Learning Toolbox™ и Модель Deep Learning Toolbox для Сети GoogLeNet, чтобы сгенерировать изображения.

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

Загрузите предварительно обученную Сеть GoogLeNet. Если Модель Deep Learning Toolbox для пакета Сетевой поддержки 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. Эта команда использует совместимый графический процессор при наличии. В противном случае это использует центральный процессор. CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0, или выше требуется для работы графического процессора.

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;

Сгенерируйте подробное изображение, которое строго активирует класс 'тигра' (канал 293). Установите 'Verbose' ко лжи, чтобы подавить подробную информацию о процессе оптимизации.

channels = 293;
I = deepDreamImage(net,layerName,channels, ...
    'Verbose',false, ...
    'NumIterations',iterations);

figure
imshow(I)

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

Определите номер уровней пирамиды к 4.

levels = 4;

Сгенерируйте подробное изображение, которое строго активирует класс 'замка' (канал 484).

channels = 484;

I = deepDreamImage(net,layerName,channels, ...
    'Verbose',false, ...
    'NumIterations',iterations, ...
    'PyramidLevels',levels);

figure
imshow(I)

Смотрите также

|

Похожие темы