이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
컨벌루션 신경망의 특징 시각화하기
이 예제에서는 컨벌루션 신경망이 학습한 특징을 시각화하는 방법을 보여줍니다.
컨벌루션 신경망은특징을 사용하여 영상을 분류합니다. 신경망은 훈련 과정에서 이러한 특징을 학습합니다. 신경망이 훈련하면서 무엇을 학습하는지 명확히 알 수 없는 경우가 있습니다. 이때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'
channels
를1: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에 해당합니다.channels
를1: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’ 클래스에 대해 생성된 영상은 작은 탑과 창문을 포함합니다.
참고 항목
googlenet
|deepDreamImage
|occlusionSensitivity
|gradCAM
|imageLIME