Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

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

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

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

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

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

事前学習済みの GoogLeNet ネットワークを読み込みます。Deep Learning Toolbox Model for GoogLeNet Network サポート パッケージがインストールされていない場合、ダウンロード用リンクが表示されます。

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 を使用してイメージを生成します。このコマンドでは、互換性のある GPU が利用できる場合は、その GPU が使用されます。そうでない場合は CPU が使用されます。GPU を使用するには、Parallel Computing Toolbox™ とサポートされている GPU デバイスが必要です。サポートされているデバイスについては、リリース別の GPU サポート (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)

詳細なイメージの生成

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

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

iterations = 100;

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

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

figure
imshow(I)

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

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

levels = 4;

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

channels = 484;

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

figure
imshow(I)

参考

| | | |

関連するトピック