主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。

컨벌루션신경망의활성화시각화하기

이예제에서는컨벌루션신경망에영상을입력하고신경망의여러계층의활성화결과를표시하는방법을보여줍니다。활성화결과를살펴보고원본영상과활성화영역을비교해보면신경망이어떤특징을학습했는지알아낼수있습니다。앞쪽계층의채널은색이나경계같은단순한특징을학습하는반면더깊은계층의채널은눈과같은복잡한특징을학습한다는것을확인해보겠습니다。이런식으로특징을식별하면신경망이무엇을학습했는지이해하는데도움이됩니다。

이예제를실행하려면深度学习工具箱™와图像处理工具箱™가필요합니다。

사전훈련된신경망과데이터불러오기

사전훈련된SqueezeNet신경망을불러옵니다。

网= squeezenet;

영상을읽어들이고표시합니다。나중에사용할수있도록크기를저장합니다。

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

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

신경망아키텍처보기

신경망을분석하여어느계층을볼수있는지살펴봅니다。컨벌루션계층은학습가능한파라미터를사용하여컨벌루션을수행합니다。신경망은종종한채널마다한개의유용한특징을식별하도록학습합니다。첫번째컨벌루션계층에는64개의채널이있는것을확인합니다。

analyzeNetwork(净)

영상입력계층은입력크기를지정합니다。영상을신경망에통과시키기전에크기를조정할수있으나,이신경망은더큰영상도처리할수있습니다。신경망에크기가큰영상을입력하면활성화도커집니다。그러나이신경망은227×227크기의영상에대해훈련했으므로이보다큰사물이나특징을인식하도록훈련되지않았습니다。

첫번째컨벌루션계층의활성화표시하기

영상에서컨벌루션계층의어느영역이활성화되는지관찰하고원본영상의대응하는영역과비교하여특징들을살펴봅니다。컨벌루션신경망의각계층은여러개의2차원배열로이루어져있습니다。2이러한차원배열을채널이라고합니다。영상을신경망에통과시킨후conv1계층의출력활성화결과를살펴봅니다。

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

활성화값은3차원배열로반환됩니다。이배열의세번째차원은conv1계층의채널을참조합니다。imtile함수를사용하여활성화값을표시하기위해배열을4차원으로형태변경합니다。imtile에대한입력값의세번째차원은영상색을나타냅니다。이활성화결과에는색이없으므로세번째차원이크기1을갖도록설정합니다。네번째차원은채널을참조합니다。

深圳=大小(act1);(1) (1) (1) (2) (2) (3)

이제활성화결과를표시할수있습니다。각활성화값은임의의값을가질수있으므로mat2gray를사용하여출력값을정규화합니다。최소활성화값은0,최대활성화값은1이되도록모든활성화값이스케일링됩니다。64개의영상을8×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);(1) (1) (1) (2) (2) (2) (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 =激活(网,即时通讯,“fire6-relu_squeeze1x1”);深圳=大小(act6relu);Act6relu = shape(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)

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

원래영상과해당활성화결과를하나의图에플로팅합니다。

channelclosed = 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모두양쪽눈에서활성화되었으며입주변도어느정도활성화되었음을확인할수있습니다。

신경망은눈을학습하라는지시를받은적이없지만,여러영상클래스를구분하는데눈이유용한특징임을학습했습니다。기존의머신러닝방식에서는종종문제에맞게특징을수동으로설계했지만심층컨벌루션신경망은스스로유용한특징을학습할수있습니다。예를들어,신경망이눈을식별하는법을학습하면실제표범과표범무늬러그를구분할수있습니다。

참고항목

||

관련항목