このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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.01 | 1 | | 2 | 1.47 | 1 | | 3 | 3.63 | 1 | | 4 | 7.24 | 1 | | 5 | 10.63 | 1 | | 6 | 15.78 | 1 | | 7 | 19.05 | 1 | | 8 | 24.21 | 1 | | 9 | 27.25 | 1 | | 10 | 29.49 | 1 | | 1 | 7.93 | 2 | | 2 | 10.10 | 2 | | 3 | 14.41 | 2 | | 4 | 20.48 | 2 | | 5 | 17.10 | 2 | | 6 | 23.32 | 2 | | 7 | 27.97 | 2 | | 8 | 25.79 | 2 | | 9 | 30.26 | 2 | | 10 | 35.68 | 2 | | 1 | 33.57 | 3 | | 2 | 42.50 | 3 | | 3 | 49.39 | 3 | | 4 | 58.22 | 3 | | 5 | 58.82 | 3 | | 6 | 52.32 | 3 | | 7 | 67.45 | 3 | | 8 | 68.73 | 3 | | 9 | 75.19 | 3 | | 10 | 68.91 | 3 | |==============================================| Training finished: Max epochs completed.
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)
参考
googlenet
| deepDreamImage
| occlusionSensitivity
| imageLIME
| gradCAM