Deep Learning

[CV] Extraction Saliency Map

ju_young 2022. 2. 18. 16:02
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)

Result

 

728x90