Grad-CAM (Gradient-weighted Class Activation Mapping)

CAMを一般化したもの

$$ {a^c_k = \frac{1}{Z}\sum_i\sum_j\frac{\partial y^c}{\partial A^k_{ij}} \quad \quad \quad \ (1) \\ L^c_{Grad-CAM} = ReLU(\sum_k a^c_kA^k) \quad (2) } $$

  • $c$: 可視化対象クラス
  • $k$: フィルター数
  • $y^c$: 全結合層の最終出力でありsoftmax関数を適用する前の値
  • $A_{ij}^k$: k番目のフィルタ
  • $Z$: 画素数
  • $\frac{\partial y^c}{\partial A^k_{ij}}$: $y^c$に対するフィルター$k$内の各重みによる勾配

CAM (Class Activation Mapping)

$f_k(i,j)$をカーネルk番目の画素、$(i, j)$をカーネルの座標におけるピクセル、$Z$をカーネルの画素数とすると、GAP(Global average pooling)が得るk番目の値$F_k$は次となる。

$$ F_k = \frac{1}{Z} \sum_{i,j} f_k(i,j) $$

ソフトマックス層のクラスcのユニットに渡す値$S_c$は次となる。

$$ S_c = \sum_k w_k^c F_k $$

ただし、$w_k^c$はクラスcに対する重みを示す。
それ故、CAMは$f_k(i, j)$とその重みの線型結合で与えられる。

ある入力画像のクラスcに対するactivation map $M_c$は

$$ M_c(x,y) = \sum_k w_k^c f_k(x,y) $$

REFERENCES:

  • https://qiita.com/KDOG08/items/74ef0a342f100bf0c5d5
  • https://qiita.com/ito_takumi/items/22ddab3b5cf193dbcc3c
  • https://qiita.com/bukei_student/items/698383a7118f95c12cce