ドキュメンテーション

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

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

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

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

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

この例では、Deep Learning Toolbox™ および Deep Learning Toolbox Model for AlexNet Network を使用してイメージを生成します。

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

事前学習済みの AlexNet ネットワークを読み込みます。Deep Learning 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'    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 を使用してイメージを生成します。このコマンドでは、互換性のある GPU が利用できる場合は、その GPU が使用されます。そうでない場合は CPU が使用されます。GPU で学習を行うには、Compute Capability 3.0 以上の CUDA® 対応 NVIDIA® GPU が必要です。

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)

詳細なイメージの生成

ピラミッド レベルの数およびピラミッド レベル 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)

参考

|

関連するトピック