深層学習

判断根拠の可視化

画像分類モデルの判断に寄与した領域を、勾配から可視化するCAM・Grad-CAMと顕著性マップの違いを整理する。

  • B|標準
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

画像モデルの可視化は、入力画像のどの場所が特定クラスのスコアと結び付いているかを、画素または特徴マップ上に重ねて見る方法です。Grad-CAMは、対象クラスの勾配を最終畳み込み層へ逆伝播し、クラス判別に関係する領域を粗いヒートマップにします。

画像を見た熟練者に「その判定のとき、視線がどこに集まったか」を尋ねるようなものです。視線の集中は判断と一緒に変化しますが、それだけで本人の推論手順や因果関係を証明するものではありません。

なぜ必要か

高い正解率だけでは、モデルが対象物ではなく背景や撮影条件を手掛かりにしていないか判断できません。勾配ベースの顕著性マップは、出力スコアを入力画素で微分し、微小な画素変化がスコアに与える感度を画像として示します。一方、画素単位の勾配は細かい反面、ノイズが多く、クラスごとの大域的な領域を読み取りにくいことがあります。

CAMは畳み込み特徴マップを大域平均プーリングし、その後の全結合層のクラス重みで足し合わせるため、対応する構造への変更が必要です。Grad-CAMはクラススコアから得た勾配を特徴マップごとの重みとして使うので、全結合層を含むCNNや構造化出力など、より広いCNNベースのモデルに再学習や構造変更なしで適用できます。

ヒートマップの明るい場所は「そのクラスのスコアと勾配を通じて関連した領域」です。そこを隠したら必ず予測が変わる、あるいはモデルが人間と同じ意味を読んだ、という保証ではありません。可視化は相関の確認と失敗例の診断に使い、根拠の証明とは分けて扱います。

仕組み

対象クラスを cc、最終畳み込み層の kk 番目の特徴マップを AkA^k、その位置 (i,j)(i,j) の値を AijkA^k_{ij}、クラススコアを YcY^c とします。まず勾配を空間方向に平均して、特徴マップの重要度を作ります。

αkc=1Z∑i∑j∂Yc∂Aijk\alpha_k^c = \frac{1}{Z}\sum_i\sum_j \frac{\partial Y^c}{\partial A^k_{ij}}

ZZ は特徴マップの空間要素数、αkc\alpha_k^c はクラス cc に対する特徴マップ kk の重みです。次に特徴マップを重み付きで足し、正の寄与だけを残します。

LGrad-CAMc=ReLU⁡(∑kαkcAk)L_{\mathrm{Grad\text{-}CAM}}^c = \operatorname{ReLU}\left(\sum_k \alpha_k^c A^k\right)

ReLUは、対象クラスのスコアを押し上げる方向の領域に焦点を合わせるために使います。空間情報を保った特徴マップから作るので位置が読めますが、解像度は畳み込み層の特徴マップ相当であり、画素単位の精密な輪郭そのものではありません。CAMは特定の構造では全結合層の重みがこの係数に対応するため、Grad-CAMの特殊例として見られます。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
CAMとGrad-CAMの適用範囲CAMはGAPとクラス別全結合を前提、Grad-CAMは勾配で重みを作るGrad-CAMもGAPへの置換が必須とする
ヒートマップの計算対象クラスの勾配を特徴マップごとに空間平均し、重み付き和をReLUに通す入力画素の勾配をそのままクラス別領域とする
可視化の解釈モデルのスコアと相関する寄与領域の提示ヒートマップだけで因果的な根拠を証明したとする

実装で確かめる

PyTorchでは、対象層の特徴マップと勾配をフックで保存し、次の計算を行います。grad.mean が式の空間平均、relu が正の寄与の抽出です。

import torch

# A: (batch, channels, height, width), dYdA: 同じ形の勾配
alpha = dYdA.mean(dim=(2, 3), keepdim=True)
heatmap = torch.relu((alpha * A).sum(dim=1, keepdim=True))
heatmap = heatmap / (heatmap.amax(dim=(2, 3), keepdim=True) + 1e-8)

取り違えやすいもの

方法何を示すか判断の単位
顕著性マップ出力の画素に対する勾配・感度画素に近いがノイズが出やすい
CAMGAP後のクラス重みで集約した領域対応するCNN構造が必要
Grad-CAMクラス勾配で畳み込み特徴を重み付けした領域任意の対象クラスと特徴層
LIME予測近傍を局所的な解釈モデルで近似画像を含む一般の分類器だが、本ノートの画像勾配系とは別系統

想起チェック

Grad-CAMは何を重みとして使うか

対象クラスのスコアを特徴マップの各要素で微分し、その勾配を空間平均した値を特徴マップごとの重みにします。

CAMに対してGrad-CAMの適用範囲が広い理由は何か

Grad-CAMは既存モデルの対象畳み込み層へ流れるクラス勾配から重みを作るため、CAMのようにGAPと全結合層を組み込む構造変更を要求しません。

ヒートマップを見て断定してはいけないことは何か

それはモデルのスコアと結び付いた寄与領域の可視化であり、人間が読む意味での唯一の根拠や因果関係を証明するものではありません。

出典