主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

畳み込みニューラルネットワークの活性化の可視化

この例では,畳み込みニューラルネットワークにイメージを供給して,ネットワークのさまざまな層の活性化を表示する方法を説明します。活性化を調べ,活性化の領域を元のイメージと比較して,ネットワークが学習する特徴を確認します。初期の層のチャネルでは色やエッジなどの単純な特徴が学習され,深い層のチャネルでは目などの複雑な特徴が学習されていることを確認します。この方法で特徴を識別すると,ネットワークが学習した内容を把握するのに役立ちます。

この例には,深度学习工具箱™および图像处理工具箱™が必要です。

事前学习済みのネットワークおよびデータの読み込み

事前学習済みのSqueezeNetネットワークを読み込みます。

净= squeezenet;

イメージを読み取って表示します。後で使用するためにサイズを保存します。

我= imread ('face.jpg');imshow (im)

imgSize =大小(im);imgSize = imgSize (1:2);

ネットワークアーキテクチャの表示

ネットワークを解析して,表示可能な層を確認します。畳み込み層では,学習可能なパラメーターを使用して畳み込みが行われます。ネットワークは,有用な特徴(通常,チャネル1つにつき1つの特徴)を識別することを学習します。64年最初の畳み込み層に個のチャネルがあることを確認します。

分析(净)

イメージ入力层では,入力サイズが指定されます。ネットワークにイメージを渡す前にイメージのサイズを変更できますが,ネットワークで大きなイメージを处理することもできます。ネットワークに大きなイメージを供给すると,活性化のサイズも大きくなります。ただし,ネットワークの学习はサイズが227 X 227のイメージについて行われており,このサイズより大きいオブジェクトまたは特徴を认识するようには行われていません。

最初の畳み込み层の活性化の表示

イメージに対して畳み込み層のどの領域が活性化するかを確認し,元のイメージの対応する領域と比較することによって特徴を調べます。畳み込みニューラルネットワークの各層は,”“チャネルと呼ばれる多数の2次元配列で構成されています。イメージをネットワークに渡して,conv1层の出力活性化を确认します。

act1 =激活(网,即时通讯,“conv1”);

活性化は3次元配列として返されます。この配列の3番目の次元で,conv1層のチャネルがインデックス化されています。関数imtileを使用してこれらの活性化を表示するには,配列の形状を4次元に変更します。imtileの入力の3番目の次元は,イメージカラーを表します。活性化には色が設定されていないため,3番目の次元のサイズが1になるように設定します。4番目の次元でチャネルがインデックス化されます。

SZ =尺寸(ACT1);ACT1 =重塑(ACT1,[SZ(1)SZ(2)1 SZ(3)]);

これで,活性化を表示できるようになりました。各活性化は任意の値を取ることができるため,mat2grayを使用して出力を正規化します。活性化の最小値が0,最大値が1になるように,すべての活性化がスケーリングされます。64年個のイメージ(層のチャネルごとに1つのイメージ)を8 x 8のグリッドに表示します。

我= imtile (mat2gray (act1),“GridSize”[8]);imshow(我)

特定のチャネルの活性化の調査

活性化のグリッドの各タイルは,conv1層のチャネルの出力です。白のピクセルは強い正の活性化を表し,黒のピクセルは強い負の活性化を表します。チャネルがほとんどグレーの場合,入力イメージはそれほど強く活性化されません。チャネルの活性化におけるピクセルの位置は,元のイメージにおける同じ位置に対応します。チャネルにある白いピクセルは,その位置でチャネルが強く活性化されることを示します。

チャネル22の活性化のサイズが元のイメージと同じになるように変更して,活性化を表示します。

act1ch22 = act1 (:,:,: 22);act1ch22 = mat2gray (act1ch22);act1ch22 = imresize (act1ch22 imgSize);I = imtile ({im, act1ch22});imshow(我)

チャネルの白に近いピクセルが元のイメージの赤い領域に対応しているので,このチャネルは赤いピクセルに対して活性化することがわかります。

最も強い活性化チャネルの確認

強く活性化するチャネルをプログラムで調べて,興味深いチャネルを見つけることもできます。関数马克斯を使用して最も強く活性化するチャネルを見つけ,活性化のサイズを変更して表示します。

[maxValue, maxValueIndex] = max (max (max (act1)));act1chMax = act1 (:,:,:, maxValueIndex);act1chMax = mat2gray (act1chMax);act1chMax = imresize (act1chMax imgSize);I = imtile ({im, act1chMax});imshow(我)

元のイメージと比較すると,このチャネルはエッジに対して活性化することがわかります。左側が薄く右側が濃いエッジでは正に活性化され,左側が濃く右側が薄いエッジでは負に活性化されます。

深い層の調査

最初の畳み込み层で,ほとんどの畳み込みニューラルネットワークは色やエッジといった特徴の検出を学习します。深い畳み込み层では,ネットワークはより复雑な特徴を検出することを学习します。后続の层は,それ以前の层の特徴を组み合わせることによって特徴を构筑します。conv1层と同じ方法でfire6-squeeze1x1層を調べます。グリッドで活性化の計算,形状変更,および表示を行います。

ACT6 =激活(净,即时通讯,“fire6-squeeze1x1”);深圳=大小(act6);Act6 =重塑(Act6,[sz(1) sz(2) 1 sz(3)]);I = imtile(imresize(mat2gray(act6),[64 64]),“GridSize”8 [6]);imshow(我)

詳しく調べるにはイメージの数が多すぎるため,興味深いと思われるいくつかのイメージに注目します。fire6-squeeze1x1層で最も強い活性化を表示します。

[maxValue6,maxValueIndex6] = MAX(最大(MAX(ACT6)));act6chMax = ACT6(:,:,:,maxValueIndex6);imshow(imresize(mat2gray(act6chMax),imgSize))

この場合,最大の活性化チャネルには他のいくつかのチャネルほど興味深い詳細な特徴がなく,強い負の(色の濃い)活性化と正の(色の薄い)活性化が表示されます。このチャネルは,顔に焦点を当てている可能性があります。

すべてのチャネルのグリッドには,目に対して活性化するチャネルがあります。チャネル14および47をさらに详细に调べます。

I = imtile(imresize(mat2gray(ACT6(:,:,:,[14 47])),imgSize));imshow(我)

多くのチャネルには,色の薄い活性化領域と色の濃い活性化領域の両方が含まれています。これらはそれぞれ,正の活性化と負の活性化です。ただし,fire6-squeeze1x1層の後には正規化線形ユニット(ReLU)が続くため,使用されるのは正の活性化のみです。正の活性化のみを調べるには,解析を繰り返してfire6-relu_squeeze1x1層の活性化を視覚化します。

act6relu =激活(网,即时通讯,“fire6-relu_squeeze1x1”);深圳=大小(act6relu);Act6relu =重塑(Act6relu,[sz(1) sz(2) 1 sz(3)]);I = imtile(imresize(mat2gray(act6relu(:,:,:,[14 47])),imgSize));imshow(我)

fire6-squeeze1x1層の活性化と比べて,fire6-relu_squeeze1x1層の活性化は,顔の強い特徴が含まれるイメージの領域を明確に特定します。

チャネルによる目の認識のテスト

fire6-relu_squeeze1x1層のチャネル14および47が目に対して活性化するかどうかを確認します。片目を閉じている新しいイメージをネットワークに入力し,結果として得られる活性化を元のイメージの活性化と比較します。

片目を閉じているイメージを読み取って表示し,fire6-relu_squeeze1x1層の活性化を計算します。

imClosed = imread(“面眼closed.jpg”);imshow (imClosed)

imClosed act6Closed =激活(净,“fire6-relu_squeeze1x1”);深圳=大小(act6Closed);act6Closed =重塑(act6Closed,深圳(1),深圳(2),1,深圳(3)));

イメージと活性化を1つの图内にプロットします。

channelsClosed = repmat(imresize(mat2gray(act6Closed(:,:,:,[14 47])),imgSize),[1 1 3]);channelsOpen = repmat(imresize(mat2gray(act6relu(:,:,:,[14 47])),imgSize),[1 1 3]);I = imtile(猫(4,IM,channelsOpen * 255,imClosed,channelsClosed * 255));imshow(I)称号(“输入图像,通道14,通道47”);

活性化から,チャネル14と47の両方が個々の目に対して活性化し,口の周囲の領域に対してもある程度活性化することがわかります。

ネットワークに対して目について学习するように指定していないにもかかわらず,目がイメージのクラスを区别するために有益な特徴であると学习しています。以前の机械学习のアプローチでは通常,问题に固有の特徴を手动で作成していましたが,上记の深层畳み込みネットワークは有益な特徴を自动で学习することができます。たとえば,目を识别する学习が,ネットワークで豹と豹柄のカーペットを区别するのに役立つ可能性があります。

参考

||

関連するトピック