CCCMKホールディングス TECH LABの Tech Blog

TECH LABのエンジニアが技術情報を発信しています

ブログタイトル

畳み込みニューラルネットワークの可視化について(CAM/Grad-CAM)

こんにちは、技術開発ユニットの三浦です。寒い日が増えてきました。パソコンのキーボードを打っていても手が寒くて、ちょっと文字を打ってはポケットに手を入れて温めて、またちょっと打って・・・の繰り返しで資料やコードを書いています。

今回は畳み込みニューラルネットワークの可視化についてまとめました。畳み込みニューラルネットワーク(CNN)は画像認識の様々なタスクで利用され、高い精度の実現に貢献しています。以前EfficientNetというCNNについて調べた内容を紹介させて頂きました。

techblog.cccmk.co.jp

CNNは一方で、モデルの構造が複雑になり、モデルの理解や出力結果の理由の解釈が困難であるという側面があります。モデルを理解することは、思ったように精度が上がらないときにもその要因を把握し、解消するアクションを決めるためにも重要なことです。

そこでCNNを可視化する方法がいくつか提案されており、その中で私達も利用することがあるClass Activation Mapping(CAM)とGradient-weighted Class Activation Mapping(Grad-CAM)について紹介させて頂きます。

CNNの畳み込み層が持つ特性

CNNを構成する畳み込み層では画像が持つ特徴を抽出することが出来ます。一般的なCNNでは畳み込み層を何層も重ねていますが、入力から遠い、深い層にある畳み込み層ではより空間的な特徴を認識する能力を、学習を通じて獲得できると考えられています。この深い層にある畳み込み層で認識される画像特徴、つまり特徴マップがモデルの最終的な出力にどのような影響を与えているのかを数値化し、可視化することでモデルの最終判断の理由を説明しようとする方法がこれから説明するCAMとGrad-CAMです。

Class Activation Mapping(CAM)

CAMについてはこちらの論文で説明されています。

[1512.04150] Learning Deep Features for Discriminative Localization

出力層の直前にある畳み込み層から出力される特徴マップが、ある分類クラスの予測スコアにどれくらいの影響を与えているのかを、それにかかる係数(重み)で表します。その影響度で特徴マップに強弱をつけ、強弱をつけた特徴マップを重ね合わせることでClass Activation Mapを作成する方法がCAMです。上記の論文に掲載されている図を以下に引用させて頂きます。

f:id:miu4930:20211213194043p:plain
引用元:Learning Deep Features for Discriminative Localization, Bolei Zhou, Aditya Khosla, Agata Lapedriza, Aude Oliva, Antonio Torralba Computer Science and Artificial Intelligence Laboratory, Submitted on 14 Dec 2015(https://arxiv.org/abs/1512.04150)

赤と緑の枠で囲われた特徴マップが、入力画像を見ると"Australian terrier"クラスの予測スコアに関連がありそうで、青い枠で囲われた特徴マップは"Australian terrier"とは関連が無さそうに見えます。この場合は赤と緑の枠に囲われた特徴マップに掛かる重み  \mathrm w_{2}, 
 \mathrm w_{n} の値が正の方向に大きくなりそうです。なお図中の「GAP」はGlobal Average Pooling層を表しています。

CAMの仕組み

CNNの深い畳み込み層で画像の空間的な特徴を認識する能力を獲得出来たとしても、その後全結合層に接続されてしまうとその能力を上手く活かし切ることが出来なくなります。画像分類タスクでは最終出力層の前に全結合層を挟んでベクトル化する構造を持つモデルが使われることがよくあります(一方で全結合層を挟むとパラメータが増加してしまうため、それを避ける意味でも全結合層を使用しないアーキテクチャも多いようです。)。そこでCAMでは出力層の前のベクトル化を全結合層ではなくGlobal Average Pooling層(GAP)を使って行います。GAPを通して特徴マップの行列要素の値を平均してベクトルの要素として出力します。全結合層ではなくGAPを使うことで各特徴マップごとの特徴がよりモデルの出力に反映されるようになり、学習を通してより特徴を認識出来るような特徴マップになっていくのでは・・・と思います。

CAMのためには元のモデルのCNN部分が全結合層に接続されている場合、GAPに置き換える必要があります。モデルの構造に手を加えることになりますが、この改変によるモデルの精度への影響は僅かに抑えられるようです。一方で画像分類のタスクで学習されたCNNでありながら、最深の畳み込み層の特徴マップでは画像の中の物体の位置を認識する能力を獲得していることも検証されています。つまり物体検知のタスクにも、ある程度の精度で活用ができるとのことです。

Gradient-weighted Clas Activation Mapping(Grad-CAM)

CAMでは全結合層をGAPに変更する必要があり、また対象のモデルは画像分類タスクに限定されているという制約があります。これを解消したCNNの可視化の方法として提案されているものがGrad-CAMです。Grad-CAMではモデルの構造を変えず、画像分類以外のタスクでも出力に影響を与えている要因を可視化することが出来ます。

Grad-CAMについてはこちらの論文で説明されています。

[1610.02391] Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization

Grad-CAMの仕組み

CNNの最深の特徴マップがモデルの出力に与える影響度を求める、という観点はCAMと同様です。Grad-CAMではその影響度を特徴マップの値をわずかに変化させた時のモデルの最終出力への影響具合として捉えています。これはモデルの最終出力  y の特徴マップ  Aに関する偏微分として定義出来ます。例えば分類クラス c の予測スコア  y^{c}に対する ,  k 番目の特徴マップ  A^{k} の影響度  α^{c}_{k}

 \displaystyle 
α^{c}_{k} = \frac{1}{Z}\sum_{i}\sum_{j}\frac{\partial y^{c}}{\partial A^{k}_{ij}}

の式で求めることが出来ます。 Z は特徴マップのピクセル数  \sum_{i}\sum_{j}1 を表しています。この式では画像分類タスクのクラス予測スコアを想定した表現になっていますが、出力  y^{c} は別のタスクのモデルの出力に置き換えることが出来ます。Grad-CAMの概要図を以下に引用します。

f:id:miu4930:20211213192652p:plain
引用元:Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization, Ramprasaath R. Selvaraju, Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh, Dhruv Batra, Submitted on 7 Oct 2016, last revised 3 Dec 2019 (this version, v4)(https://arxiv.org/abs/1610.02391)

Grad-CAMの例

Grad-CAMを使ったCNNの可視化の例を、論文より引用して紹介します。

f:id:miu4930:20211213193650p:plain
引用元:Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization, Ramprasaath R. Selvaraju, Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh, Dhruv Batra, Submitted on 7 Oct 2016, last revised 3 Dec 2019 (this version, v4)(https://arxiv.org/abs/1610.02391)

この例では画像から"Nurse", "Doctor"を識別するモデルを作り、Grad-CAMを使ってモデルのCNN部分が画像のどこに注目して予測スコアを出しているのかを表しています。図の一番左の列にある2つの画像がモデルに入力した画像で、それに対して"Biased model", "Unbiased model" で推計した結果とその予測スコアに影響を与えている箇所をGrad-CAMで可視化した結果を表しています。"Biased model"は学習に使ったデータに偏りがあり、"Nurse"に女性の画像が、"Doctor"に男性の画像が多いデータで学習をしています。学習時の検証データでは高い精度を出していたものの、学習データとは別のテストデータにおいては正解率82%に精度が落ちています。つまり汎化性能に問題があるモデルと言えます。そこでGrad-CAMで可視化された結果を見てみると、人の頭や長い髪に注目して"Nurse"の予測スコアをモデルが出力していることが分かります。つまり学習データに存在する性別の偏りに影響を受けてしまっていることが想像できます。一方で性別の偏りを無くしたデータで学習したモデルが"Unbiased model"で、こちらもGrad-CAMの結果を見ると、画像の中の人物の特徴よりも聴診器などの機器にモデルが注目してスコアを出力出来るようになっていることが分かります。テストデータにおいても正解率が90%に改善されており、汎化性も向上することが出来ました。汎化性だけでなく、より公平な判断が出来るモデルを作ることが、Grad-CAMを通じて出来たと言えそうです。

まとめ

今回はCNNの可視化の方法について、CAMとGrad-CAMについてご紹介しました。Grad-CAMについては今後の記事で実装の方法についてもご紹介したいな、と思っております!