1.6 Segmentación con Inteligencia Artificial#
¿Qué es la segmentación?#
La segmentación es la tarea de asignar una etiqueta a cada píxel de una imagen, dividiendo la escena en regiones con significado semántico. A diferencia de la clasificación (una etiqueta por imagen) o la detección (una caja por objeto), la segmentación produce una máscara densa del mismo tamaño que la entrada.
Tipos de segmentación#
Segmentación Semántica#
Asigna una clase a cada píxel sin distinguir instancias individuales. Todos los objetos de la misma clase reciben la misma etiqueta.
Imagen → Máscara por píxel → clase(píxel) ∈ {fondo, persona, coche, árbol, …}
Problema: dos personas adyacentes se funden en una sola región.
Segmentación de Instancias#
Detecta y segmenta cada objeto individualmente, incluso si son de la misma clase y se solapan.
Imagen → {instancia_1: máscara_1, instancia_2: máscara_2, …}
Segmentación Panóptica#
Combina segmentación semántica e instancias en una sola salida coherente:
Things (objetos contables): personas, coches → instancias individuales.
Stuff (regiones no contables): cielo, carretera, césped → semántica.
Segmentación de Partes (Part Segmentation)#
Segmenta las partes internas de un objeto: en una persona → cabeza, torso, brazos, piernas.
Segmentación Interactiva#
El usuario guía la segmentación con prompts (clics, cajas, trazos):
Imagen + {clic en objeto} → Máscara del objeto seleccionado
Base de SAM (Segment Anything Model).
Segmentación de Video#
Propaga máscaras de segmentación a lo largo de los frames de un video, manteniendo la identidad de cada objeto.
Evolución histórica#
Año |
Modelo |
Aporte |
|---|---|---|
2014 |
FCN (Fully Convolutional Network) |
Primera red totalmente convolucional para segmentación densa. |
2015 |
U-Net |
Skip connections para preservar detalles espaciales finos. |
2016 |
SegNet |
Encoder-decoder con índices de pooling para upsampling. |
2017 |
DeepLab v3 |
Dilated convolutions + ASPP para múltiples escalas. |
2017 |
Mask R-CNN |
Segmentación de instancias sobre Faster R-CNN. |
2018 |
Panoptic FPN |
Segmentación panóptica unificada. |
2020 |
SETR |
Primeros Transformers aplicados a segmentación. |
2021 |
SegFormer |
Transformer eficiente para segmentación semántica. |
2021 |
Swin Transformer |
Backbone jerárquico con atención por ventanas. |
2023 |
SAM |
Segmentación zero-shot guiada por prompts. |
2024 |
SAM 2 |
SAM extendido a video en tiempo real. |
Arquitecturas fundamentales#
FCN — Fully Convolutional Network#
Primera arquitectura en sustituir las capas densas finales de una CNN por capas convolucionales, permitiendo entrada de cualquier tamaño y salida densa.
Imagen → [VGG/AlexNet backbone] → mapas de características → Conv 1×1 → Upsample → Máscara
Problema: el upsampling directo produce máscaras borrosas sin detalles finos.
U-Net#
Arquitectura encoder-decoder con conexiones de salto (skip connections) que concatenan mapas del encoder directamente al decoder en el mismo nivel de resolución.
Encoder (contracción): Decoder (expansión):
x → Conv → Pool UpSample → Conv + [skip] → Conv
x/2 → Conv → Pool UpSample → Conv + [skip] → Conv
x/4 → Conv → Pool UpSample → Conv + [skip] → Conv
x/8 → Conv (bottleneck)
Por qué funciona: el bottleneck captura contexto global; las skip connections recuperan los detalles espaciales perdidos en el pooling.
Variantes modernas:
U-Net++: skip connections anidadas y densas.
Attention U-Net: mecanismo de atención en las skip connections.
TransUNet: encoder con ViT + decoder CNN.
Swin-UNet: U-Net completamente basado en Swin Transformer.
SegNet#
Encoder-decoder donde el decoder usa los índices de MaxPooling del encoder para hacer upsampling, evitando parámetros adicionales.
DeepLab v3 / v3+#
Introduce dos innovaciones clave para capturar múltiples escalas sin perder resolución:
Dilated (Atrous) Convolutions: convolucionan con «agujeros» para aumentar el campo receptivo sin reducir la resolución espacial.
Dilatación 1: campo receptivo normal
Dilatación 2: campo receptivo 2× mayor, misma cantidad de parámetros
Dilatación 4: campo receptivo 4× mayor
ASPP (Atrous Spatial Pyramid Pooling): aplica varias convoluciones dilatadas en paralelo con distintas tasas + pooling global.
Mapa de características → [ASPP: d=6, d=12, d=18, AvgPool] → Concat → Conv 1×1 → Máscara
DeepLab v3+ añade un decoder ligero (similar a U-Net) para refinar los bordes.
PSPNet — Pyramid Scene Parsing Network#
Usa un Pyramid Pooling Module (PPM) para capturar contexto global a múltiples escalas:
Mapa de características → [Pool 1×1, 2×2, 3×3, 6×6] → Upsample → Concat → Conv → Máscara
Mask R-CNN — Segmentación de instancias#
Extiende Faster R-CNN con una tercera cabeza paralela que predice una máscara binaria por región de interés (ROI):
Imagen → Backbone + FPN → RPN → ROI Align → [Clasificación + BBox + Máscara]
ROI Align (vs. ROI Pooling): interpolación bilineal para preservar la alineación espacial → máscaras más precisas.
SegFormer#
Arquitectura totalmente basada en Transformers, eficiente y sin necesidad de positional encoding fijo:
Imagen → [Mix Transformer Encoder (MiT)] → representaciones multi-escala
→ [Decoder MLP ligero] → Máscara semántica
Ventajas: supera a DeepLab en mIoU con menor costo computacional.
SAM — Segment Anything Model#
Meta AI (2023). Modelo de segmentación interactiva zero-shot entrenado en más de 1 000 millones de máscaras.
Arquitectura:
Imagen → [Image Encoder (ViT-H)] → Image Embedding
Prompt → [Prompt Encoder] → Prompt Embedding
→ [Mask Decoder (Transformer)] → Máscaras + scores de calidad
Tipos de prompt soportados:
Punto: clic en un píxel de interés.
Caja: bounding box que delimita el objeto.
Máscara: máscara gruesa como guía.
Texto: descripción en lenguaje natural (SAM 2 + Grounding DINO).
SAM 2 (2024): extiende SAM a video, propagando máscaras frame a frame con un memory bank que mantiene la identidad de los objetos.
Grounded SAM#
Combina Grounding DINO (detección open-vocabulary) + SAM (segmentación):
"Todas las personas con casco"
↓
[Grounding DINO] → Bounding boxes
↓
[SAM] → Máscaras precisas por instancia
Permite segmentación completamente guiada por lenguaje natural sin fine-tuning.
Dilated Convolutions en profundidad#
Las convoluciones dilatadas son fundamentales en segmentación para mantener la resolución espacial:
Convolucion normal (d=1): Convolucion dilatada (d=2):
■ ■ ■ ■ · ■ · ■
■ ■ ■ · · · · ·
■ ■ ■ ■ · ■ · ■
· · · · ·
■ · ■ · ■
Misma cantidad de parámetros, mayor campo receptivo.
No reduce la resolución espacial (sin stride ni pooling).
Permiten al modelo ver contexto amplio sin perder detalles de borde.

Feature Pyramid Networks (FPN)#
Las FPN permiten detectar y segmentar objetos de múltiples escalas en una sola pasada:
Backbone (bottom-up): FPN (top-down + lateral connections):
C2 (1/4) ←──────────────── P2 (alta resolución, semántica media)
C3 (1/8) ←──────────────── P3
C4 (1/16) ←──────────────── P4
C5 (1/32) ←──────────────── P5 (baja resolución, alta semántica)
Cada nivel P_i combina la semántica de los niveles superiores con los detalles espaciales del nivel correspondiente del backbone.
Funciones de pérdida para segmentación#
Cross-Entropy por píxel#
L_CE = -(1/N) Σ_i Σ_c y_{i,c} · log(ŷ_{i,c})
Estándar para clases balanceadas. Cada píxel contribuye igual.
Weighted Cross-Entropy#
Asigna pesos inversamente proporcionales a la frecuencia de cada clase:
L_WCE = -(1/N) Σ_i Σ_c w_c · y_{i,c} · log(ŷ_{i,c})
Útil cuando el fondo domina (ej. 95% fondo, 5% objeto de interés).
Dice Loss#
L_Dice = 1 - (2 · |A ∩ B|) / (|A| + |B|)
Optimiza directamente la superposición entre predicción y ground truth. Ideal para regiones pequeñas y datasets desbalanceados.
IoU Loss (Jaccard Loss)#
L_IoU = 1 - |A ∩ B| / |A ∪ B|
Similar a Dice, optimiza directamente la métrica de evaluación estándar.
Focal Loss#
L_FL = -(1 - ŷ)^γ · log(ŷ)
Reduce el peso de los píxeles fáciles (bien clasificados) y enfoca el entrenamiento en los difíciles. Parámetro γ controla el enfoque (típicamente γ=2).
Tversky Loss#
Generalización de Dice que pondera diferente FP y FN:
L_Tversky = 1 - TP / (TP + α·FP + β·FN)
Con α < β se penaliza más los Falsos Negativos → útil cuando perder un objeto es más costoso que una falsa alarma.
Pérdida combinada (práctica habitual)#
L_total = L_CE + λ · L_Dice
Combina estabilidad de CE con optimización directa de la métrica.
Métricas de evaluación#
Pixel Accuracy#
PA = Σ_c TP_c / N_total
Porcentaje de píxeles correctamente clasificados. Engañosa con clases desbalanceadas.
Mean Pixel Accuracy (MPA)#
MPA = (1/C) Σ_c TP_c / N_c
Promedia la accuracy por clase, corrigiendo el desbalance.
IoU (Intersection over Union) por clase#
IoU_c = TP_c / (TP_c + FP_c + FN_c)
Mean IoU (mIoU)#
mIoU = (1/C) Σ_c IoU_c
Estándar en benchmarks de segmentación. Mide el rendimiento promedio sobre todas las clases.

Dice Coefficient / F1 por región#
Dice_c = 2·TP_c / (2·TP_c + FP_c + FN_c)
Equivalente al F1-score aplicado a regiones. Muy usado en imágenes médicas.
Boundary F1 Score (BF)#
Mide la precisión específicamente en los bordes de los segmentos, capturando fineza de los contornos.
Panoptic Quality (PQ)#
Para segmentación panóptica:
PQ = SQ · RQ
SQ (Segmentation Quality) = IoU promedio de instancias emparejadas
RQ (Recognition Quality) = F1 de emparejamiento instancia-ground truth
Data Augmentation para segmentación#
La augmentación debe aplicarse sincrónicamente a la imagen y su máscara:
Transformación |
Imagen |
Máscara |
|---|---|---|
Flip horizontal |
✅ |
✅ (misma dirección) |
Rotación |
✅ |
✅ (misma rotación) |
Crop aleatorio |
✅ |
✅ (mismo crop) |
Escala |
✅ |
✅ |
Cambio de brillo/contraste |
✅ |
❌ (no afecta etiquetas) |
Ruido gaussiano |
✅ |
❌ |
Mezcla de colores |
✅ |
❌ |
Elastic deformation |
✅ |
✅ (misma deformación) |
MixUp / CutMix |
✅ |
✅ (mezcla ponderada) |
Librería recomendada: albumentations — aplica transformaciones geométricas de forma sincronizada.
Transfer Learning en segmentación#
Aprovechar backbones preentrenados en ImageNet o COCO acelera drásticamente el entrenamiento:
Backbone preentrenado (ResNet, EfficientNet, ViT…)
+
Decoder / cabeza de segmentación (inicializada aleatoriamente)
↓
Fine-tuning con datos de segmentación propios
Estrategias de fine-tuning:
Congelar backbone: entrenar solo el decoder (pocos datos).
Fine-tuning parcial: descongelar últimas capas del backbone.
Fine-tuning completo: descongelar todo (muchos datos).
Segmentación en dominio médico#
Dominio con características especiales que requieren consideraciones específicas:
Desafíos#
Datos escasos y costosos de anotar (requieren expertos).
Clases muy desbalanceadas (lesión pequeña en fondo grande).
Variabilidad inter-anotador.
Modalidades diversas: MRI, CT, ultrasonido, histología, endoscopía.
Arquitecturas más usadas#
U-Net y variantes: estándar de facto en imágenes médicas.
nnU-Net: framework auto-configurado que adapta U-Net a cualquier dataset médico.
TransUNet / Swin-UNet: Transformers para capturar dependencias de largo alcance.
Técnicas especiales#
Anotación débil: usar cajas o puntos en lugar de máscaras densas.
Semi-supervisión: pocas imágenes anotadas + muchas sin anotar.
Self-supervised pretraining: preentrenar en datos no etiquetados.
Segmentación en teledetección y satélite#
Desafíos específicos:
Imágenes de muy alta resolución (gigapíxeles).
Múltiples bandas espectrales (RGB + NIR + SWIR…).
Objetos de escalas muy distintas (edificios, campos de cultivo, ríos).
Arquitecturas comunes: U-Net adaptado, SegFormer, DeepLab v3+.
Segmentación en conducción autónoma#
Requiere:
Tiempo real: inferencia a 30+ FPS.
Alta precisión en bordes: fundamental para seguridad.
Robustez: distintas condiciones de luz, lluvia, noche.
Datasets: Cityscapes, ADE20K, BDD100K.
Benchmarks y datasets de referencia#
Dataset |
Clases |
Imágenes |
Dominio |
|---|---|---|---|
PASCAL VOC 2012 |
21 |
11K |
Objetos cotidianos |
MS COCO |
80 |
330K |
Instancias y panóptica |
Cityscapes |
19 |
5K (densamente anotadas) |
Conducción urbana |
ADE20K |
150 |
25K |
Escenas interiores/exteriores |
BDD100K |
40 |
100K |
Conducción diversa |
Medical Segmentation Decathlon |
10 tareas |
Variable |
Imágenes médicas |
ISIC |
2 |
25K+ |
Dermatología (melanoma) |
Flujo completo de un proyecto de segmentación#
1. Definir el problema
└── ¿Semántica, instancias o panóptica?
└── ¿Cuántas clases? ¿Están balanceadas?
2. Recopilar y anotar datos
└── Herramientas: LabelMe, CVAT, Roboflow, Scale AI
└── Formato: COCO JSON, Pascal VOC XML, máscaras PNG
3. Preprocesamiento y augmentación
└── Normalización, resize, albumentations
4. Seleccionar arquitectura
└── Pocos datos + dominio médico → U-Net / nnU-Net
└── Tiempo real → SegFormer pequeño, DeepLab MobileNet
└── Alta precisión → Mask R-CNN, SegFormer-B5
└── Zero-shot → SAM + Grounding DINO
5. Transfer Learning
└── Backbone preentrenado en ImageNet / COCO
6. Definir función de pérdida
└── Balanceado → CE + Dice
└── Muy desbalanceado → Focal + Tversky
7. Entrenamiento y monitoreo
└── Métricas: mIoU en validación por época
8. Evaluación final
└── mIoU, Dice, Boundary F1 en test set
9. Optimización para despliegue
└── ONNX, TensorRT, quantización INT8
10. Despliegue e inferencia
└── API REST, edge device, tiempo real
Frameworks y herramientas#
Herramienta |
Uso |
|---|---|
|
U-Net, FPN, PSPNet, DeepLab con backbones preentrenados. |
|
Colección completa de modelos de segmentación en PyTorch. |
|
Mask R-CNN, Panoptic FPN, PointRend. |
|
U-Net auto-configurado para imágenes médicas. |
|
SegFormer, SAM, Mask2Former, OneFormer. |
|
Augmentación sincronizada imagen + máscara. |
|
Framework médico completo (segmentación 2D y 3D). |
|
Anotación, augmentación y despliegue en la nube. |
|
Herramientas de anotación de máscaras. |
|
Optimización para inferencia en producción. |