728x90
- Model은 이전 VGG11을 사용
Computation gradient score
def compute_gradient_score(score, image):
"""
score: model의 output으로부터 얻은 maximum score
"""
s_y = score
s_y.backward() # backpropagation
grad = image.grad # computed gradient
return grad[0]
Visualize saliency map
- 가장 점수가 높은 클래스에 대한 gradient를 backpropagation을 통해 계산
- Variable(requires_grad=True)로 input된 image는 backpropagation으로 saliency한 부분들을 extraction할 수 있다.
def visualize_saliency(image, model):
input = Variable(image.unsqueeze(0), requires_grad=True) # for compute gradient
output = model(input)[0] # output shape: (number of class,)
max_score, _ = torch.max(output, 0)
grad = compute_gradient_score(max_score, input) # computed gradient
vis = grad ** 2 # 가장 saliency한 부분을 시각화하기 위함
vis, _ = torch.max(vis, 0) # maximum channel
return vis
Main
saliency_map = visualize_saliency(image, model)
728x90