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

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

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

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

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

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

Загрузите предварительно обученную Сеть AlexNet. Если Модель Deep Learning Toolbox для пакета Сетевой поддержки AlexNet не установлена, то программное обеспечение обеспечивает ссылку на загрузку.

net = alexnet;

Сгенерируйте изображение

Чтобы произвести изображения, которые напоминают данный, классифицируют наиболее тесно, выбирают итоговый полносвязный слой. Во-первых, найдите индекс слоя этого слоя путем просмотра сетевой архитектуры в свойстве Layers сети net.

net.Layers
ans = 
  25x1 Layer array with layers:

     1   'data'     Image Input                   227x227x3 images with 'zerocenter' normalization
     2   'conv1'    Convolution                   96 11x11x3 convolutions with stride [4  4] and padding [0  0  0  0]
     3   'relu1'    ReLU                          ReLU
     4   'norm1'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     5   'pool1'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     6   'conv2'    Grouped Convolution           2 groups of 128 5x5x48 convolutions with stride [1  1] and padding [2  2  2  2]
     7   'relu2'    ReLU                          ReLU
     8   'norm2'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     9   'pool2'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    10   'conv3'    Convolution                   384 3x3x256 convolutions with stride [1  1] and padding [1  1  1  1]
    11   'relu3'    ReLU                          ReLU
    12   'conv4'    Grouped Convolution           2 groups of 192 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    13   'relu4'    ReLU                          ReLU
    14   'conv5'    Grouped Convolution           2 groups of 128 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    15   'relu5'    ReLU                          ReLU
    16   'pool5'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    17   'fc6'      Fully Connected               4096 fully connected layer
    18   'relu6'    ReLU                          ReLU
    19   'drop6'    Dropout                       50% dropout
    20   'fc7'      Fully Connected               4096 fully connected layer
    21   'relu7'    ReLU                          ReLU
    22   'drop7'    Dropout                       50% dropout
    23   'fc8'      Fully Connected               1000 fully connected layer
    24   'prob'     Softmax                       softmax
    25   'output'   Classification Output         crossentropyex with 'tench' and 999 other classes

Затем выберите итоговый полносвязный слой. Итоговый полносвязный слой является слоем 23.

layer = 23;

Можно сгенерировать повторные изображения целиком путем выбора нескольких классов. Выберите классы, которые вы хотите визуализировать установкой channels, чтобы быть индексами тех имен классов.

channels = [9 188 231 563 855 975];

Классы хранятся в свойстве Classes выходного слоя (последний слой). Можно просмотреть имена выбранных классов путем выбора записей в channels.

net.Layers(end).Classes(channels)
ans = 6×1 categorical array
     hen 
     Yorkshire terrier 
     Shetland sheepdog 
     fountain 
     theater curtain 
     geyser 

Сгенерируйте изображения с помощью deepDreamImage. Эта команда использует совместимый графический процессор при наличии. В противном случае это использует центральный процессор. CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0, или выше требуется для обучения на графическом процессоре.

I = deepDreamImage(net,layer,channels);
|==============================================|
|  Iteration  |  Activation  |  Pyramid Level  |
|             |   Strength   |                 |
|==============================================|
|           1 |         1.82 |               1 |
|           2 |         4.62 |               1 |
|           3 |         8.05 |               1 |
|           4 |        12.29 |               1 |
|           5 |        18.16 |               1 |
|           6 |        21.09 |               1 |
|           7 |        30.07 |               1 |
|           8 |        34.69 |               1 |
|           9 |        40.84 |               1 |
|          10 |        47.12 |               1 |
|           1 |        15.60 |               2 |
|           2 |        14.05 |               2 |
|           3 |        23.96 |               2 |
|           4 |        21.54 |               2 |
|           5 |        31.55 |               2 |
|           6 |        25.97 |               2 |
|           7 |        34.30 |               2 |
|           8 |        33.81 |               2 |
|           9 |        38.06 |               2 |
|          10 |        33.47 |               2 |
|           1 |        39.11 |               3 |
|           2 |        47.44 |               3 |
|           3 |        52.80 |               3 |
|           4 |        58.48 |               3 |
|           5 |        52.16 |               3 |
|           6 |        63.92 |               3 |
|           7 |        65.21 |               3 |
|           8 |        67.41 |               3 |
|           9 |        76.46 |               3 |
|          10 |        71.61 |               3 |
|==============================================|

Отобразите все изображения вместе с помощью imtile.

figure
I = imtile(I);
imshow(I)

Сгенерируйте более подробные изображения

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

Можно увеличить число итераций с помощью опции 'NumIterations'. Определите номер итераций к 100.

iterations = 100;

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

channels = 9;
I = deepDreamImage(net,layer,channels, ...
    'Verbose',false, ...
    'NumIterations',iterations);

figure
imshow(I)

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

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

levels = 4;

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

channels = 739;

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

figure
imshow(I)

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

|

Похожие темы