このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,勾配加重クラス活性化マッピング(grad-cam)手法を使使し,深层学习ネットワークネットワークそのそのの判定行わたれ由をを解わわたをを解するをををしします.selvarajuと共者者[1]によって考案されたGrad-CAMでは,ネットワークにより決定する畳み込みの特徴についての分類スコアの勾配を使用して,イメージのどの部分が分類に最も重要であるかを理解します。この例では,イメージにGoogLeNetの事前学習済みのネットワークを使用します。
Grad-CAMは,クラス活性化マッピング(CAM)手法を一般化したものです。この例では,Grad-CAMで自動微分関数dlgradient
を使用して必要な計算を簡単に実行する方法を示します。ライブWebカメラのデータへの活性化マッピング手法の使用については,クラス活性化マッピングを使用したネットワークの予測の調査を参照してください。
GoogLeNetネットワークを読み込みます。
网= googlenet;
GoogLeNetイメージのサイズを読み取ります。
inputSize = net.Layers (1) .InputSize (1:2);
この例に含まれるゴールデンレトリバーのイメージsherlock.jpg
を読み込みます。
img = imread (“sherlock.jpg”);
イメージのサイズをネットワークのの力次元ににしし。
img = imresize (img, inputSize);
イメージを分類し,分類および分類スコアと一緒に表示します。
[classfn,分数]=(净,img)进行分类;imshow (img);标题(sprintf (“% s (% .2f)”、classfn评分(classfn)));
GoogLeNetはイメージをゴールデンレトリバーとして正しく分類します。それはなぜでしょうか。イメージのどの特性によって,ネットワークがこの分類を行うのでしょうか。
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 =分数(classfn);dScoresdMap = dlgradient (classScore featureMap);结束
関数gradcam
の1行目は,ネットワークからクラススコアと特徴マップを取得します。2行目は,選択した分類(この場合はゴールデンレトリバー)のスコアを求めます。dlgradient
は,スカラー値関数についてのみ勾配を計算します。そのため,gradcam
は,選択した分類についてのみイメージスコアの勾配を計算します。3行目では,自動微分を使用して,特徴マッピング層の重みについて最終的なスコアの勾配を計算します。
Grad-Camをを使用するに,googlenetネットワークからdlnetwork
まず,ネットワークから层グラフを。
lgraph = layerGraph(净);
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”;
自動微分を使用するには,夏洛克のイメージをdlarray
に変換します。
dlImg = dlarray(单(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 = extractdata (gradcamMap);gradcamMap =重新调节(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:基于梯度定位的深度网络视觉解释。《计算机视觉学报》,2017,pp. 618-626。可以在Grad-CAM
在计算机视觉基金会开放获取网站上发表。
dlarray
|dlfeval
|dlgradient
|dlnetwork