最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
この例では、事前学習済みの畳み込みニューラル ネットワーク 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 で実行するには、Compute Capability 3.0 以上の CUDA® 対応 NVIDIA® GPU が必要です。
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)