Main Content

딥러닝이 내린 결정에 대한 이유를 설명해 주는 Grad-CAM

이 예제에서는 Grad-CAM(gradient-weighted class activation mapping: 기울기 가중 클래스 활성화 매핑) 기법을 사용하여 딥러닝 신경망이 어떤 근거로 분류 결정을 내렸는지 이해하는 방법을 보여줍니다. Grad-CAM은 Selvaraju와 공동 저자[1]가 발명한 것으로, 영상을 분류할 때 입력 영상의 어느 부분이 가장 중요했는지 이해하기 위해 신경망이 판별한 컨벌루션 특징에 대한 분류 점수의 기울기를 사용합니다. 이 예제에서는 영상에 사전 훈련된 GoogLeNet 신경망을 사용합니다.

Grad-CAM은 CAM(클래스 활성화 매핑) 기법을 일반화한 방법입니다. 라이브 웹캠 데이터에 활성화 매핑 기법을 사용하는 방법은 Investigate Network Predictions Using Class Activation Mapping 항목을 참조하십시오. Grad-CAM은 회귀 또는 의미론적 분할과 같은 비분류 예제에 적용할 수도 있습니다. Grad-CAM을 사용하여 의미론적 분할 신경망의 예측을 조사하는 방법을 보여주는 예제는 Explore Semantic Segmentation Network Using Grad-CAM 항목을 참조하십시오.

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

GoogLeNet 신경망을 불러옵니다.

[net,classNames] = imagePretrainedNetwork("googlenet");

영상 분류하기

GoogLeNet 영상 크기를 읽습니다.

inputSize = net.Layers(1).InputSize(1:2);

이 예제에 포함된 골든 리트리버 영상 sherlock.jpg를 불러옵니다.

img = imread("sherlock.jpg");

신경망의 입력 차원에 맞게 영상 크기를 조정합니다.

img = imresize(img,inputSize);

단일 관측값 입력에 대해 predict 함수를 사용하여 예측을 수행합니다. GPU를 사용하여 예측을 수행하려면 먼저 데이터를 gpuArray로 변환합니다. GPU에서 예측을 수행하려면 Parallel Computing Toolbox™ 라이선스와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오.

if canUseGPU
    X = gpuArray(img);
end

scores = predict(net,single(img));
Y = scores2label(scores,classNames);

imshow(img);
title(Y);

Figure contains an axes object. The axes object with title golden retriever contains an object of type image.

GoogLeNet이 영상을 골든 리트리버로 올바르게 분류했습니다. 그런데 이유가 무엇일까요? 신경망은 영상의 어떤 특성을 보고 이렇게 분류한 것일까요?

Grad-CAM을 통해 이유를 설명하기

Grad-CAM 기법은 마지막 컨벌루션 특징 맵에 대한 분류 점수의 기울기를 이용하여 입력 영상의 어느 부분이 분류 점수에 가장 큰 영향을 미쳤는지 알려줍니다. 이 기울기가 큰 부분이 바로 해당 데이터에서 최종 점수를 가장 크게 좌우한 부분입니다.

gradCAM 함수는 컨벌루션 특징 맵으로부터 해당 클래스에 대한 축소 계층 출력의 도함수를 취해서 중요도 맵을 계산합니다. 분류 작업의 경우 gradCAM 함수는 중요도 맵을 계산하는 데 적합한 계층을 자동으로 선택합니다. 'ReductionLayer''FeatureLayer' 이름-값 인수를 사용하여 계층을 지정할 수도 있습니다.

Grad-CAM 맵을 계산합니다.

channel = find(Y == categorical(classNames));
map = gradCAM(net,img,channel);

'AlphaData' 값으로 0.5를 사용하여 영상 위에 Grad-CAM 맵을 표시합니다. 'jet' 컬러맵은 진한 파란색이 가장 낮은 값이고 진한 빨간색이 가장 높은 값입니다.

imshow(img);
hold on;
imagesc(map,'AlphaData',0.5);
colormap jet
hold off;
title("Grad-CAM");

Figure contains an axes object. The axes object with title Grad-CAM contains 2 objects of type image.

개의 얼굴 윗부분과 귀 부분이 분류에 가장 큰 영향을 미치는 것을 확실히 알 수 있습니다.

심층 신경망 분류에 대한 이유를 조사할 수 있는 다른 접근 방식은 occlusionSensitivityimageLIME 항목을 참조하십시오.

참고 문헌

[1] Selvaraju, R. R., M. Cogswell, A. Das, R. Vedantam, D. Parikh, and D. Batra. "Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization." In IEEE International Conference on Computer Vision (ICCV), 2017, pp. 618–626. Available at Grad-CAM on the Computer Vision Foundation Open Access website.

참고 항목

| | |

관련 항목