このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
オクルージョンを使用したネットワーク予測の理解
この例では,オクルージョン感度マップを使用して,深層ニューラルネットワークによる分類の判定理由を理解する方法を説明します。オクルージョン感度は,深層ネットワークの分類においてイメージのどの部分が最も重要かを理解するためのシンプルな手法です。データの小さな摂動を使用することで,データのさまざまな領域におけるオクルージョンへのネットワークの感度を測定できます。オクルージョン感度は,ネットワークが特定の分類を行うためにどのイメージ特徴を使用するかに関するおおまかな理解を得るとともに,ネットワークによってイメージが誤分類される理由についての洞察を得るために使用します。
深度学习工具箱には,イメージの入力を受け取る深層ニューラルネットワークのためにオクルージョン感度マップを計算する関数occlusionSensitivity
が提供されています。関数occlusionSensitivity
は,入力の小さな領域をオクルージョンマスク(通常は灰色の正方形)に置き換えて摂動を与えます。マスクはイメージ全体を移動し,与えられたクラスの確率スコアの変化が,マスクの位置の関数として測定されます。この手法を使用して,イメージのどの部分が分類に最も重要かを強調表示することができます。イメージのその部分が隠されると,予測されたクラスの確率スコアは急激に下がります。
事前学習済みのネットワークとイメージの読み込み
事前学習済みのネットワークGoogLeNetを読み込みます。これはイメージ分類に使用されます。
网= googlenet;
イメージの入力サイズとネットワークの出力クラスを抽出します。
inputSize = net.Layers (1) .InputSize (1:2);类= net.Layers . class(结束);
イメージを読み込みます。イメージは莱卡犬という名前の犬です。イメージのサイズをネットワークの入力サイズに変更します。
imgLaikaGrass = imread (“laika_grass.jpg”);imgLaikaGrass = imresize (imgLaikaGrass inputSize);
イメージを分類して,分類スコアの最も高い3つのクラスをイメージタイトルに表示します。
[YPred,分数]=(网络,imgLaikaGrass)进行分类;[~,topIdx] = maxk(score, 3);topScores =分数(topIdx);topClasses =类(topIdx);imshow(imglaikgrasass) titleString = compose(“% s (% .2f)”、topClasses topScores);标题(sprintf(加入(titleString,”;“)));
莱卡犬はプードルとコッカースパニエルの雑種です。この品種はGoogLeNetのクラスにないため,ネットワークにとってイメージの分類が難しくなります。ネットワークによる予測の信頼度はあまり高くありません。予測クラス迷你贵宾犬
のスコアはわずか23%です。次に高いスコアのクラスもプードルの一種で,これは妥当な分類です。ネットワークは西藏梗
クラスにも中程度の確率を割り当てています。オクルージョンを使用することで,ネットワークがイメージのどの部分に基づいてこれら3つのクラスを提示したかを理解できます。
ネットワークが分類に使用するイメージ領域の特定
オクルージョンを使用することで,分類にとってイメージのどの部分が重要かを理解できます。最初に,迷你贵宾犬
の予測クラスを確認します。イメージのどの部分がこのクラスを提示するのでしょうか。オクルージョン感度関数を使用して,イメージの一部が隠されたときの分類スコアの変化をマッピングします。
地图= occlusionSensitivity(网,imgLaikaGrass, YPred);
オクルージョン感度マップを重ね合わせた莱卡犬のイメージを表示します。
imshow (imgLaikaGrass“InitialMagnification”, 150)在显示亮度图像(地图,“AlphaData”, 0.5) colormap飞机colorbar标题(sprintf (“闭塞敏感性(% s)”,...YPred))
オクルージョンマップにより,イメージのどの部分が迷你贵宾犬
クラスのスコアに正の寄与をし,どの部分が負の寄与をしたかがわかります。マップの赤い領域は値が高く,迷你贵宾犬
クラスの証拠になる部分です。赤い領域が隠れると,迷你贵宾犬
のスコアは下がります。このイメージでは莱卡の頭,背中,および耳が,迷你贵宾犬
クラスの強い証拠になっています。
値が低いマップの青い領域は,隠れると迷你贵宾犬
クラスのスコアが上がるイメージの部分です。多くの場合,これらの領域は他のクラスの証拠であり,ネットワークを混乱させる可能性があります。この場合莱卡の口と脚が迷你贵宾犬
の全体的なスコアに負の寄与をしています。
オクルージョンマップはイメージ内の犬に強い焦点を当てており,GoogLeNetはイメージの正しいオブジェクトを分類していることがわかります。ネットワークが期待どおりの結果を生成しない場合,その理由を理解するためのヒントをオクルージョンマップから得られる可能性があります。たとえば,ネットワークがイメージの他の部分に強く焦点を合わせている場合は,ネットワークに誤った特徴を学習させていることが示唆されます。
勾配クラスの活性化マッピング(Grad-CAM)手法を使用することで同様の結果を得られます。Grad-CAMでは,ネットワークの最後の畳み込み層についての分類スコアの勾配を使用して,イメージのどの部分が分類に最も重要であるかを理解します。例については,Grad-CAMでの深層学習による判定の理由の解明を参照してください。
オクルージョン感度とGrad-CAMは通常,定性的に類似する結果を返しますが,その仕組みは異なります。通常,Grad-CAMマップを使用すると,パラメーターを1つも調整しないでオクルージョン感度よりも高速に計算できます。ただし,Grad-CAMマップはオクルージョン感度よりも空間的な解像度が通常低く,微細な部分を見逃す可能性があります。Grad-CAMの基となる解像度は,最後の畳み込み特徴マップの空間解像度で,GoogleNetの場合は7 x 7ピクセルです。オクルージョン感度から最適な結果を得るには,MaskSize
オプションと步
オプションに適切な値を選択しなければなりません。この調整により,長さのスケールが異なる入力の特徴を検査するうえで,さらに優れた柔軟性を得られます。
異なるクラスの証拠の比較
オクルージョンを使用して,ネットワークが異なるクラスについてイメージのどの部分を証拠として識別したかを比較できます。これは,ネットワークによる分類の信頼度が低く,複数のクラスに同様のスコアが付いている場合に役立ちます。
上3位クラスのオクルージョンマップをそれぞれ計算します。解像度をさらに高くしてオクルージョン結果を検査するには,MaskSize
および步
オプションを使用してマスクサイズとストライドを小さくします。步
を小さくするとマップの解像度は高くなりますが,計算時間が長くなり,メモリ消費量が大きくなることがあります。MaskSize
を小さくすると細部を表すことができますが,結果にノイズが多く含まれる可能性があります。
topClasses =类(topIdx);topClassesMap = occlusionSensitivity(net, imglaikgrass, topClasses,...“步”10...“MaskSize”15);
上3位クラスの結果をそれぞれプロットします。
为i = 1:长度(topIdx)图imshow (imgLaikaGrass);持有在显示亮度图像(topClassesMap(:,:我),“AlphaData”, 0.5);colormap飞机;classLabel =字符串(类(topIdx(我)));标题(sprintf (“% s”classLabel));结束
イメージの各部分では,クラスのスコアへの影響度が犬種によって大きく異なります。迷你贵宾犬
クラスと玩具贵宾犬
クラスでは犬の背中が強く影響するのに対し,西藏梗
クラスでは口と耳が寄与します。
誤分類問題の調査
ネットワークが特定の入力データを常に誤分類する場合,オクルージョン感度を使用して,入力データの特定の特徴によってネットワークが混乱していないかどうかを判定することが可能です。芝生に座っている莱卡犬のオクルージョンマップから,莱卡犬の顔に焦点を当てたイメージでは西藏梗
と誤分類されやすいと予測できます。莱卡犬の他のイメージを使用して,これが当てはまることを検証できます。
imgLaikaSit = imresize (imread (“laika_sitting.jpg”), inputSize);[YPred,分数]=(网络,imgLaikaSit)进行分类;[得分,idx] = max(分数);YPred,分数
YPred =分类西藏梗
分数=单0.5668
新しいイメージのオクルージョンマップを計算します。
地图= occlusionSensitivity(网,imgLaikaSit, YPred);imshow (imgLaikaSit);持有在;显示亮度图像(地图,“AlphaData”, 0.5);colormap飞机;标题(sprintf (“% s (% .2f)”,...字符串(类(idx)),得分));
ここでも,ネットワークでは犬の鼻と口が西藏梗
クラスに強く関連付けられています。これはネットワークの故障モードの可能性を強調しています。なぜなら莱卡の顔のイメージが一貫して西藏梗
に誤分類されることを示唆するからです。
関数occlusionSensitivity
から得られる洞察を用いて,ネットワークが入力データの正しい特徴に確実に焦点を当てるようにすることができます。この例における分類問題の原因は,GoogleNetの利用可能なクラスに莱卡犬のような雑種が含まれていないことです。オクルージョンマップは,ネットワークがなぜ莱卡犬のこのようなイメージによって混乱するのかを示しています。使用するネットワークが,実行中のタスクに適しているかどうかを確認することは重要です。
この例では,ネットワークにより,イメージのオブジェクトのさまざまな部分が異なるクラスとして誤って識別されました。この問題の1つの解決策は,誤分類されたクラスの観測値をより広くカバーする,さらに多くのラベル付きデータをネットワークに再学習させることです。たとえば,ここではネットワークに,さまざまな角度から撮影した莱卡犬のイメージを大量に使用して再学習を行い,犬の背面と正面の両方を正しいクラスに関連付けるように学習させることができます。
参考文献
bb0 Zeiler医学博士,Fergus R.(2014)可视化和理解卷积网络。见:Fleet D., Pajdla T., Schiele B., Tuytelaars T.(编者)计算机视觉- ECCV 2014。2014年大会。计算机科学课堂讲稿,卷8689。施普林格,可汗
参考
googlenet
|occlusionSensitivity