31. Interpretación de modelos de visión (Grad-CAM)

31.1 Introducción

Hasta aquí nos concentramos principalmente en construir modelos, entrenarlos, evaluarlos y aplicarlos a tareas como clasificación, detección y segmentación. Pero todavía falta una pregunta muy importante: ¿por qué el modelo tomó cierta decisión?

En muchos casos, una predicción correcta no es suficiente. Queremos entender qué regiones de la imagen influyeron en la salida del sistema, si el modelo realmente está mirando el objeto correcto o si se apoya en pistas espurias del fondo.

En este tema introduciremos una de las técnicas más conocidas de interpretabilidad visual para CNN: Grad-CAM. La idea es obtener mapas de calor que nos ayuden a ver qué zonas de la imagen fueron más relevantes para una predicción determinada.

31.2 ¿Por qué importa la interpretabilidad?

La interpretabilidad no es solo una curiosidad académica. Resulta útil por varias razones:

  • Permite depurar errores del modelo.
  • Ayuda a detectar sesgos o atajos indeseados.
  • Facilita explicar predicciones a otras personas.
  • Aumenta la confianza en aplicaciones sensibles.

Si un modelo acierta, pero lo hace por razones equivocadas, ese problema puede permanecer oculto si solo miramos accuracy o pérdida.

31.3 El problema de la “caja negra”

Las CNN profundas suelen comportarse como sistemas muy potentes, pero difíciles de interpretar directamente. Podemos ver sus entradas y salidas, pero no siempre es obvio qué regiones visuales o qué patrones internos explican una decisión particular.

Grad-CAM no resuelve mágicamente toda esa opacidad, pero ofrece una ventana muy valiosa hacia la atención espacial del modelo.

Grad-CAM no explica toda la lógica interna de una red, pero sí ayuda a responder una pregunta clave: ¿qué zonas de la imagen contribuyeron más a esta predicción?

31.4 Qué es Grad-CAM

Grad-CAM significa Gradient-weighted Class Activation Mapping. Es una técnica que usa gradientes y activaciones de una capa convolucional para construir un mapa de calor asociado a una clase específica.

Ese mapa de calor destaca regiones de la imagen que influyeron más en la predicción de esa clase.

31.5 Intuición básica

La intuición es la siguiente:

  • Las capas convolucionales conservan estructura espacial.
  • Las activaciones de esas capas indican qué patrones aparecen en distintas zonas.
  • Los gradientes nos dicen qué activaciones son más importantes para una clase concreta.

Al combinar ambas cosas, podemos estimar qué regiones espaciales del mapa de características fueron más relevantes para la decisión del modelo.

31.6 ¿Por qué se usa una capa convolucional profunda?

Grad-CAM suele aplicarse sobre una capa convolucional relativamente profunda porque allí las activaciones ya codifican patrones de alto nivel, pero todavía conservan cierta estructura espacial.

Si fuéramos demasiado al principio de la red, tendríamos patrones muy locales y poco semánticos. Si fuéramos demasiado al final, quizá ya habríamos perdido detalle espacial útil.

31.7 Qué produce Grad-CAM

El resultado típico es un mapa de calor superpuesto sobre la imagen original. Las regiones más intensas indican mayor contribución a la clase analizada.

Esto no significa “certeza absoluta” ni una segmentación exacta del objeto. Es una señal de relevancia espacial aproximada, no una máscara perfecta.

31.8 Qué preguntas puede ayudar a responder

Grad-CAM puede ser útil para investigar preguntas como:

  • ¿El modelo está mirando el objeto correcto?
  • ¿Se apoya demasiado en el fondo?
  • ¿La predicción parece razonable o sospechosa?
  • ¿Dos clases distintas activan zonas distintas?

31.9 Qué no debe interpretarse de forma exagerada

Grad-CAM es muy valioso, pero no debe interpretarse como si revelara toda la “explicación causal” del modelo. Es una herramienta de interpretabilidad aproximada.

Puede orientar el análisis, ayudar a detectar problemas y aportar intuición, pero no reemplaza una evaluación rigurosa ni constituye una prueba perfecta del razonamiento interno de la red.

31.10 La lógica general del cálculo

De forma simplificada, Grad-CAM sigue estos pasos:

  1. Se hace un forward sobre la imagen.
  2. Se elige una clase objetivo.
  3. Se calcula el gradiente de esa clase respecto de una capa convolucional.
  4. Se promedian gradientes por canal para obtener pesos.
  5. Se combina esos pesos con las activaciones de la capa.
  6. Se aplica ReLU y se reescala el resultado.

No hace falta memorizar cada detalle matemático aquí. Lo importante es entender la idea: usar gradientes para ponderar la importancia de mapas de características.

31.11 El papel de los gradientes

Los gradientes indican cuánto influye un cambio en cierta activación sobre la puntuación de la clase elegida. Si un canal tiene gradientes altos, significa que fue importante para esa predicción.

Grad-CAM usa justamente esa información para decidir qué mapas de activación deben pesar más en el mapa final.

31.12 El papel de las activaciones

Las activaciones de la capa convolucional describen dónde aparecen ciertos patrones visuales. Por sí solas no dicen qué clase las necesita más. Los gradientes aportan esa conexión con la predicción específica.

La combinación entre activaciones y gradientes es lo que da sentido a Grad-CAM.

31.13 ReLU en el mapa final

En la formulación habitual de Grad-CAM se aplica una ReLU al mapa resultante para quedarse con las contribuciones positivas hacia la clase de interés. La intuición es centrarse en regiones que empujan la predicción en esa dirección, en lugar de mezclar también evidencia negativa.

31.14 Superposición sobre la imagen original

Una vez obtenido el mapa, suele reescalarse al tamaño de la imagen y superponerse como un mapa de calor semitransparente. Esto hace la interpretación mucho más intuitiva, porque permite comparar directamente la atención del modelo con la estructura visual de la escena.

31.15 Un ejemplo conceptual

Imaginemos una imagen con un perro sobre césped. El clasificador predice “perro”. Si el Grad-CAM resalta principalmente la silueta del animal, eso da cierta tranquilidad. Si en cambio activa sobre todo el pasto o un rincón del fondo, puede indicar que el modelo está usando pistas accidentales.

Este tipo de análisis es especialmente útil para detectar atajos visuales indeseados.

31.16 Casos donde Grad-CAM es especialmente útil

Grad-CAM suele ser muy útil cuando:

  • Queremos inspeccionar un clasificador de imágenes.
  • Necesitamos comunicar visualmente el comportamiento del modelo.
  • Buscamos depurar errores sistemáticos.
  • Queremos comparar qué mira el modelo en distintas clases.

31.17 Relación con mapas de activación anteriores

Existen técnicas anteriores como CAM, pero Grad-CAM resultó especialmente influyente porque es más flexible y puede aplicarse a una variedad más amplia de arquitecturas basadas en gradientes, sin exigir exactamente la misma estructura final del modelo.

31.18 Grad-CAM en PyTorch

En PyTorch, implementar Grad-CAM implica capturar:

  • Las activaciones de cierta capa.
  • Los gradientes de esa misma capa respecto de la clase objetivo.

Esto suele hacerse usando hooks o bibliotecas auxiliares que encapsulan el proceso.

31.19 La idea de los hooks

Los hooks permiten interceptar información durante el forward o backward. En este caso, sirven para guardar activaciones y gradientes de la capa elegida.

No hace falta dominar todos sus detalles aún, pero conviene saber que son una herramienta importante de introspección en PyTorch.

31.20 Una implementación manual es posible, pero no siempre necesaria

Grad-CAM puede implementarse manualmente, pero para fines prácticos muchas veces conviene usar bibliotecas ya preparadas. Eso reduce errores y permite enfocarse más en la interpretación que en los detalles de bajo nivel.

31.21 Ejemplo conceptual con una biblioteca auxiliar

Una forma moderna y bastante cómoda de trabajar con Grad-CAM puede verse así:

import torch
from PIL import Image
from torchvision import models
from torchvision.models import ResNet18_Weights
from pytorch_grad_cam import GradCAM
from pytorch_grad_cam.utils.image import show_cam_on_image

weights = ResNet18_Weights.DEFAULT
model = models.resnet18(weights=weights)
model.eval()

target_layer = model.layer4[-1]
cam = GradCAM(model=model, target_layers=[target_layer])

imagem = Image.open("foto1.jpg").convert("RGB")
preprocess = weights.transforms()
input_tensor = preprocess(imagem).unsqueeze(0)

grayscale_cam = cam(input_tensor=input_tensor)[0]
print(grayscale_cam.shape)

Este ejemplo muestra la lógica general: elegir un modelo, seleccionar una capa objetivo y obtener un mapa Grad-CAM para la entrada.

31.22 ¿Qué capa elegir?

La elección de la capa objetivo importa mucho. En una ResNet, una opción frecuente es usar el último bloque convolucional profundo, por ejemplo en layer4.

La razón es que allí la red ya codifica rasgos semánticos potentes, pero todavía mantiene cierta estructura espacial útil para producir el mapa.

31.23 Interpretación correcta del mapa

Si el mapa Grad-CAM se concentra sobre el objeto relevante, eso sugiere que la red está utilizando una evidencia visual razonable. Si activa zonas irrelevantes, eso puede ser una señal de problema.

Pero siempre hay que interpretar el resultado con prudencia: un mapa visualmente plausible no garantiza por sí solo que el modelo sea robusto o causalmente correcto.

31.24 Limitaciones de Grad-CAM

Entre sus limitaciones más importantes están:

  • La resolución espacial del mapa suele ser limitada.
  • No explica toda la lógica interna del modelo.
  • Puede ser sensible a la capa elegida.
  • Una visualización llamativa no siempre implica una explicación completa.

Por eso Grad-CAM debe verse como una ayuda interpretativa, no como una verdad absoluta sobre el modelo.

31.25 Errores comunes al usar Grad-CAM

Algunos errores frecuentes son:

  • Elegir una capa poco adecuada.
  • Interpretar el mapa como si fuera una segmentación precisa.
  • Confiar en una sola visualización aislada.
  • Ignorar que el mapa depende de la clase objetivo.

31.26 Qué debes recordar de este tema

  • Grad-CAM es una técnica de interpretabilidad visual para modelos convolucionales.
  • Su objetivo es destacar qué regiones de la imagen influyeron en una predicción concreta.
  • Combina activaciones y gradientes de una capa convolucional profunda.
  • Es útil para depurar, comunicar y analizar el comportamiento espacial del modelo.
  • No reemplaza la evaluación cuantitativa ni explica por completo toda la lógica interna de la red.

31.27 Conclusión

La interpretabilidad con técnicas como Grad-CAM agrega una dimensión muy valiosa al trabajo con modelos de visión por computadora. Ya no se trata solo de saber si el modelo acierta, sino también de examinar qué regiones parecen estar guiando sus decisiones.

Esto ayuda a detectar sesgos, errores de razonamiento y dependencias espurias que podrían pasar desapercibidas si solo observamos métricas globales. En contextos reales, esa capacidad de inspección puede ser tan importante como la precisión misma.

En el próximo tema nos enfocaremos en otro aspecto muy práctico: la optimización de modelos de visión por computadora, donde veremos cómo mejorar eficiencia, velocidad y viabilidad de despliegue.