Main Content

deepDreamImage

Deep Dream を使用したネットワークの特徴の可視化

説明

I = deepDreamImage(net,layer,channelIdx) は、layer によって指定された数値インデックスまたは名前に対応する層のネットワーク net 内で、チャネル channels を強く活性化するイメージの配列を返します。これらのイメージでは、ネットワークによって学習された特徴が強調表示されます。

I = deepDreamImage(___,Name,Value) は、1 つ以上の名前と値の引数によって追加オプションが指定されたイメージを返します。

すべて折りたたむ

事前学習済みのネットワークを読み込みます。

net = imagePretrainedNetwork("squeezenet");

deepDreamImage を使用して、畳み込み層 fire3-squeeze1x1 で学習された 16 個の特徴を可視化します。PyramidLevels を 1 に設定し、イメージがスケーリングされないようにします。

layer = "fire3-squeeze1x1";
channels = 1:16;

I = deepDreamImage(net,layer,channels, ...
    PyramidLevels=1, ...
    Verbose=0);

tiledlayout("flow")
for i = 1:numel(channels)
    nexttile
    imshow(I(:,:,:,i))
end

Figure contains 16 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image. Axes object 5 contains an object of type image. Axes object 6 contains an object of type image. Axes object 7 contains an object of type image. Axes object 8 contains an object of type image. Axes object 9 contains an object of type image. Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image.

入力引数

すべて折りたたむ

学習済みネットワーク。dlnetwork オブジェクトとして指定します。

deepDreamImage はイメージ入力層のあるネットワークのみをサポートします。

可視化する層。文字ベクトルまたは string スカラーとして指定します。layer を、活性化を可視化する層のインデックスまたは名前として指定します。分類層の特徴を可視化するには、最後の全結合層を選択します。

ヒント

ReLU 層またはドロップアウト層を可視化するように選択すると、これらの層がネットワークの勾配に及ぼす影響によって、有用なイメージが生成されない場合があります。

チャネル インデックス。チャネル インデックスのスカラーまたはベクトルとして指定します。channelIdx がベクトルの場合、各チャネルの層の活性化は個別に最適化されます。選択可能な channelIdx は選択した層によって異なります。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: deepDreamImage(net,layer,channels,NumIterations=100,ExecutionEnvironment="gpu") は、ピラミッド レベルごとに 100 回の反復を使用してイメージを生成し、GPU を使用します。

Deep Dream アルゴリズムを初期化するイメージ。2 次元配列として指定します。この構文を使用して、ネットワーク層の活性化を最大化するためにイメージがどのように変更されるかを確認します。初期イメージの高さと幅の最小値は、選択した層までの (選択した層を含む) すべての層に依存します。

  • ネットワークの最後の方の層では、初期イメージの高さと幅がイメージ入力層と少なくとも同じでなければなりません。

  • ネットワークの最初の方の層では、初期イメージの高さと幅がイメージ入力層より小さくてもかまいません。ただし、選択した層でスカラー出力を生成するのに十分な大きさでなければなりません。

  • 初期イメージのチャネルの数は、ネットワークのイメージ入力層のチャネルの数と一致しなければなりません。

初期イメージを指定しない場合、標準正規分布から抽出されたピクセルから成るランダム イメージが使用されます。詳細については、PyramidLevels を参照してください。

出力イメージの生成に使用する多重解像度イメージのピラミッド レベルの数。正の整数として指定します。ピラミッド レベルの数を増やすと、計算量が増加しますが、より大きな出力イメージを生成できます。初期イメージと同じサイズのイメージを生成するには、レベルの数を 1 に設定します。

例: PyramidLevels=3

各ピラミッド レベル間のスケーリング。1 より大きい値のスカラーとして指定します。ピラミッドのスケールを小さくすると、出力イメージに細かいディテールが組み込まれます。ピラミッドのスケールを調整することによって、ネットワークの最初の方の層で情報量の多いイメージを生成しやすくなります。

例: PyramidScale=1.4

ピラミッド レベルごとの反復回数。正の整数として指定します。反復回数を増やすと、計算量が増加しますが、より詳細なイメージを生成できます。

例: NumIterations=10

出力イメージに適用するスケーリングのタイプ。次のいずれかの値として指定します。

説明
"linear"区間 [0 1] に出力ピクセル値をスケーリングします。それぞれの層のチャネルに対応する出力イメージ I(:,:,:,channel) は、個別にスケーリングされます。
"clipped"イメージを [0 255] の範囲にクリッピングしてから、[0,1] の区間にスケーリングします。この方法では、多くの場合、より鮮やかなイメージが生成されます。
"none"出力スケーリングを無効にします。

ピクセル値をスケーリングすると、ネットワークで出力イメージが誤分類される可能性があります。出力イメージを分類する場合は、OutputScaling の値を "none" に設定します。

例: OutputScaling="linear"

コマンド ウィンドウに進行状況を表示するためのインジケーター。Verbose と、1 (true) または 0 (false) で構成されるコンマ区切りのペアとして指定します。表示される情報には、ピラミッド レベル、反復回数、および活性化の強さが含まれます。

例: Verbose=0

データ型: logical

ハードウェア リソース。次のいずれかの値として指定します。

  • "auto" — 利用可能な場合、GPU を使用します。そうでない場合、CPU を使用します。

  • "gpu" — GPU を使用します。GPU を使用するには Parallel Computing Toolbox™ ライセンスとサポートされている GPU デバイスが必要です。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。

  • "cpu" — CPU を使用します。

出力引数

すべて折りたたむ

出力イメージ。グレースケール イメージまたは RGB イメージのシーケンスが格納された 4 次元配列として返されます。この関数は、channels(k) の出力を最大化するイメージが I(:,:,:,k) になるように、I の 4 番目の次元に沿ってイメージを連結します。関数 imshow (Image Processing Toolbox) を使用して、出力イメージを表示できます。

アルゴリズム

この関数は、多重解像度イメージのピラミッドおよびラプラシアン ピラミッド勾配正規化を使用して高解像度イメージを生成する Deep Dream を実装します。ラプラシアン ピラミッド勾配正規化の詳細は、次のブログ投稿を参照してください。DeepDreaming with TensorFlow

既定では、関数 trainnet および単精度浮動小数点演算を使用して、ニューラル ネットワークに学習させるための計算が実行されます。関数 trainnet は、単精度の学習可能なパラメーターと状態パラメーターをもつネットワークを返します。

予測関数か検証関数を単精度の学習可能なパラメーターと状態パラメーターをもつ dlnetwork オブジェクトと組み合わせて使用する場合、単精度浮動小数点演算を使用して計算が実行されます。

予測関数か検証関数を倍精度の学習可能なパラメーターと状態パラメーターをもつ dlnetwork オブジェクトと組み合わせて使用する場合は、次のようになります。

  • 入力データが単精度の場合、単精度浮動小数点演算を使用して計算が実行されます。

  • 入力データが倍精度の場合、倍精度浮動小数点演算を使用して計算が実行されます。

参照

[1] DeepDreaming with TensorFlow. https://github.com/tensorflow/docs/blob/master/site/en/tutorials/generative/deepdream.ipynb

バージョン履歴

R2017a で導入

すべて展開する