29. Introducción a segmentación de imágenes

29.1 Introducción

En detección de objetos aprendimos a localizar instancias con cajas rectangulares. Esa aproximación es muy útil, pero en muchos problemas no alcanza. A veces necesitamos una delimitación mucho más precisa, capaz de indicar exactamente qué píxeles pertenecen a cada objeto o región de interés.

Ahí aparece la segmentación de imágenes. En lugar de decir solo “hay un objeto aquí” mediante una caja, la segmentación busca producir una representación más fina, normalmente a nivel de píxel.

En este tema veremos qué significa segmentar, qué tipos principales de segmentación existen, por qué esta tarea es más exigente que la clasificación y la detección, y cómo se representa de forma general en visión por computadora moderna.

29.2 Qué significa segmentar

Segmentar una imagen significa asignar etiquetas a regiones o píxeles de la imagen para separar estructuras relevantes. Conceptualmente, se trata de dividir la imagen en partes con significado visual.

Dependiendo del problema, esas partes pueden representar:

  • Objetos completos.
  • Regiones de fondo y primer plano.
  • Clases semánticas distintas.
  • Instancias individuales de objetos.

29.3 Clasificación, detección y segmentación

Podemos comparar las tres tareas así:

  • Clasificación: qué hay en la imagen.
  • Detección: qué hay y aproximadamente dónde está.
  • Segmentación: qué hay y exactamente qué píxeles le pertenecen.

La segmentación ofrece un nivel de detalle superior, pero justamente por eso también implica más complejidad en el modelo, en los datos y en la evaluación.

Si la detección localiza con cajas, la segmentación localiza con máscaras mucho más precisas.

29.4 La idea de máscara

La representación más típica en segmentación es la máscara. Una máscara es una imagen o matriz donde cada píxel indica si pertenece o no a cierta región, o qué clase representa.

Por ejemplo, en un problema binario simple podríamos tener:

  • 0 para fondo.
  • 1 para objeto.

En problemas multiclase, cada valor puede corresponder a una categoría distinta.

29.5 Segmentación semántica

En segmentación semántica, cada píxel recibe una clase, pero no se distingue entre distintas instancias del mismo tipo de objeto.

Por ejemplo, si en una imagen hay tres autos, todos los píxeles de los autos pueden recibir simplemente la clase “auto”, sin separar cuál pertenece a cada vehículo individual.

29.6 Segmentación de instancias

En segmentación de instancias, en cambio, sí se distinguen objetos individuales. Si hay tres autos, cada uno debe tener su propia máscara separada.

Esto hace que la tarea sea más rica y más difícil, porque ya no basta con asignar clases por píxel: hay que separar instancias distintas dentro de la misma clase.

29.7 Segmentación panóptica

Existe además una formulación más amplia llamada segmentación panóptica, que intenta combinar lo mejor de ambos mundos: clases semánticas para toda la escena e identificación separada de cada instancia donde corresponda.

No la desarrollaremos en detalle aquí, pero conviene conocer el término porque aparece en literatura moderna.

29.8 ¿Por qué la segmentación es tan útil?

Porque en muchos problemas no alcanza con saber que hay un objeto ni con encerrarlo en una caja. Hace falta una delimitación fina. Eso ocurre, por ejemplo, en:

  • Imágenes médicas.
  • Análisis satelital.
  • Inspección industrial.
  • Conducción autónoma.
  • Edición visual y postprocesamiento.

En estas aplicaciones, la geometría precisa de la región es parte esencial del problema.

29.9 Ejemplo intuitivo

Imaginemos una radiografía donde queremos delimitar exactamente una lesión. Una caja rectangular sería demasiado gruesa. Lo importante no es solo señalar la zona general, sino identificar con precisión qué píxeles forman parte de la estructura de interés.

La segmentación responde mucho mejor a ese tipo de necesidad.

29.10 Anotaciones para segmentación

Como la salida es más fina, también las anotaciones del dataset son más costosas. En lugar de una clase global o una bounding box, necesitamos máscaras.

Eso implica más trabajo de etiquetado y también más cuidado en la calidad de las anotaciones.

29.11 Formato conceptual de una máscara

Una máscara semántica simple puede verse como una matriz del mismo tamaño que la imagen, donde cada píxel almacena una etiqueta. Por ejemplo:

0 = fondo
1 = carretera
2 = persona
3 = auto

La predicción del modelo debe aproximarse a esta estructura píxel por píxel.

29.12 La salida de un modelo de segmentación

En segmentación semántica, la salida del modelo suele ser un tensor donde, para cada píxel, se estiman puntajes para cada clase posible. Luego se toma la clase más probable en cada posición.

En otras palabras, el modelo produce una “clasificación por píxel”.

29.13 Por qué es más costosa que la clasificación

La segmentación exige predicciones densas sobre toda la imagen. No basta con un solo vector final. El modelo debe mantener y refinar información espacial con mucho más detalle.

Eso suele implicar:

  • Más memoria.
  • Más costo computacional.
  • Más exigencia en anotaciones.
  • Evaluaciones más complejas.

29.14 Arquitecturas típicas

En segmentación aparecen arquitecturas y familias muy conocidas, por ejemplo:

  • FCN
  • U-Net
  • DeepLab
  • Mask R-CNN para segmentación de instancias

Cada una resuelve de distinta forma el desafío de producir salidas densas y espacialmente precisas.

29.15 U-Net como ejemplo emblemático

Una de las arquitecturas más conocidas en segmentación, especialmente en imágenes biomédicas, es U-Net. Su idea central es combinar una ruta de contracción, que extrae contexto, con una ruta de expansión, que recupera detalle espacial.

Esto la vuelve especialmente adecuada cuando necesitamos precisión local fina.

29.16 Segmentación semántica como clasificación por píxel

Una forma útil de pensar esta tarea es imaginar que cada píxel debe clasificarse, pero no de manera aislada. La decisión para cada posición depende del contexto espacial amplio de la imagen.

Por eso los modelos de segmentación deben combinar información local y global al mismo tiempo.

29.17 Segmentación de instancias y detección

La segmentación de instancias está conceptualmente cerca de la detección, porque también debe separar objetos individuales. La diferencia es que en lugar de devolver solo cajas, genera además máscaras detalladas para cada objeto detectado.

Por eso modelos como Mask R-CNN pueden entenderse como una extensión de detectores con una salida adicional de segmentación.

29.18 Métricas en segmentación

La evaluación en segmentación no suele basarse en accuracy global simple. Algunas métricas muy importantes son:

  • IoU por clase.
  • mIoU, es decir, mean IoU.
  • Dice coefficient en ciertos dominios, especialmente médicos.

Estas métricas intentan medir qué tan bien coinciden las máscaras predichas con las reales.

29.19 ¿Por qué accuracy puede ser engañosa aquí?

Porque en segmentación suele haber una gran cantidad de píxeles de fondo. Un modelo podría acertar casi todo el fondo y, aun así, segmentar muy mal las regiones realmente importantes.

Por eso métricas como IoU o Dice suelen ser más informativas para este tipo de tarea.

29.20 Datos y máscaras deben transformarse juntos

Como ya ocurría con detección, en segmentación no basta con transformar la imagen. Si hacemos augmentation geométrica, también debemos aplicar transformaciones consistentes a la máscara correspondiente.

De lo contrario, la relación entre imagen y anotación se rompe y el entrenamiento se vuelve incorrecto.

29.21 Primeros pasos con PyTorch

PyTorch y torchvision también incluyen modelos de segmentación preentrenados. Por ejemplo, una opción conocida es fcn_resnet50 para segmentación semántica.

from torchvision.models.segmentation import fcn_resnet50
from torchvision.models.segmentation import FCN_ResNet50_Weights

weights = FCN_ResNet50_Weights.DEFAULT
model = fcn_resnet50(weights=weights)
model.eval()

Esto permite empezar a explorar la salida de un modelo de segmentación sin necesidad de implementarlo desde cero.

29.22 ¿Qué devuelve un modelo de segmentación?

En modelos de segmentación semántica de torchvision, la salida suele incluir un tensor en una clave como out. Ese tensor contiene puntajes por clase para cada posición espacial.

Luego podemos tomar la clase con mayor valor en cada píxel para construir la máscara final.

29.23 Ejemplo conceptual de inferencia

Un flujo conceptual muy simple podría verse así:

import torch
from PIL import Image
from torchvision.models.segmentation import fcn_resnet50
from torchvision.models.segmentation import FCN_ResNet50_Weights

weights = FCN_ResNet50_Weights.DEFAULT
model = fcn_resnet50(weights=weights)
model.eval()

preprocess = weights.transforms()

imagen = Image.open("foto1.jpg").convert("RGB")
entrada = preprocess(imagen).unsqueeze(0)

with torch.no_grad():
    salida = model(entrada)["out"]

mascara = salida.argmax(dim=1)
print(mascara.shape)

Este ejemplo muestra la lógica general: la red produce puntajes densos y luego se deriva una máscara por píxel.

29.24 Aplicaciones típicas

La segmentación aparece en muchos contextos donde la localización precisa es esencial:

  • Delimitación de tumores u órganos en medicina.
  • Separación de calles, edificios y vegetación en imágenes satelitales.
  • Detección de defectos exactos en superficies industriales.
  • Recorte de personas u objetos para edición visual.

29.25 Errores comunes al pensar segmentación

Algunos errores conceptuales frecuentes son:

  • Confundir segmentación con detección por cajas.
  • Evaluar solo con accuracy global.
  • No transformar imagen y máscara de forma consistente.
  • Subestimar el costo de anotar máscaras de calidad.
  • Ignorar la diferencia entre segmentación semántica e instancias.

29.26 Qué debes recordar de este tema

  • La segmentación busca asignar etiquetas de forma mucho más precisa que la detección con cajas.
  • La representación típica es una máscara a nivel de píxel.
  • La segmentación semántica no separa instancias individuales; la segmentación de instancias sí.
  • IoU y Dice son métricas importantes para evaluar máscaras.
  • Los modelos de segmentación deben preservar y refinar información espacial con gran detalle.
  • torchvision ofrece modelos preentrenados para comenzar a explorar esta tarea.

29.27 Conclusión

La segmentación de imágenes lleva la comprensión visual un paso más allá que la detección. Ya no basta con decir qué objeto está presente ni con rodearlo aproximadamente: necesitamos delimitar con precisión qué píxeles pertenecen a cada región relevante.

Eso la convierte en una tarea muy poderosa y también muy exigente, tanto desde el punto de vista del modelado como de los datos y la evaluación. Sin embargo, precisamente por ese nivel de detalle, resulta esencial en numerosos problemas reales.

En el próximo tema abordaremos otra familia muy influyente de detectores: una introducción a redes YOLO y detección en tiempo real, donde el foco estará en combinar detección con velocidad y eficiencia operativa.