Main Content

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

컨벌루션 신경망의 특징 시각화하기

이 예제에서는 컨벌루션 신경망이 학습한 특징을 시각화하는 방법을 보여줍니다.

컨벌루션 신경망은특징을 사용하여 영상을 분류합니다. 신경망은 훈련 과정에서 이러한 특징을 학습합니다. 신경망이 훈련하면서 무엇을 학습하는지 명확히 알 수 없는 경우가 있습니다. 이때deepDreamImage함수를 사용하면 학습된 특징을 시각화할 수 있습니다.

컨벌루션계층은 3차원 활성화 볼륨을 출력하며, 여기서 3차원을 따라 있는 슬라이스가 계층 입력에 적용되는 단일 필터에 해당합니다. 신경망의 끝부분에 있는완전 연결계층이 출력하는 채널은이전 계층에서 학습한 특징들의 상위 수준 조합에 해당합니다.

deepDreamImage를 사용하여 신경망 계층의 특정 채널을 강하게 활성화하는 영상을 생성하면 학습된 특징을 시각화할 수 있습니다.

이 예제를 실행하려면 Deep Learning Toolbox™와 Deep Learning Toolbox Modelfor GoogLeNet Network지원 패키지가 필요합니다.

사전 훈련된 신경망 불러오기

사전 훈련된 GoogLeNet 신경망을 불러옵니다.

net = googlenet;

앞쪽에 있는 컨벌루션 계층 시각화하기

GoogLeNet신경망에는여러개의컨벌루션계층이있습니다。신경망의시작부분에있는 컨벌루션 계층은 수용 영역의 크기가 작아서 하위 수준의 작은 특징을 학습합니다. 신경망의 끝부분에 있는 계층은 수용 영역의 크기가 더 크며 따라서 더 큰 특징을 학습합니다.

analyzeNetwork를 사용하여 신경망 아키텍처를 표시하고 컨벌루션 계층을 찾습니다.

analyzeNetwork(net)

컨벌루션 계층 1에서 학습하는 특징

layer가 첫 번째 컨벌루션 계층이 되도록 설정합니다. 이 계층은 신경망의 두 번째 계층이며 이름이'conv1-7x7_s2'입니다.

layer = 2; name = net.Layers(layer).Name
name = 'conv1-7x7_s2'

channels1:36인덱스 벡터로 설정하고deepDreamImage를 사용하여 이 계층이 학습한 처음 36개의 특징을 시각화합니다. 영상이 스케일링되지 않도록'PyramidLevels'를 1로 설정합니다. 영상을 모두 한꺼번에 표시하려면imtile을 사용할 수 있습니다.

기본적으로deepDreamImage는 사용 가능한 경우 호환되는 GPU를 사용합니다. GPU가 없으면 CPU를 사용합니다. GPU를 사용하려면 Parallel Computing Toolbox™와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은릴리스별 GPU 지원(Parallel Computing Toolbox)항목을참조하십시오。

channels = 1:36; I = deepDreamImage(net,name,channels,...'PyramidLevels',1);
|==============================================| | Iteration | Activation | Pyramid Level | | | Strength | | |==============================================| | 1 | 0.26 | 1 | | 2 | 6.99 | 1 | | 3 | 14.24 | 1 | | 4 | 21.49 | 1 | | 5 | 28.74 | 1 | | 6 | 35.99 | 1 | | 7 | 43.24 | 1 | | 8 | 50.50 | 1 | | 9 | 57.75 | 1 | | 10 | 65.00 | 1 | |==============================================|
figure I = imtile(I,'ThumbnailSize',[64 64]); imshow(I) title(['Layer ',name,' Features'],'Interpreter','none')

위 영상은 대부분 경계와 색을 포함하고 있는데, 이를 통해 계층'conv1-7x7_s2'의필터가 경계 검출기이자 색 필터임을 알 수 있습니다.

컨벌루션 계층 2에서 학습하는 특징

두 번째 컨벌루션 계층의 이름은'conv2-3x3_reduce'이며 계층 6에 해당합니다.channels1:36인덱스 벡터로 설정하고 이 계층이 학습한 처음 36개의 특징을 시각화합니다.

최적화 과정에 대한 상세한 출력이 표시되지 않도록 하려면deepDreamImage.를 호출할 때'Verbose''false'로 설정하십시오.

layer = 6; name = net.Layers(layer).Name
name = 'conv2-3x3_reduce'
channels = 1:36; I = deepDreamImage(net,name,channels,...'Verbose',false,...'PyramidLevels',1); figure I = imtile(I,'ThumbnailSize',[64 64]); imshow(I) name = net.Layers(layer).Name; title(['Layer ',name,' Features'],'Interpreter','none')

이 계층의 필터는 첫 번째 컨벌루션 계층보다 더 복잡한 패턴을 검출합니다.

심층 컨벌루션 계층 시각화하기

심층 계층은 앞쪽 계층에서 학습한 특징들의 상위 수준 조합을 학습합니다.

피라미드 단계의 개수와 피라미드 단계당 반복 횟수를 늘리면 더욱 상세한 영상을 생성할 수 있습니다. 단, 이때 연산량은 늘어납니다.'NumIterations'옵션을 사용하여 반복 횟수를 늘리고 'PyramidLevels' 옵션을 사용하여 피라미드 단계 수를 늘릴 수 있습니다.

layer = 97; name = net.Layers(layer).Name
name = 'inception_4e-1x1'
channels = 1:6; I = deepDreamImage(net,name,channels,...'Verbose',false,..."NumIterations",20,...'PyramidLevels',2); figure I = imtile(I,'ThumbnailSize',[250 250]); imshow(I) name = net.Layers(layer).Name; title(['Layer ',name,' Features'],'Interpreter','none')

신경망의 계층이 깊어질수록 복잡한 패턴과 텍스처를 학습한 더 자세한 필터가 생성되는 것을 알 수 있습니다.

완전 연결 계층 시각화하기

각 클래스와 가장 근접한 영상을 생성하려면 완전 연결 계층을 선택하고channels를 각 클래스의 인덱스로 설정하십시오.

완전 연결 계층(계층 142)을 선택합니다.

layer = 142; name = net.Layers(layer).Name
name = 'loss3-classifier'

channels를 시각화하려는 클래스 이름의 인덱스로 설정하여 해당 클래스를 선택합니다.

channels = [114 293 341 484 563 950];

클래스는 출력 계층(마지막 계층)의Classes속성에 저장되어 있습니다. 선택한 클래스의 이름을 보려면channels의항목을 선택합니다.

net.Layers(end).Classes(channels)
ans =6×1 categoricalsnail tiger zebra castle fountain strawberry

이러한 클래스를 강하게 활성화하는 상세한 영상을 생성합니다. 더욱 상세한 영상이 생성되도록deepDreamImage를 호출할 때'NumIterations'를 100으로 설정합니다. 완전 연결 계층에서 생성된 영상이 영상 클래스에 해당합니다.

I = deepDreamImage(net,name,channels,...'Verbose',false,...'NumIterations', 100,...'PyramidLevels',2); figure I = imtile(I,'ThumbnailSize',[250 250]); imshow(I) name = net.Layers(layer).Name; title(['Layer ',name,' Features'])

생성된 영상은 선택된 클래스를 강하게 활성화합니다. ‘zebra’ 클래스에 대해 생성된 영상은 뚜렷한 얼룩말 줄무늬를 포함하며, ‘castle’ 클래스에 대해 생성된 영상은 작은 탑과 창문을 포함합니다.

참고 항목

||||

관련 항목