ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

AlexNet を使用した Deep Dream イメージ

この例では、事前学習済みの畳み込みニューラル ネットワーク AlexNet で deepDreamImage を使用してイメージを生成する方法を説明します。

Deep Dream は、ネットワーク層を強く活性化するイメージを合成する、深層学習での特徴可視化の手法です。これらのイメージを可視化することによって、ネットワークによって学習されたイメージの特徴を強調表示できます。これらのイメージは、ネットワーク動作の理解および診断に役立ちます。

ネットワークの最後の方の層の特徴を可視化することによって、興味深いイメージを生成できます。

この例では、Neural Network Toolbox™、Neural Network Toolbox Model for AlexNet Network を使用してイメージを生成します。オプションで、Image Processing Toolbox™ を使用して複数のイメージをまとめて表示できます。

事前学習済みのネットワークの読み込み

事前学習済みの AlexNet ネットワーク (Neural Network Toolbox for AlexNet Model) を読み込みます。Neural Network Toolbox Model for AlexNet Network がインストールされていない場合、ダウンロード用リンクが表示されます。

net = alexnet;

イメージの生成

特定のクラスに最も似たイメージを生成するには、最後の全結合層を選択します。最初に、ネットワーク netLayers プロパティのネットワーク アーキテクチャを表示して、この層の層インデックスを確認します。

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'    Convolution                   256 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'    Convolution                   384 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    13   'relu4'    ReLU                          ReLU
    14   'conv5'    Convolution                   256 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', 'goldfish', and 998 other classes

次に、最後の全結合層を選択します。最後の全結合層は、層 23 です。

layer = 23;

複数のクラスを選択することによって、一度に複数のイメージを生成できます。可視化するクラスを選択するには、channels をこれらのクラス名のインデックスに設定します。

channels = [9 188 231 563 855 975];

クラス名は、出力層 (最後の層) の ClassNames プロパティに格納されます。channels のエントリを選択することによって、選択されたクラスの名前を表示できます。

net.Layers(end).ClassNames(channels)
ans =

  6×1 cell array

    {'hen'              }
    {'Yorkshire terrier'}
    {'Shetland sheepdog'}
    {'fountain'         }
    {'theater curtain'  }
    {'geyser'           }

deepDreamImage を使用してイメージを生成します。このコマンドでは、互換性のある GPU が利用できる場合は、その GPU が使用されます。そうでない場合は CPU が使用されます。GPU で学習を行うには、Compute Capability 3.0 以上の CUDA® 対応 NVIDIA® GPU が必要です。

I = deepDreamImage(net,layer,channels);
|============================================|
|    Pyramid   |  Iteration   |  Activation  |
|     Level    |              |   Strength   |
|============================================|
|            1 |            1 |         1.28 |
|            1 |            2 |         3.53 |
|            1 |            3 |         6.66 |
|            1 |            4 |        12.28 |
|            1 |            5 |        20.37 |
|            1 |            6 |        27.00 |
|            1 |            7 |        34.37 |
|            1 |            8 |        41.65 |
|            1 |            9 |        53.58 |
|            1 |           10 |        57.42 |
|            2 |            1 |        12.20 |
|            2 |            2 |        16.67 |
|            2 |            3 |        19.98 |
|            2 |            4 |        17.74 |
|            2 |            5 |        21.88 |
|            2 |            6 |        26.09 |
|            2 |            7 |        31.12 |
|            2 |            8 |        28.62 |
|            2 |            9 |        36.90 |
|            2 |           10 |        34.66 |
|            3 |            1 |        41.71 |
|            3 |            2 |        55.74 |
|            3 |            3 |        52.63 |
|            3 |            4 |        57.24 |
|            3 |            5 |        58.00 |
|            3 |            6 |        70.20 |
|            3 |            7 |        71.79 |
|            3 |            8 |        65.81 |
|            3 |            9 |        72.26 |
|            3 |           10 |        79.38 |
|============================================|

Image Processing Toolbox がインストールされている場合、montage を使用してすべてのイメージをまとめて表示できます。そうでない場合は、imshow を使用してイメージを個別に表示できます。

figure
montage(I)

詳細なイメージの生成

ピラミッド レベルの数およびピラミッド レベル 1 つあたりの反復回数を増やすと、計算量が増加しますが、より詳細なイメージを生成できます。

反復回数は、'NumIterations' オプションを使用して増やすことができます。反復回数を 100 に設定します。

iterations = 100;

'hen' クラス (チャネル 9) を強く活性化する詳細なイメージを生成します。最適化プロセスの詳細を表示しないようにするには、'Verbose' を false に設定します。

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

figure
imshow(I)

より大きく詳細な出力イメージを生成するには、ピラミッド レベルの数とピラミッド レベル 1 つあたりの反復回数の両方を増やします。

ピラミッド レベルの数を 4 に設定します。

levels = 4;

'pot' クラス (チャネル 739) を強く活性化する詳細なイメージを生成します。

channels = 739;

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

figure
imshow(I)

参考

|

関連するトピック