主要内容

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

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

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

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

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

网=挤压网;

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

Im = imread(“face.jpg”);imshow (im)

imgSize = size(im);imgSize = imgSize(1:2);

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

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

analyzeNetwork(净)

@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ネットワークにイメージを渡す前にイメージのサイズを変更できますが,ネットワークで大きなイメージを処理することもできます。ネットワクに大きなメジを供給すると,活性化のサズも大きくなります。ただし,ネットワークの学習はサイズが 227 x 227 のイメージについて行われており、このサイズより大きいオブジェクトまたは特徴を認識するようには行われていません。

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

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

Act1 =激活(net,im,“conv1”);

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

Sz =大小(act1);Act1 =重塑(Act1,[sz(1) sz(2) 1 sz(3)]);

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

I = 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 =激活(net,im,“fire6-squeeze1x1”);Sz = size(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(max(act6)));act6chMax = act6(:,:,:,maxValueIndex6);imshow (imresize (mat2gray (act6chMax) imgSize))

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

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

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

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

Act6relu =激活(net,im,“fire6-relu_squeeze1x1”);Sz = size(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(“face-eye-closed.jpg”);imshow (imClosed)

act6Closed =激活(net,imClosed,“fire6-relu_squeeze1x1”);sz = size(act6Closed);act6Closed =重塑(act6Closed,[sz(1),sz(2),1,sz(3)]);

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

channelclosed = repmat(imresize(mat2gray(act6Closed(:,:,:,[14 47])),imgSize),[1 1 3]);channelsOpen = repmat(imresize(mat2gray(act6relu(:,:,:,[14 47])),imgSize),[1 1 3]);I = imtile(cat(4,im,channelsOpen*255,imClosed, channelsOpen*255));imshow (I)标题(输入图像,14号通道,47号通道);

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

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

参考

||

関連するトピック