Saliency Maps
Os mapas de saliência são mapas de calor que indicam quanto cada píxel influenciou a previsão de um modelo. Métodos baseados em gradientes, CAM e perturbações, as suas limitações e aplicações.
Um mapa de saliência é um mapa de calor que avalia quanto cada píxel de uma imagem de entrada influenciou a saída de uma rede neural, geralmente a pontuação de uma classe prevista. É uma das ferramentas mais comuns de IA explicável (XAI) em visão computacional: um mapa que destaca o objeto dá suporte à previsão, enquanto um que destaca uma marca de água, o fundo ou a borda da imagem revela um atalho. Um mapa de saliência relaciona a saída aos píxeis de entrada, o que o distingue dos mapas de características internos de uma rede e dos pesos de atenção de um transformer de visão, que mostram onde uma camada recolhe informações. A investigação sobre perceção usa o termo para uma ideia relacionada: um mapa dos pontos para os quais os olhos humanos são atraídos numa cena, como no modelo de atenção visual de Itti-Koch.
Como funciona a saliência por gradiente#
O mapa de saliência por gradiente de Simonyan, Vedaldi e Zisserman (2013) usa a retropropagação para calcular o gradiente de uma pontuação de classe em relação à imagem de entrada, em vez de aos pesos do modelo. A magnitude do gradiente num píxel indica quanto uma pequena alteração nesse ponto mudaria a pontuação, e o maior valor absoluto entre os três canais de cor fornece um valor por píxel. Para um classificador ImageNet, o cálculo exige uma passagem para a frente e outra para trás no 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]}")Imprime Explained class: minibus e guarda um mapa granulado de 224 × 224 do recorte central visto pelo classificador: os gradientes brutos são ruidosos de píxel para píxel, um efeito que os métodos posteriores reduzem calculando médias ou trabalhando com mapas de características.
Métodos de saliência#
- SmoothGrad: Calcular a média dos mapas de gradientes de várias cópias da imagem com ruído adicionado elimina grande parte do granulado.
- Gradientes integrados: Acumular gradientes ao longo de um percurso desde uma referência, como uma imagem preta, até à entrada faz com que as pontuações dos píxeis correspondam à diferença entre as pontuações das duas classes.
- Grad-CAM: Ponderar os mapas de características da última camada convolucional pela média dos seus gradientes e aumentar a resolução do resultado produz regiões grosseiras, mas específicas da classe. O LayerCAM (2021) pondera cada posição separadamente, pelo que as camadas anteriores, de maior resolução, também produzem mapas úteis.
- Oclusão e outros métodos de perturbação: Ocultar partes da imagem e medir quanto a pontuação diminui dispensa gradientes, mas exige uma passagem para a frente por parte.
O Ultralytics YOLO calcula mapas LayerCAM para deteção de objetos e outras tarefas: com visualize=True no modo de previsão, pondera cada posição dos mapas de características que entram na cabeça de deteção de acordo com o gradiente positivo em relação à pontuação de classe de cada previsão confiante e guarda um mapa de calor combinado por imagem.
from ultralytics import YOLO
# Guardar um mapa de calor LayerCAM das evidências por trás das deteções do YOLO26
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg", visualize=True)Guarda bus_cam.jpg no diretório de gravação da execução, que explica até 16 das previsões brutas mais fortes do YOLO26 acima do limiar de confiança, antes de o NMS remover as duplicatas; acrescentar classes=[0] gera mapas apenas para as pessoas.
Limitações dos mapas de saliência#
Um mapa de saliência mostra onde a saída é sensível, não como o modelo raciocina — esse é o objetivo da interpretabilidade mecanística. As verificações de sanidade de Adebayo e colegas, de 2018, constataram que alguns métodos populares, como a retropropagação guiada, produzem mapas quase idênticos mesmo depois de se aleatorizarem os pesos do modelo; assim, esses mapas refletem mais as bordas da imagem do que o modelo treinado. Os mapas também podem mudar acentuadamente com pequenas perturbações da entrada que não alteram a previsão.
Aplicações no mundo real#
- Deteção de atalhos: Os mapas de calor mostraram que um classificador treinado com o conjunto de dados PASCAL VOC reconhecia cavalos, em parte, através de uma indicação de direitos de autor presente em muitas fotografias de cavalos — um comportamento do tipo «Hans, o Esperto» invisível na sua precisão.
- Imagiologia médica: Os programadores de classificadores de radiografias torácicas verificam se as evidências estão nos pulmões, e não no texto do scanner ou em dispositivos de tratamento, como drenos torácicos, nos quais já se demonstrou que os classificadores de pneumotórax se baseiam.
- Recorte de imagens: O Twitter recortava pré-visualizações de imagens em torno do ponto para onde um modelo de saliência da atenção humana previa que os utilizadores olhariam primeiro; uma auditoria de 2021 dos investigadores da empresa concluiu que os recortes favoreciam sistematicamente alguns grupos de pessoas em detrimento de outros.










