Grad-CAM での深層学習による判定の理由の解明
この例では、勾配加重クラス活性化マッピング (Grad-CAM) 手法を使用して、深層学習ネットワークによってその分類の判定が行われた理由を理解する方法を説明します。Selvaraju と共著者 [1] によって考案された Grad-CAM では、ネットワークにより決定する畳み込みの特徴についての分類スコアの勾配を使用して、イメージのどの部分が分類に最も重要であるかを理解します。この例では、イメージに GoogLeNet の事前学習済みのネットワークを使用します。
Grad-CAM は、クラス活性化マッピング (CAM) 手法を一般化したものです。ライブ Web カメラのデータへの活性化マッピング手法の使用については、クラス活性化マッピングを使用したネットワークの予測の調査を参照してください。Grad-CAM は、回帰やセマンティック セグメンテーションなどの非分類の例にも適用できます。Grad-CAM を使用してセマンティック セグメンテーション ネットワークの予測を調査する方法を示す例については、Grad-CAM を使用したセマンティック セグメンテーション ネットワークの調査を参照してください。
事前学習済みのネットワークの読み込み
GoogLeNet ネットワークを読み込みます。
net = googlenet;
イメージの分類
GoogLeNet イメージのサイズを読み取ります。
inputSize = net.Layers(1).InputSize(1:2);
この例に含まれるゴールデン レトリバーのイメージ sherlock.jpg
を読み込みます。
img = imread("sherlock.jpg");
イメージのサイズをネットワークの入力次元に変更します。
img = imresize(img,inputSize);
イメージを分類し、分類および分類スコアと一緒に表示します。
[classfn,score] = classify(net,img);
imshow(img);
title(sprintf("%s (%.2f)", classfn, score(classfn)));
GoogLeNet はイメージをゴールデン レトリバーとして正しく分類します。それはなぜでしょうか。イメージのどの特性によって、ネットワークがこの分類を行うのでしょうか。
Grad-CAM での理由の解明
Grad-CAM 手法では、最終的な畳み込み特徴マップに対する分類スコアの勾配を利用して、分類スコアに最も影響を与える入力イメージの部分を識別します。この勾配が大きくなる場所は、最終的なスコアがデータに最も依存する場所を示します。
関数 gradCAM
は、畳み込み特徴マップについて、与えられたクラスのリダクション層出力の微分を取得し、重要度マップを計算します。分類タスクの場合、関数 gradCAM
は、重要度マップを計算するために適切な層を自動的に選択します。また、名前と値の引数 'ReductionLayer'
および 'FeatureLayer'
を使用して、層を指定することもできます。
Grad-CAM マップを計算します。
map = gradCAM(net,img,classfn);
'AlphaData'
の値として 0.5 を使用して、イメージの上に Grad-CAM マップを表示します。'jet'
カラーマップでは、濃い青が最低値、濃い赤が最高値になっています。
imshow(img); hold on; imagesc(map,'AlphaData',0.5); colormap jet hold off; title("Grad-CAM");
明らかに、犬の顔の上側と耳が分類に最も大きく影響しています。
深層ネットワークによる分類の理由を調べる別の方法については、occlusionSensitivity
およびimageLIME
を参照してください。
参考文献
[1] Selvaraju, R. R., M. Cogswell, A. Das, R. Vedantam, D. Parikh, and D. Batra. "Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization." In IEEE International Conference on Computer Vision (ICCV), 2017, pp. 618–626. Available at Grad-CAM
on the Computer Vision Foundation Open Access website.
参考
gradCAM
| imageLIME
| occlusionSensitivity
| deepDreamImage