Saliency Maps
살리언시 맵은 각 픽셀이 모델의 예측에 미친 영향을 점수로 나타내는 히트맵입니다. 그래디언트, CAM 및 교란 기반 방법과 한계, 활용 사례를 다룹니다.
살리언시 맵은 입력 이미지의 각 픽셀이 신경망의 출력에 얼마나 영향을 미쳤는지, 보통 예측 클래스 하나의 점수를 바탕으로 나타내는 히트맵입니다. 이는 컴퓨터 비전 분야에서 가장 흔히 사용하는 설명 가능한 AI(XAI) 도구 중 하나입니다. 객체 부분이 밝게 표시되면 예측을 뒷받침하는 근거가 되고, 워터마크·배경·이미지 테두리가 밝게 표시되면 지름길에 의존했음을 드러냅니다. 살리언시 맵은 출력을 입력 픽셀과 연결한다는 점에서 신경망의 내부 특징 맵이나 비전 트랜스포머의 어텐션 가중치와 다릅니다. 특징 맵은 내부 표현을, 어텐션 가중치는 레이어가 정보를 수집하는 위치를 보여줍니다. 지각 연구에서는 이와 관련된 개념으로, Itti-Koch 모델의 시각적 주의처럼 장면에서 사람의 시선이 향하는 위치를 나타내는 맵을 가리키기도 합니다.
그래디언트 살리언시의 작동 방식#
Simonyan, Vedaldi, Zisserman이 2013년에 제안한 그래디언트 살리언시 맵은 역전파를 사용해 모델 가중치가 아니라 입력 이미지에 대한 클래스 점수 하나의 그래디언트를 계산합니다. 픽셀에서의 그래디언트 크기는 해당 픽셀을 조금 바꾸면 점수가 얼마나 크게 달라지는지 나타냅니다. 세 가지 색상 채널에서 절댓값이 가장 큰 값을 선택하면 픽셀마다 값 하나를 얻습니다. ImageNet 분류 모델에서는 PyTorch에서 순전파와 역전파를 각각 한 번 수행하면 됩니다.
import urllib.request
from PIL import Image
from torchvision.models import ResNet50_Weights, resnet50
from torchvision.utils import save_image
# Load an ImageNet classifier and track gradients on the input pixels
weights = ResNet50_Weights.DEFAULT
model = resnet50(weights=weights).eval()
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg"))
x = weights.transforms()(image).unsqueeze(0).requires_grad_()
# Backpropagate the top class score to the pixels
scores = model(x)
top = scores.argmax().item()
scores[0, top].backward()
# Saliency: largest absolute gradient across the color channels, scaled for display
saliency = x.grad.abs().amax(dim=1)
save_image((saliency / saliency.quantile(0.99)).clamp(max=1), "saliency.png")
print(f"Explained class: {weights.meta['categories'][top]}")이 코드는 Explained class: minibus을 출력하고 분류 모델이 입력으로 받은 중앙 크롭의 224 × 224 거친 맵을 저장합니다. 원시 그래디언트는 픽셀 간 노이즈가 심하므로, 이후 방법에서는 값을 평균화하거나 특징 맵을 활용해 노이즈를 줄입니다.
살리언시 기법#
- SmoothGrad: 노이즈를 추가한 이미지 복사본 여러 개에서 그래디언트 맵을 평균화하면 점状 노이즈를 상당 부분 제거할 수 있습니다.
- 통합 그래디언트: 기준이 되는 검은 이미지 등에서 입력까지의 경로를 따라 그래디언트를 누적하면 픽셀 점수의 합이 두 클래스 점수의 차이와 같아집니다.
- Grad-CAM: 마지막 합성곱 레이어의 특징 맵에 평균 그래디언트를 가중치로 적용하고 결과를 업샘플링하면 거칠지만 클래스별로 구분되는 영역을 얻을 수 있습니다. LayerCAM(2021)은 각 위치에 개별적으로 가중치를 적용하므로, 더 이른 단계의 고해상도 레이어에서도 활용 가능한 맵을 얻을 수 있습니다.
- 오클루전 및 기타 교란 기법: 이미지 패치를 가리고 점수가 얼마나 떨어지는지 측정하면 그래디언트가 필요하지 않지만, 패치마다 순전파를 한 번씩 수행해야 합니다.
Ultralytics YOLO는 객체 탐지 및 기타 작업에서 LayerCAM 맵을 계산합니다. 예측 모드에서 visualize=True을 사용하면, 확신도 높은 예측 각각의 클래스 점수에 대한 양의 그래디언트를 바탕으로 탐지 헤드에 입력되는 특징 맵의 각 위치에 가중치를 적용하고 이미지마다 결합된 히트맵 하나를 저장합니다.
from ultralytics import YOLO
# YOLO26 탐지 결과의 근거를 보여주는 LayerCAM 히트맵 저장
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg", visualize=True)실행 결과 저장 디렉터리에 bus_cam.jpg을 기록하고, NMS가 중복을 제거하기 전에 신뢰도 임계값을 넘는 원시 YOLO26 예측 중 최대 16개의 가장 강한 예측을 설명합니다. classes=[0]을 추가하면 사람에 대한 맵만 표시합니다.
살리언시 맵의 한계#
살리언시 맵은 모델의 추론 방식을 보여주는 것이 아니라 출력에 민감한 위치를 보여줍니다. 모델의 추론 방식을 밝히는 것은 메커니즘 해석 가능성의 목표입니다. Adebayo와 동료들이 2018년에 수행한 타당성 검사에서는 가이드 역전파와 같은 일부 인기 기법이 모델 가중치를 무작위화한 뒤에도 거의 동일한 맵을 생성하는 것으로 나타났습니다. 따라서 이러한 맵은 학습된 모델보다 이미지의 경계를 더 많이 반영합니다. 예측은 바뀌지 않더라도 입력을 조금 교란하면 맵이 크게 달라질 수도 있습니다.
실제 적용 사례#
- 지름길 찾기: 히트맵 분석 결과, PASCAL VOC 데이터셋으로 학습한 분류 모델이 여러 말 사진에 나타난 저작권 태그를 일부 활용해 말을 인식하는 것으로 나타났습니다. 정확도만으로는 드러나지 않는 이러한 동작을 "클레버 한스" 현상이라고 합니다.
- 의료 영상: 흉부 X선 분류 모델 개발자는 근거가 스캐너 텍스트나 흉관 같은 치료 장치가 아니라 폐에 있는지 확인합니다. 기흉 분류 모델이 이러한 요소에 의존하는 것으로 드러난 사례가 있기 때문입니다.
- 이미지 크롭: Twitter는 인간 주의 살리언시 모델이 시청자가 처음에 볼 것으로 예측한 지점을 중심으로 이미지 미리보기를 잘랐습니다. 회사 연구진이 2021년에 실시한 감사 결과, 크롭이 특정 집단을 다른 집단보다 체계적으로 우대하는 것으로 나타났습니다.










