このペジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
Grad-CAMでの深層学習による判定の理由の解明
この例では,勾配加重クラス活性化マッピング(Grad-CAM)手法を使用して,深層学習ネットワークによってその分類の判定が行われた理由を理解する方法を説明します。Selvarajuと共著者[1]によって考案されたGrad-CAMでは,ネットワークにより決定する畳み込みの特徴についての分類スコアの勾配を使用して,イメージのどの部分が分類に最も重要であるかを理解します。この例では,メ,ジにGoogLeNetの事前学習済みのネットワ,クを使用します。
Grad-CAMは,クラス活性化マッピング(CAM)手法を一般化したものです。この例では,Grad-CAMで自動微分関数dlgradient
を使用して必要な計算を簡単に実行する方法を示します。ラブWebカメラのデ,クラス活性化マッピングを使用したネットワクの予測の調査を参照してください。
事前学習済みのネットワクの読み込み
GoogLeNetネットワクを読み込みます。
Net = googlenet;
帐号メ帐号ジの分類
GoogLeNet econメeconジのサeconズを読み取ります。
inputSize = net.Layers(1).InputSize(1:2);
この例に含まれるゴルデンレトリバのメジsherlock.jpg
を読み込みます。
Img = imread(“sherlock.jpg”);
econfメジのサeconfズをネットワクの入力次元に変更します。
img = imresize(img,inputSize);
e .メジを分類し,分類および分類スコアと一緒に表示します。
[classfn,score] = class (net,img);imshow (img);标题(sprintf (“% s (% .2f)”, classfn, score(classfn)));
GoogLeNetはメジをゴルデンレトリバとして正しく分類します。それはなぜでしょうか。econメジのどの特性によって,econネットワクがこの分類を行うのでしょうか。
Grad-CAMでの理由の解明
Grad-CAM[1]の背景にあるのは,最終の畳み込みの特徴マッピングについて最終的な分類スコアの勾配を計算するという概念です。この勾配が大きくなる場所は,最終的なスコアがデタに最も依存する場所を示します。補助関数gradcam
は,畳み込み特徴マップに対する任意のクラスのソフトマックス層スコアの微分を取得して,dlnetwork
のGrad-CAMマップを計算します。自動微分の場合、入力dlImg
はdlarray
でなければなりません。
类型gradcam.m
function [featureMap,dScoresdMap] = gradcam(dlnet, dlImg, softmaxName, featureLayerName, classfn) [scores, featureLayerName] = predict(dlnet, dlImg, 'Outputs', {softmaxName, featureLayerName});classScore = scores(classfn);dScoresdMap = dlgradient(classScore,featureMap);结束
関数gradcam
の1行目は,ネットワクからクラススコアと特徴マップを取得します。2行目は,選択した分類(この場合はゴルデンレトリバ)のスコアを求めます。dlgradient
は,スカラ。そのため,gradcam
は,選択した分類に。3行目では,自動微分を使用して,特徴マッピング層の重みに。
Grad-CAMを使用するには,GoogLeNetネットワクからdlnetwork
を作成します。まず,ネットワクから層グラフを作成します。
lgraph = layerGraph(net);
GoogLeNetで分類に使用されるデ,タにアクセスするため,その最終分類層を削除します。
lgraph = removeLayers(lgraph, lgraph. layers (end).Name);
層グラフからdlnetwork
を作成します。
Dlnet = dlnetwork(lgraph);
Grad-CAM補助関数で使用する,ソフトマックス層と特徴マップ層の名前を指定します。特徴マップ層には,非単集合の空間次元をもつ最後のReLU層,またはReLU層の出力を集める最後の層(深さ連結層や加算層など)を指定します。ネットワークにReLU層が含まれない場合は,非単集合の空間次元を出力にもつ最終畳み込み層の名前を指定します。関数analyzeNetwork
を使用してネットワクを検査し,正しい層を選択します。GoogLeNetの場合,ソフトマックス層の名前は“概率”
,深さ連結層の名前は“inception_5b-output”
です。
softmaxName =“概率”;featureLayerName =“inception_5b-output”;
自動微分を使用するには,sherlockのdlarray
に変換します。
dlImg = dlarray(single(img),SSC的);
関数gradcam
でdlfeval
を呼び出すことによって,メ,ジのGrad-CAM勾配を計算します。
[featureMap, dScoresdMap] = dlfeval(@gradcam, dlnet, dlImg, softmaxName, featureLayerName, classfn);
GoogLeNetイメージサイズへの勾配マップのサイズを変更し,スコアを表示に適したレベルにスケーリングします。
gradcamMap = sum(featureMap .* sum(dScoresdMap, [1 2]), 3);gradcamMap = extract (gradcamMap);gradcamMap = rescale(gradcamMap);gradcamMap = imresize(gradcamMap, inputSize,“方法”,“双三次的”);
“AlphaData”
の値として0.5を使用して,メジの上にGrad-CAMレベルを表示します。“喷气机”
カラマップでは,濃い青が最低値,濃い赤が最高値になっています。
imshow (img);持有在;显示亮度图像(gradcamMap“AlphaData”, 0.5);colormap飞机持有从;标题(“Grad-CAM”);
明らかに,犬の顔の上側と耳が分類に最も大きく影響しています。
深層ネットワクによる分類の理由を調べる別の方法にいては,occlusionSensitivity
を参照してください。
参考文献
[1] Selvaraju, R. R., M. Cogswell, A. Das, R. Vedantam, D. Parikh和D. Batra。”梯度- cam:基于梯度定位的深度网络可视化解释。《IEEE计算机视觉国际会议》,2017,第618-626页。可以在Grad-CAM
在计算机视觉基金会开放获取网站上。
参考
dlarray
|dlgradient
|dlfeval
|dlnetwork