Saliency Maps
Los mapas de saliencia son mapas de calor que puntúan cuánto ha influido cada píxel en la predicción de un modelo. Incluye métodos basados en gradientes, CAM y perturbaciones, así como sus límites y usos.
Un mapa de saliencia es un mapa de calor que asigna una puntuación a la influencia que ha tenido cada píxel de una imagen de entrada en la salida de una red neuronal, normalmente en la puntuación de una clase predicha. Es una de las herramientas más comunes de la IA explicable (XAI) en visión artificial: un mapa que resalta el objeto respalda la predicción, mientras que uno que resalta una marca de agua, el fondo o el borde de la imagen revela un atajo. Un mapa de saliencia relaciona la salida con los píxeles de entrada, lo que lo distingue de los mapas de características internos de la red y de los pesos de atención de un Transformer de visión, que muestran dónde recopila información una capa. En la investigación sobre percepción, el término tiene un significado relacionado: un mapa de los puntos hacia los que se dirigen los ojos humanos en una escena, como en el modelo de atención visual de Itti y Koch.
Cómo funciona la saliencia basada en gradientes#
El mapa de saliencia por gradientes de Simonyan, Vedaldi y Zisserman (2013) utiliza la retropropagación para calcular el gradiente de la puntuación de una clase con respecto a la imagen de entrada, en lugar de con respecto a los pesos del modelo. La magnitud del gradiente en un píxel indica cuánto cambiaría la puntuación ante un pequeño cambio en ese punto, y el mayor valor absoluto de los tres canales de color proporciona un valor por píxel. Para un clasificador de ImageNet, cuesta una pasada hacia delante y otra hacia atrás en 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 y guarda un mapa granuloso de 224 × 224 del recorte central que ha procesado el clasificador: los gradientes sin procesar presentan ruido de un píxel a otro, que los métodos posteriores reducen mediante promedios o trabajando con mapas de características.
Métodos de saliencia#
- SmoothGrad: Promediar los mapas de gradientes de muchas copias de la imagen con ruido añadido elimina gran parte del granulado.
- Gradientes integrados: Acumular los gradientes a lo largo de un recorrido desde una referencia, como una imagen negra, hasta la entrada hace que las puntuaciones de los píxeles sumen la diferencia entre las puntuaciones de las dos clases.
- Grad-CAM: Ponderar los mapas de características de la última capa convolucional por sus gradientes medios y ampliar el resultado produce regiones aproximadas, pero específicas de cada clase. LayerCAM (2021) pondera cada posición por separado, de modo que las capas anteriores, de mayor resolución, también producen mapas útiles.
- Oclusión y otros métodos de perturbación: Ocultar partes de la imagen y medir cuánto baja la puntuación no requiere gradientes, pero cuesta una pasada hacia delante por cada parte.
Ultralytics YOLO calcula mapas LayerCAM para la detección de objetos y otras tareas: con visualize=True en modo de predicción, pondera cada posición de los mapas de características que entran en la cabeza de detección según su gradiente positivo respecto a la puntuación de clase de cada predicción con confianza alta, y guarda un mapa de calor combinado por imagen.
from ultralytics import YOLO
# Guarda un mapa de calor LayerCAM de las evidencias en las que se basan las detecciones de YOLO26
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg", visualize=True)Escribe bus_cam.jpg en el directorio de guardado de la ejecución para explicar hasta las 16 predicciones sin procesar más destacadas de YOLO26 que superan el umbral de confianza, antes de que NMS elimine los duplicados; si añades classes=[0], solo genera mapas de las personas.
Limitaciones de los mapas de saliencia#
Un mapa de saliencia muestra a qué es sensible la salida, no cómo razona el modelo, que es el objetivo de la interpretabilidad mecanicista. Las pruebas de cordura de Adebayo y sus colaboradores de 2018 descubrieron que algunos métodos populares, como la retropropagación guiada, producen mapas prácticamente iguales después de aleatorizar los pesos del modelo; por tanto, esos mapas reflejan más los bordes de la imagen que el modelo entrenado. Los mapas también pueden cambiar bruscamente ante pequeñas perturbaciones de entrada que no alteran la predicción.
Aplicaciones en el mundo real#
- Detección de atajos: Los mapas de calor mostraron que un clasificador entrenado con el conjunto de datos PASCAL VOC reconocía los caballos, en parte, por una etiqueta de derechos de autor que aparecía en muchas fotos de caballos; un comportamiento de «Clever Hans» que su precisión no revelaba.
- Diagnóstico por imagen: Los desarrolladores de clasificadores de radiografías de tórax comprueban que las evidencias estén en los pulmones y no en el texto del escáner o en dispositivos de tratamiento, como los tubos de drenaje torácico, en los que se ha demostrado que se basan los clasificadores de neumotórax.
- Recorte de imágenes: Twitter recortaba las vistas previas de las imágenes en torno al punto donde un modelo de saliencia basado en la atención humana predecía que mirarían primero los espectadores, y una auditoría de 2021 de los investigadores de la empresa descubrió que los recortes favorecían sistemáticamente a algunos grupos de personas frente a otros.










