Source: vis/visualization/init.py#L0


visualize_activation_with_losses

visualize_activation_with_losses(input_tensor, losses, wrt_tensor=None, seed_input=None, \
    input_range=(0, 255), **optimizer_params)

重み付きlossesを最小にするinput_tensorを生成します。 この関数はカスタム損失を必要とする高度なユースケースを対象にしています。

引数:

  • input_tensor: 入力テンソル。形状は、channels_firstの場合は(samples, channels, image_dims...)channels_lastの場合は(samples, image_dims..., channels)
  • wrt_tensor: 損失の勾配は、このテンソルに関して計算されます。 Noneを指定した場合、これはinput_tensorと同じであると想定される。(デフォルト値: None)
  • losses: (Loss, weight)のタプルのリスト。
  • seed_input: 最適化の開始画像にシードします。Noneを指定した場合、ランダム値で初期化されます。(デフォルト値:None)
  • input_range: 入力値の範囲を(min, max)のタプルで指定します。 これは最終的に最適化された入力を、指定されたの範囲にスケールするために使用されます(デフォルト値:(0, 255))。
  • optimizer_params: オプティマイザの**kwargs引数. オプティマイザの必須引数がない場合、適切なデフォルト値が設定されます。

戻り値:

重み付きlossesを最小にするモデル入力


get_num_filters

get_num_filters(layer)

指定されたレイヤのフィルタ数を調べます。

引数:

  • layer: Kerasレイヤ

戻り値:

レイヤ内のフィルタ数。keras.layers.Denseレイヤの場合、これは出力数になります。


overlay

overlay(array1, array2, alpha=0.5)

array1alphaの透明度でarray2の上に重ねます。

Args:

  • array1: numpy array.
  • array2: numpy array.
  • alpha: 透明度。 この値は[0, 1]の間であること。 0を与えるとarray2のみが、1を与えるとarray1のみが描画されます(デフォルト値 = 0.5).

戻り値:

array1alphaの透明度でarray2の上に重ねた画像


visualize_saliency_with_losses

visualize_saliency_with_losses(input_tensor, losses, seed_input, wrt_tensor=None, \
    grad_modifier="absolute")

重み付き損失に関するinput_tensorの正の勾配で、seed_inputの注目ヒートマップを生成します。

この関数はカスタム損失を必要とする高度なユースケースを対象にしています。 汎用的なユースケースはvisualize_saliencyを参照してください。

Saliencyの完全な説明は次の論文を参照してください:Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps

引数:

  • input_tensor: 入力テンソル。形状は、channels_firstの場合は(samples, channels, image_dims...)channels_lastの場合は(samples, image_dims..., channels)
  • losses: (Loss, weight)のタプルのリスト。
  • seed_input: 注目マップが可視化されるのに必要なモデルへの入力
  • wrt_tensor: 損失の勾配は、このテンソルに関して計算されます。 Noneを指定した場合、これはinput_tensorと同じであると想定される。(デフォルト値: None)
  • grad_modifier: 勾配修飾子。grad_modifiersを参照してください。 デフォルトでは絶対値(absolute)の勾配が使用されます。 正または負の勾配を可視化するには、それぞれreluおよびnegateを使用して下さい。

戻り値:

重み付き損失に関するseed_inputの正規化された勾配


visualize_activation

visualize_activation(model, layer_idx, filter_indices=None, wrt_tensor=None, seed_input=None, \
    input_range=(0, 255), backprop_modifier=None, grad_modifier=None, act_max_weight=1, \
    lp_norm_weight=10, tv_weight=10, **optimizer_params)

指定されたlayer_idxの全てのfilter_indicesの出力を最大化するモデル入力を生成します。

引数:

  • model: keras.models.Modelインスタンス。モデル入力の形状は、channels_firstの場合は(samples, channels, image_dims...)channels_lastの場合は(samples, image_dims..., channels)でなければなりません。
  • layer_idx: 可視化されるフィルタを含むmodel.layers内のレイヤインデックス
  • filter_indices: 最大化されるレイヤ内のフィルタインデックス。 Noneが指定された場合、全てのフィルタが可視化されます。(デフォルト値: None)。 keras.layers.Denseの場合、filter_idxは出力インデックスとして解釈されます。 もし最終層のkeras.layers.Denseを可視化するなら、より良い結果を得るために、utils.apply_modificationsを使って、'softmax'活性化を'linear'に変更することを検討してください。
  • wrt_tensor: 損失の勾配は、このテンソルに関して計算されます。 Noneを指定した場合、これはinput_tensorと同じであると想定される。(デフォルト値: None)
  • seed_input: 最適化の開始画像にシードします。Noneを指定した場合、ランダム値で初期化されます。(デフォルト値:None)
  • input_range: 入力値の範囲を(min, max)のタプルで指定します。 これは最終的に最適化された入力を、指定されたの範囲にスケールするために使用されます(デフォルト値:(0, 255))。
  • backprop_modifier: 誤差逆伝播修飾子. backprop_modifiersを参照してください。もし何も指定しない場合、誤差逆伝播修飾は何も適用されません(デフォルト値:None)
  • grad_modifier: 勾配修飾子。grad_modifiersを参照してください。もし何も指定しない場合、勾配は編集されません(デフォルト値:None)
  • act_max_weight: ActivationMaximization損失の重み係数。ゼロまたはNoneを指定するとこのロスは使われません。(デフォルト値:1)
  • lp_norm_weight: LPNorm正規化損失の重み係数。ゼロまたはNoneを指定するとこのロスは使われません。(デフォルト値:10)
  • tv_weight: TotalVariation正規化損失の重み係数。ゼロまたはNoneを指定するとこのロスは使われません。(デフォルト値:10)
  • optimizer_params: オプティマイザの**kwargs引数. オプティマイザの必須引数がない場合、適切なデフォルト値が設定されます。

例:

最終層がkeras.layers.Denseで、出力インデックス22を最大化する入力画像を可視化したいのであれば、 filter_indices = [22]かつlayer_idx = dense_layer_idxとなります。

filter_indices = [22, 23]にすると、両方のクラスの特徴を示す入力画像が生成されるはずです。

戻り値:

与えられたlayer_idx内のfilter_indicesの出力を最大化するモデル入力


visualize_saliency

visualize_saliency(model, layer_idx, filter_indices, seed_input, wrt_tensor=None, \
    backprop_modifier=None, grad_modifier="absolute")

指定されたlayer_idxfilter_indicesの出力を最大化するためのseed_inputに、注目ヒートマップを生成します。

引数:

  • model: keras.models.Modelインスタンス。モデル入力の形状は、channels_firstの場合は(samples, channels, image_dims...)channels_lastの場合は(samples, image_dims..., channels)でなければなりません。
  • layer_idx: 可視化されるフィルタを含むmodel.layers内のレイヤインデックス
  • filter_indices: 最大化されるレイヤ内のフィルタインデックス。 Noneが指定された場合、全てのフィルタが可視化されます。(デフォルト値: None)。 keras.layers.Denseの場合、filter_idxは出力インデックスとして解釈されます。 もし最終層のkeras.layers.Denseを可視化するなら、より良い結果を得るために、utils.apply_modificationsを使って、'softmax'活性化を'linear'に変更することを検討してください。
  • seed_input: 注目マップが可視化されるのに必要なモデルへの入力
  • wrt_tensor: 損失の勾配は、このテンソルに関して計算されます。 Noneを指定した場合、これはinput_tensorと同じであると想定される。(デフォルト値: None)
  • backprop_modifier: 誤差逆伝播修飾子. backprop_modifiersを参照してください。もし何も指定しない場合、誤差逆伝播修飾は何も適用されません(デフォルト値:None)
  • grad_modifier: 勾配修飾子。grad_modifiersを参照してください。もし何も指定しない場合、勾配は編集されません(デフォルト値:'absolute')

例:

もし'鳥'カテゴリへの注目を可視化したいなら、最終層のkeras.layers.Denseの出力インデックスは22なので、 filter_indices = [22]かつlayer = dense_layerとなります。

また複数の値をフィルタインデックスに設定できます。例えば、 filter_indices = [22, 23]は(上手くいけば) 22と23のカテゴリ両方に関連する注目マップを得られるはずです。

戻り値:

filter_indicesの出力の最大化に最も貢献するseed_inputの領域を示したヒートマップ画像


visualize_cam_with_losses

visualize_cam_with_losses(input_tensor, losses, seed_input, penultimate_layer, grad_modifier=None)

重み付き損失に関するinput_tensorの正の勾配を使って、CAMベースの勾配(grad-CAM)を生成します。

grad-CAMの詳細は論文を参照して下さい: Grad-CAM: Why did you say that? Visual Explanations from Deep Networks via Gradient-based Localization

いくつかの例ではわずかながらネットワーク構造に変更が必要となるCAMとは異なり、grad-CAMはより適用範囲が広いです。

Saliancyと比較すると、grad-CAMはクラスを区別できます; すなわちの説明には猫の領域のみを強調し、犬の領域は強調しません。そしてその逆もまた同様です。

引数:

  • input_tensor: 入力テンソル。形状は、channels_firstの場合は(samples, channels, image_dims...)channels_lastの場合は(samples, image_dims..., channels)
  • losses: (Loss, weight)のタプルのリスト。
  • seed_input: 注目マップが可視化されるのに必要なモデルへの入力
  • penultimate_layer: フィルタ出力に関する勾配を計算するために使われるべき特徴マップを得るためのlayer_idxの1つ前のレイヤ。
  • grad_modifier: 勾配修飾子。grad_modifiersを参照してください。 何も指定しなければ勾配は変更されません(デフォルト値: None)

戻り値:

重み付き損失に関するseed_inputの正規化済み勾配


visualize_cam

visualize_cam(model, layer_idx, filter_indices, seed_input, penultimate_layer_idx=None, \
    backprop_modifier=None, grad_modifier=None)

指定されたlayer_idxfilter_indicesの出力を最大化する、CAMベースの勾配(grad-CAM)を生成します。

引数:

  • model: keras.models.Modelインスタンス。モデル入力の形状は、channels_firstの場合は(samples, channels, image_dims...)channels_lastの場合は(samples, image_dims..., channels)でなければなりません。
  • layer_idx: 可視化されるフィルタを含むmodel.layers内のレイヤインデックス
  • filter_indices: 最大化されるレイヤ内のフィルタインデックス。 Noneが指定された場合、全てのフィルタが可視化されます。(デフォルト値: None)。 keras.layers.Denseの場合、filter_idxは出力インデックスとして解釈されます。 もし最終層のkeras.layers.Denseを可視化するなら、より良い結果を得るために、utils.apply_modificationsを使って、'softmax'活性化を'linear'に変更することを検討してください。
  • seed_input: 注目マップが可視化されるのに必要なモデルへの入力
  • penultimate_layer_idx: フィルタ出力に関する勾配を計算するために使われるべき特徴マップを得るためのlayer_idxの1つ前のレイヤ。 何も指定しない場合、layer_idxに最も近い畳み込みまたはプーリングレイヤが設定されます。
  • backprop_modifier: 誤差逆伝播修飾子. backprop_modifiersを参照してください。もし何も指定しない場合、誤差逆伝播修飾は何も適用されません(デフォルト値:None)
  • grad_modifier: 勾配修飾子。grad_modifiersを参照してください。もし何も指定しない場合、勾配は編集されません(デフォルト値:None

例:

もしカテゴリへの注目を可視化したいなら、最終層のkeras.layers.Denseの出力インデックスは22なので、 filter_indices = [22]かつlayer = dense_layerとなります。

また複数の値をフィルタインデックスに設定できます。例えば、 filter_indices = [22, 23]は(上手くいけば) 22と23のカテゴリ両方に関連する注目マップを得られるはずです。

戻り値:

filter_indicesの出力の最大化に最も貢献する入力の領域を示すヒートマップ画像