ABEJA Tech Blog

中の人の興味のある情報を発信していきます

Grad-CAMだけじゃない画像認識におけるCAM手法を徹底解説

長期インターン生の木村です。

今回、以前から興味を持っていた画像認識モデルにおける説明可能なAIのクラス活性化マッピング手法を調査してみました。

説明可能なAIとは

近年、深層学習ベースの画像認識モデルは製造業、医療、自動運転など至る場面で社会実装が進められていますが、ディープなラーニングを行っているだけに推論の判断根拠を人間が解釈できない問題があります。医療、自動運転のような命に関わる領域では安全性や公平性を担保できないために安心して導入できません。

このような問題を解決するのが「説明可能なAI(XAI)」です。 「説明可能なAI(XAI)」は、AIの推論結果を人間が解釈可能な形で出力する技術を指します。例えば、犬と猫が映っている画像を画像分類するAIが犬と推論した場合、モデルがどこを判断根拠としているかをヒートマップで可視化します。このヒートマップは、「顕著性マップ」と呼ばれます。

画像分類モデルが犬と判別した時の判断根拠

「クラス活性化マッピング」は、画像認識におけるXAIの一分野であり深層学習ベースの教師あり学習モデルで用いることができます。本記事では、クラス活性化マッピングの様々な手法を解説します。

クラス活性化マッピング手法は画像分類、物体検出、セマンティックセグメンテーション、VQAのような分類を用いる幅広いタスクを扱うことができます。また、「任意のクラス」に対する判断根拠を見ることができます。例えば、先ほどの画像は猫と推論されてもおかしくないため猫の判断根拠が知りたくなります。クラス活性化マッピング手法は、「任意のクラス」に対する推論結果を見ることができるのでこれが可能となります。 そのため、AIの安全性や信頼性を確認するだけでなく、AIが誤判別している部分やモデルの挙動を知り、AIの改善に用いることができます。犬と猫の例では、猫の尻尾の部分を判断根拠としているために判断根拠として弱く、犬と推論していると解釈することができます。

画像分類モデルの猫の判断根拠

本記事では、PyTorchで最もよく用いられるライブラリpytorch-grad-camにあるクラス活性化マッピング手法を全て説明しています。本記事を読み終わる頃には、様々な手法の違いが分かりモデル改善の着眼点が分かるようになります。それでは解説していきます!

理論

CAM

CAM[1]は、2016年にCVPRに採択された初めてのクラス活性化マッピング手法です。
しかし、どのような画像認識モデルでも適用できるわけではなく、 Global Average Pooling(GAP)[2]がないと適用できない制限があります。

クラス活性化マッピング手法では大体以下の手順で顕著性マップが作られます。

  1. 判断根拠を知りたい画像を学習済みモデルに流す。
  2. 学習済みモデルから特徴マップ(Feature Map)を取ってくる。
  3. 特徴マップのチャンネル毎の重みを求める。
  4. 重み付けしたチャンネルを足し合わせて元の画像サイズに拡大して顕著性マップとする

特徴マップを重み付けして顕著性マップ

様々なクラス活性化マッピング手法の違いは、主に3番目で作成する重みの値となります。したがって、特徴マップをどう重み付けするかが様々な手法の研究の焦点となっています。

CAMでは、チャンネルごとの重みとして全結合層の重みを用います。Global Average Pooling(GAP)があることを仮定しているので各チャンネルは全結合層の入力層ユニットに1対1対応することになります。そのユニットから対象とするクラスへの重みはそのチャンネルの重要度と解釈することができるので、CAMではこの係数をそのまま転用しています。

下の画像の例では、青、赤、緑のチャンネルに重み付けをして顕著性マップを作っています。 GAPに流した青、赤、緑のチャンネルは青、赤、緑のニューロンに対応していて、青ニューロンのw_1, 赤ニューロンのw_2, 緑ニューロンのw_3がそれぞれのチャンネルの重みとなります。

CAMの全体像

論文を読み返していて意外だったのが、CAMは説明可能なAIの文脈で提案されたわけではなく、画像分類タスクの学習済みモデルを1つの物体の物体検出タスクに応用するWeakly Supervised Object Localizationの手法として提案されていることです。その影響もあり2018年のRISE[3]で挿入・削除テストが提案されるまでObject Localizationが評価タスクとして用いられることが多いような気がします。ちなみに、Object Localizationは作成した顕著性マップから閾値を用いてバウンディングボックスを作るみたいです。

Grad-CAM

Grad-CAM[4]は2017年にICCVに採択された重みに勾配を用いたクラス活性化マッピング手法です。この手法を皮切りにクラス活性化マッピングが盛んに研究されていくようになりました。 Grad-CAMは、CAMのGlobal Average Poolingを必要とする制限がなく、物体検出、セマンティックセグメンテーションのような分類が必要となる幅広いタスクで用いることができるため、一躍有名になりました。

Grad-CAMでは、各チャンネルの重みを勾配から計算します。対象とする特徴マップの勾配は特徴マップと同じ大きさのテンソルとなるため、そこにGlobal Average Poolingを施したものを重みとしています。勾配から重みを作る理由は、判断根拠に重要となる部分ほど大きく更新される、つまり、重要な箇所ほど大きな偏微分値を持つ前提によります。(近年の研究では必ずしもそうではないことがわかっています)

テンソルの形に着目すると、(1,C,H,W)の特徴マップに、誤差逆伝播法で得た(1,C,H,W)のテンソルにGAPを施し得た(1,C,1,1)テンソルをブロードキャストした(1,C,H,W)テンソルを掛け合わせています。

問題点として、複数の同じ物体を検知できないことや勾配消失問題の影響を受けることが近年の研究で分かっています[10]。

Grad-CAMの全体像

Grad-CAM++

Grad-CAM++[5]は2018年のWACVに採択されたGrad-CAMの改良手法です。 Grad-CAM++では勾配に加えてへシアンや3回微分を用いて重みを計算しています。Grad-CAMとの違いは2つあります。

  1. 特徴マップにReLUを通す ReLUを通すことでより良くなることを実験で確認しています。この着想には先行研究の[6],[7]があると思います。

  2. 各重みがスコアの寄与を反映している Grad-CAM++では各チャンネルの各サブピクセルに対して重みを計算していますが(Grad-CAMと同じ)、各チャンネルの各サブピクセルの重みを足し合わせると対象とするクラスのスコアとなるように解析的に求めています。Grad-CAMにはこのような裏付けがないので、Grad-CAM++の方が一般的に良いと信じられています。

スコアY^{c}k番目のチャンネルの(i,j)成分をA_{ij}^{k}とすると、注目するクラスckチャンネル目の(i,j)成分の重みa_{ij}^{kc}は次のように計算されます。導出については論文をご覧ください。

 a_{ij}^{kc}=\frac{\frac{\partial^{2} Y^{c}}{(\partial A_{ij}^{k})^{2}}}{2\frac{\partial^{2} Y^{c}}{(\partial A_{ij}^{k})^{2}}+\sum_{a}\sum_{b}A^{k}_{ab}\frac{\partial^{3} Y^{c}}{(\partial A_{ij}^{k})^{3}}}

k番目のチャンネルに対応するこの値にGlobal Average Poolingを流した値がk番目のチャンネルの重みw_k^{c}になります。

w_k^{c}=\sum_{i}\sum_{j}\frac{\frac{\partial^{2} Y^{c}}{(\partial A_{ij}^{k})^{2}}}{2\frac{\partial^{2} Y^{c}}{(\partial A_{ij}^{k})^{2}}+\sum_{a}\sum_{b}A^{k}_{ab}\frac{\partial^{3} Y^{c}}{(\partial A_{ij}^{k})^{3}}}

Grad-CAM++の全体像

ScoreCAM

Score-CAM[8]は、2020年にIEEE/CVFに採択された勾配を用いずに順伝搬で重み付けをおこなうクラス活性化マッピング手法です。この研究背景には、Grad-CAMが勾配消失の影響を受けやすく重みにノイズがのってしまうことがあります。

Score-CAMでは、各チャンネルの特徴マップの重みを順伝搬で求めます。これは2つのフェーズで行われます。

  1. マスクを作成 判断根拠が欲しい画像をモデルに流し特徴マップを得る。その特徴マップを元の画像サイズに拡大し、0から1の間に値がなるように各チャンネルごとに正規化する。

  2. マスク化した画像を学習済みモデルに流す 1で作成したマスクを画像と重ねてモデルに流しスコアを得る。この操作をチャンネル数の数だけ繰り返す。

重みは、マスク化された画像に対するスコアと元の画像のスコアを引いた値に、softmax関数を施し、全チャンネルの重みの総和が1となるようにします。

Score-CAMの全体像

この手法のように、近年では勾配を用いないクラス活性化マッピング手法が盛んに研究されています。

Eigen-CAM

Eigen-CAM[9]は、2020年のIEEE/IJCNNに採択された勾配や順伝搬を用いない手法です。 顕著性マップは特徴マップに特異値分解を用いて作成されます。 この手法には次のようなメリットがあります。

  1. 勾配を用いない Score-CAMで述べたように勾配消失の問題を回避できる。
  2. 順伝播を用いない 誤判別が全結合層によるケースを回避できる。
  3. 敵対的サンプルに強い 勾配ベースのGrad-CAMは敵対的サンプルで大きく出力が変わるが、Eigen-CAMはロバスト性がある。

初めこの論文を読んだ時に(1,C,H,W)特徴マップを特異値分解できるはずがないやんと思ったのですが、実装を見るとスッキリしたのでテンソルの形に着目して説明します。 (1,C,H,W)の特徴マップを(HW,C)の行列に変形し特異値分解します。そして、最大特異値に対する右特異値ベクトルをこの行列に右からかけることで顕著性マップを作成します。

直感的な理解では、各チャンネルに共通で活性化している部分を抜き出していると捉えることができます。(行っていることが数学的には低ランク近似であるため。)

この手法は特徴マップさえあれば適用することができるので、自己教師あり学習、距離学習のようなタスクでバックボーンがどのような部分に着目しているのかを知るために用いることもできます。

Ablation-CAM

Ablation-CAM[10]は、2020年のWACVに採択されたクラス活性化マッピング手法です。 Ablationから分かる通り、各チャンネルを「切除」することで各チャンネルの重みを求めています。

各チャンネルの重要度は、それを「切除」した際の、つまりそのチャンネルの値を全て0にして不活化した時のスコアの下がり具合と関係があるとの仮説の元で、kチャンネル目の重みw_kw_k=\frac{y^{c}-y^{c}_k}{y^{c}}としています。y^{c}は通常のスコアで、y^{c}_kkチャンネル目の特徴マップが全て0にされた特徴マップを全結合層に流して得たスコアです。

Layer-CAM

Layer-CAM[11]は、学習済みの画像分類モデルをWeakly Supervised Localization Taskやセマンティックセグメンテーションなどのタスクに転用するために2021年に提案されたクラス活性化マッピング手法です。

今まで紹介してきた手法は全て1つの特徴マップを用い、通常バックボーンの最終層の特徴マップを用いて顕著性マップを作成しています。そのため、ダウンサンプリングが何回も行われているので元の画像サイズに拡大した際に荒くなります。

浅い層の特徴マップは物体検出やセマンティックセグメンテーションに有用となるエッジを検出していることが知られているので、この論文では浅い層を含む複数層の特徴マップを用いて顕著性マップを作ることを提案しています。

各特徴マップに対する顕著性マップの作成にはGrad-CAMを用いていますが、上で述べたどの手法でも適用することができます。複数層の特徴マップの集約の仕方は単純にチャンネル方向に足し合わせるだけです。実験では、Grad-CAM、Grad-CAM++、Score-CAMより良い結果が得られることを確認しています。

Layer-CAMの全体像

最後に

クラス活性化マッピングは判断の根拠を提示するだけでなく、モデル改良にも用いることができます。[12]では顕著性マップをデータ水増しに利用する手法を提案しています。私が個人的にクラス活性化マッピングを用いてモデル改良を行う時は、Eigen-CAMとAblation CAMを用います。Backboneの特徴量マップが良い特徴量になっているかをEigen-CAMを用いて確認し、Ablation CAMを用いて全結合層がうまく学習できているのかを確認します。こうしてどこに改善の余地があるかを調べています。この記事でCAMラバーが増えれば幸いです!

  1. Zhou, Bolei, et al. "Learning deep features for discriminative localization." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
  2. Lin, Min, Qiang Chen, and Shuicheng Yan. "Network in network." arXiv preprint arXiv:1312.4400 (2013).
  3. Petsiuk, Vitali, Abir Das, and Kate Saenko. "Rise: Randomized input sampling for explanation of black-box models." arXiv preprint arXiv:1806.07421 (2018).
  4. Selvaraju, Ramprasaath R., et al. "Grad-cam: Visual explanations from deep networks via gradient-based localization." Proceedings of the IEEE international conference on computer vision. 2017.
  5. Chattopadhay, Aditya, et al. "Grad-cam++: Generalized gradient-based visual explanations for deep convolutional networks." 2018 IEEE winter conference on applications of computer vision (WACV). IEEE, 2018.
  6. Springenberg, Jost Tobias, et al. "Striving for simplicity: The all convolutional net." arXiv preprint arXiv:1412.6806 (2014).
  7. Zeiler, Matthew D., and Rob Fergus. "Visualizing and understanding convolutional networks." European conference on computer vision. Springer, Cham, 2014.
  8. Wang, Haofan, et al. "Score-CAM: Score-weighted visual explanations for convolutional neural networks." Proceedings of the IEEE/CVF conference on computer vision and pattern recognition workshops. 2020.
  9. Muhammad, Mohammed Bany, and Mohammed Yeasin. "Eigen-cam: Class activation map using principal components." 2020 International Joint Conference on Neural Networks (IJCNN). IEEE, 2020.
  10. Ramaswamy, Harish Guruprasad. "Ablation-cam: Visual explanations for deep convolutional network via gradient-free localization." Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision. 2020.
  11. Jiang, Peng-Tao, et al. "Layercam: Exploring hierarchical class activation maps for localization." IEEE Transactions on Image Processing 30 (2021): 5875-5888.
  12. Zhang, Qinglong, Lu Rao, and Yubin Yang. "Group-cam: Group score-weighted visual explanations for deep convolutional networks." arXiv preprint arXiv:2103.13859 (2021).

採用情報

ABEJAではエンジニアを大募集しています。様々なポジションがございますので、下記職種一覧をご一読ください。

careers.abejainc.com