DeepLearning, Programming, Technology

Grad-CAM(GradCAM)の論文を流し読む

今日は論文を読む気になったので午前中もいろいろポストしたけど、今度はGradCAM(Grad-CAM)の論文を備忘録としてまとめておく。(簡易説明のみ:Grad-CAMについて)

GradCAMの正式名称はGradient-weighted Class Activation Mapping. 勾配重み付けクラス活性化マップ?ってところでしょうか?

GradCAMは、DeepLearningではブラックボックスになっている部分が多く、どのように認識が行われているのか知りたい!というときに必要になる技術です.GradCAMを用いればConvolutionNeuralNetworkで何を根拠にその識別をしたのかなどの情報を目に見える形で表現することが可能です.

GradCAM(Grad-CAM)ポイント

  • 入力画像を受け取るCNNの入っているネットワーク全てに対応(そのあとにどのようなネットワークが繋がっていても良い。VQA や 多クラス分類等)
  • 可視化時は入力画像と反応をみたいクラスの選択が必要
  • 構造を特に変えることなく可視化ができるのもポイント
  • CNNの最終層の勾配から可視化をする
  • Grad-CAMだけでは細かい反応部分がわからないので、ついでにGuidedBackpropと掛け合わせることで、より詳細な反応部分の可視化もできた
  • VQAやResNetの可視化も行えた。しかし、深い層から浅い層に行くにつれて特に出力サイズが異なるときに精度が悪くなることがわかった。
  • ネットワーク構造は以下
Grad-CAMにおけるネットワークごとの算出例.
図2:Grad-CAM概要: 入力画像と対象クラスを与えられたら、モデルのCNNの部分はもちろん、各クラスのスコアを獲得するためにタスク特有(画像分類など)のところ含めて計算する。出力対象クラス以外の勾配を0にセットして対象クラス(ここではとらねこ)のみを1に設定する。その後Grad-CAM(青のヒートマップ)を求めるため、畳み込み特徴量のマップを計算するところまで逆伝播を行う。最後に各ピクセルごとにGuided Backpropagationと前述の過程で得られたヒートマップを掛け合わせて、高分解能で適当なコンテキストを持つGuided Grad-CAMを求める。

・また結果は以下のようになる。

入力画像と各出力
図1: (a)猫と犬の元画像 (b~f)はVGGとResNetにおける猫のカテゴリに注目した複数手法による可視化結果 .(b)GuidedBackpropagationは全ての影響している特徴量を表示している。(c,f)は提案しているGrad-CAMはクラスを識別するのに影響を与えている領域を特定。(d)は(b)と(c)を組み合わせたGuided Grad-CAMを提案。これにより高解像でクラスに影響を与えている部分の可視化が行えている。面白いことに(c)でGrad-CAMによって得られた領域は、(e)のオクリュージョン領域とよく似ている。(f,l)はResNet-18におけるGrad-CAMの結果である。(d,f,i,l)は赤い領域がクラスによく反応しており、(e,k)は青い領域がクラスによく反応していることを表しているので要注意。

Grad-CAM論文斜め読み

既存のピクセルごとのGuided Back propagationやDeconvolutionでは確かに高解像度の詳細な情報が得られるが、クラスごとの可視化にはなっておらず全てのものが混ざってしまっている。

一方で先行研究のCAMや提案手法ではクラスごとの影響度を可視化することができている。

また、CAMと比較した際には、ネットワークの制限及び変更がいらないことが提案手法の特徴である。

具体的には、

  • CAMはネットワークの全結合層がCNNGlobal Average Pooling層に置き換わってなくてはならず。conv->global average->softmaxにつながるべき
  • 上記のため画像処理タスクによっては元のFNNの時よりも精度が悪くなることも多い
  • 提案手法はまずネットワークを変更する必要ない。
  • 提案手法はCNNベースのネットワークなら基本的に適用可能

アプローチ

全結合層では画像の位置に関連した情報を完全に失ってしまい、また入力に近いところでは抽象度の低い認識しか行われないので、CNNの部分の最終そして全結合層の入力に当たる部分に双方を満たす情報があると考えている。

Grad-CAMではConvolutionの最終層での勾配情報を利用して、可視化を行っている。

手順としては以下

  1. まずConvolution最終層でGlobalAveragePoolingを行い、指定されたクラスにおける最終層の各チャンネルの重要度を決定する。
  2. その重要度に応じて各チャンネルをかけて全てを足し合わせる。
  3. その足し合わせたものにReluを行ったものがGrad-CAM

クラスに影響を与えているのは正の勾配を持つものなので、Reluで負の値は他の要素に影響を与えていると考えられる。そのため、Reluで負の値を無視しても構わないと考えている。

以上が大まかなGrad-CAMの模様。

あとはGuided Backpropagationと組み合わせることでより良いものを得た等。他は評価実験の話だったので飛ばした。(大事かもだけど)

おわりに

やりたいこともやっていることもシンプルなので、論文は比較的読みやすい。評価を後半頑張っているので実質読むページも少なくすらすら読めた。(小並感)

他の可視化論文も読んでみたいけど、メジャーどころはSmoothGradとかかな?

また次回にしましょう。

 

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください