前回、Grad-CAMの概要解説と実装編の記事で、画像分類モデルの判断根拠を可視化する手法について紹介しました。
今回はその発展版である「Grad-CAM++」を取り上げます。Grad-CAMの基本的な仕組みについては前回の記事で解説済みのため、本記事では基礎説明は省略し、「何が」「どう」変わるのかという実用面の違いに絞って解説していきます。
Grad-CAM++とは
Grad-CAM++は、Grad-CAMの改良版として提案された可視化手法です。
Grad-CAMは多くの場面でうまく機能しますが、いくつか苦手なパターンがあります。Grad-CAM++は、そうした弱点を補うために考案されました。
その弱点とは、画面内の複数の対象に弱い・小さい対象に弱い、というものです。
Grad-CAM++ではこれらの弱点に強くなるよう改良がされています。
Grad-CAMとの違い
ざっくりした仕組みの違いとして、Grad-CAMが画像全体に対して「ひとつの重み」で重要度を計算するのに対し、Grad-CAM++は「ピクセルごとに重みを変えながら」重要度を計算する、という点があります。
この違いによって、Grad-CAMでは見えにくかった特徴(複数の対象や小さな対象)を拾えるようになる、というのが大まかなイメージです。
実用面で違いが出やすいのは、主に以下の2つの場面です。
- 同一クラスの物体が画像内に複数写っている場合
- 対象が画面に占める面積が小さい場合
これらのケースでは、Grad-CAM++の方がより的確に対象を捉えたヒートマップを出力する傾向があります。
なお、計算コストは二階・三階微分を扱う分わずかに増えますが、それほど大きな差ではありません。Colab上で動かす分には特に気にする必要はないでしょう。
この記事で使用するモデル・データについて
以前の記事と同様に、この記事では胸部Xpの公開データセットとHuggingfaceで公開されているResNet系のモデルを使用しています。
モデル
使用モデル:Aunsiels/resnet-pneumonia-detection(Apache 2.0、microsoft/resnet-50をファインチューニング)
今回使用している判定モデルは、精度があまり高くありません。記事中で使用している画像では、肺炎の判定に横隔膜以下の部分を重視しているような結果も見られます。臨床グレードの精度ではないという点には注意してください。
この記事のテーマはモデルの判定根拠の抽出であり、モデルの精度については検討しません。
データセット
本記事で使用しているxp画像は、匿名化済みオープンデータセット(CC BY 4.0)を使用しています。
出典: Kermany DS, Zhang K, Goldbaum M (2018),
“Labeled Optical Coherence Tomography (OCT) and Chest X-Ray Images for Classification“,
Mendeley Data, V2, doi:10.17632/rscbjbr9sj.2
再配布元: https://huggingface.co/datasets/hf-vision/chest-xray-pneumonia (CC BY 4.0)
本記事ではリサイズ・一部抜粋・GRAD-CAM・GRAD-CAM++による加工をして再配布しています。
実例で比較する
胸部X線画像での比較
まずは前回のGrad-CAM記事と同じ胸部X線画像を使って、Grad-CAMとGrad-CAM++のヒートマップを並べて比較してみます。
なお、陽性・陰性の判定をしたモデル自体は同じであるため、陽性/陰性の判定結果・判定確率は同じです。差が出るのはモデルの判断根拠をどのように視覚化したか(Grad-CAM/Grad-CAM++)、という部分です。
以下の節では画像が上下団に分かれて表示されています。上の画像がGrad-CAM++/下がGrad-CAMです。


AIの予測クラス: PNEUMONIA
確信度: 82.50%
AIの予測クラスは「NORMAL」(確信度82.50%)と陽性の判定でした。Grad-CAM++の方がやや広い範囲に反応が及んでおり、「複数の領域を捉えやすい」という特性が表れています。
同一クラス(この場合は「肺炎らしき陰影」)が画像内の複数箇所に存在する場合、Grad-CAM++の方が判断根拠を的確に拾えることを示す好例といえます。
これは単なる精度の違いという以上に、臨床的な見方をすると「見落としリスク」の話でもあります。もしGrad-CAMのヒートマップだけを見て「AIは左肺の所見を根拠に判定した」と解釈すると、反対側の肺にも病巣がある場合に所見を可能性を見落としてしまうかもしれません。XAI手法の選び方ひとつで、読み取れる情報の範囲が変わってくるという点は、実際に画像診断の場面でAIを補助的に使う際には意識しておきたいポイントです。
限界が見えた例(NORMAL誤判定)


一方でこちらの画像は、AIが「NORMAL」と判定したものの確信度は50.28%と非常に低く、際どい判定だったケースです。Grad-CAM++は3箇所に反応が分散しており、横隔膜以下の部分にも反応が見られます。(これは肺炎判定モデルです。)
Grad-CAMの方がまだ反応がまとまって見えます。
このケースからわかるのは、Grad-CAM++は必ずしも常に「綺麗でわかりやすい」結果を出すわけではないということです。特にモデル自体の判定が曖昧な場合、Grad-CAM++の反応も分散し、かえって解釈しづらくなることがあります。Grad-CAM++は万能な上位互換ではなく、得意な場面と苦手な場面がある手法として捉えるのが実用上は適切でしょう。
ここで強調しておきたいのは、Grad-CAM系の手法はあくまで「モデルが画像のどこを見て判定したか」を可視化しているに過ぎず、「その判定が医学的に正しいか」を保証するものではないという点です。ヒートマップの見た目が綺麗にまとまっているからといって判定が正しいとは限りませんし、逆に反応が分散しているからといって判定が誤っているとも限りません。XAIの出力を実際の診断の根拠として鵜呑みにするのではなく、あくまで「モデルの挙動を理解するための補助情報」として扱う姿勢が重要です。
臨床的にはどんな所見で活きるか
Grad-CAM++が力を発揮しやすいのは「同一クラスの所見が複数散らばっている」「個々の所見が画像全体に対して小さい」という条件を満たす画像です。この条件に当てはまりそうな所見をいくつか挙げてみます。
- 多発病変系の所見:多発肺転移など、同一クラスの所見が複数箇所に存在するケース
- 微小・局所性の所見: 微小脳出血のように、個々の所見が小さく画像全体に対する占有面積が小さいケース
逆に、単一の明確な病変であれば、Grad-CAMとGrad-CAM++の間で実用上大きな差は出にくいでしょう。
ただし、今回検証したのはあくまで胸部X線・肺炎検出モデルに限った話です。モダリティや対象疾患が変われば傾向が変わる可能性は十分にあります。この記事の内容を「Grad-CAM++はこの所見に効く」という断定的な指針としてではなく、「こういう条件の画像では試してみる価値がありそうだ」という仮説として捉えていただくのが適切かと思います。
まとめ
技術的な使い分けと、臨床的な使いどころの両方を踏まえて、Grad-CAMとGrad-CAM++の使い分けの目安をまとめると、以下のようになります。
- 同一クラスの物体が複数ある・対象が小さい → Grad-CAM++が有利になりやすい
- 単一の大きな対象を捉えたい → どちらを使っても大きな差は出にくい
Grad-CAM++はGrad-CAMの弱点を補う手法ですが、万能ではありません。
次の実装編では、実際にPyTorchでGrad-CAM++を動かし、コード付きで結果を確認していきます。
Grad-CAM++に関連がある記事
Grad-CAMとは?仕組みをわかりやすく解説|胸部X線AIで見る判断根拠の可視化と限界
Grad-CAMをPyTorchで実装!画像分類AIの判定根拠を可視化する方法

【著者について】
理学療法士(回復期リハビリ病棟 12年以上)
統計検定2級・Python 3エンジニア認定(データ分析)取得。
臨床現場でのデータ活用を目的に統計・機械学習を独学。
FIM退院予測モデルを個人で設計・実装(スタッキングアンサンブル+SHAP)。
強化学習(MuJoCo/Walker2d)や高位頸髄損傷患者向けデバイスの
自作など、臨床課題を技術で解くことに関心を持つ。
医療職向けに統計・データサイエンスをわかりやすく解説するブログ
「Curiosity Creates」を運営中。


コメント