La Segmentación de Instancias (Instance Segmentation) es una tarea de inteligencia artificial y visión por computadora que consiste en localizar cada objeto individual de una imagen y producir una máscara que delimite los píxeles visibles correspondientes a ese objeto.
Combina dos capacidades fundamentales: la detección de objetos, que identifica categorías y localizaciones, y la segmentación, que permite describir las regiones ocupadas por los objetos con mayor detalle que una caja delimitadora.
Supongamos que una imagen contiene cinco botellas sobre una mesa.
Un sistema de clasificación de imágenes puede responder:
«La imagen contiene botellas».
Un detector de objetos puede localizar cinco botellas mediante cinco cajas delimitadoras.
Un sistema de segmentación semántica puede identificar todos los píxeles pertenecientes a la categoría botella.
Un modelo de segmentación de instancias puede generar cinco máscaras independientes, una por botella.
Esta diferencia es especialmente importante cuando necesitamos contar objetos, medir su superficie visible, separarlos de otros elementos o procesar cada instancia por separado.
La segmentación de instancias tiene numerosas aplicaciones:
- Reconocimiento y conteo de productos.
- Inspección industrial.
- Robótica.
- Análisis de fotografías comerciales.
- Visión artificial para vehículos.
- Análisis de imágenes biomédicas.
- Agricultura de precisión.
- Procesamiento de imágenes satelitales.
- Separación de objetos y fondos.
- Automatización de inventarios visuales.
Una de las arquitecturas más conocidas es Mask R-CNN, presentada por Kaiming He, Georgia Gkioxari, Piotr Dollár y Ross Girshick en 2017.
Mask R-CNN amplía Faster R-CNN con una rama dedicada a predecir una máscara por instancia.
También utiliza RoIAlign, una operación que extrae características de regiones de interés preservando mejor su alineación espacial que determinadas alternativas basadas en coordenadas cuantizadas.
Posteriormente surgieron otros enfoques, como YOLACT, SOLO y modelos de segmentación basados en consultas y Transformers.
Estos enfoques muestran que la segmentación de instancias no está limitada a una única arquitectura.
En esta entrada estudiaremos la diferencia entre segmentación semántica, de instancias y panóptica; la representación de máscaras individuales; los componentes de Mask R-CNN; las métricas Mask IoU y Mask Average Precision; y ejemplos con NumPy, PyTorch y Torchvision.
También abordaremos sus aplicaciones empresariales, errores frecuentes y relación con la Visibilidad en Inteligencia Artificial.
1. ¿Qué es la Segmentación de Instancias?
Definición breve: La segmentación de instancias es una tarea de visión por computadora que identifica objetos individuales y produce una máscara espacial independiente para cada instancia detectada.
Normalmente, un sistema produce cuatro tipos de información:
- Una categoría para cada objeto.
- Una caja delimitadora.
- Una puntuación de confianza.
- Una máscara de segmentación individual.
Por ejemplo:
| Objeto | Clase | Confianza | Máscara |
|---|---|---|---|
| Instancia 1 | Botella | 0,97 | Máscara 1 |
| Instancia 2 | Botella | 0,94 | Máscara 2 |
| Instancia 3 | Taza | 0,91 | Máscara 3 |
Aunque las dos botellas comparten una categoría, mantienen identificadores de instancia diferentes.
¿Qué significa instancia?
Una instancia es una ocurrencia individual de un objeto.
¿La instancia debe tener una categoría conocida?
En segmentación de instancias supervisada convencional, normalmente se predice una clase dentro de las categorías entrenadas.
Existen también métodos de segmentación de objetos sin clasificación semántica específica.
2. Segmentación Semántica frente a Segmentación de Instancias
La diferencia principal es la identidad de cada objeto.
Segmentación semántica
Asigna categorías a píxeles.
Por ejemplo, todos los píxeles pertenecientes a perros pueden recibir el valor:
Perro = 1
Segmentación de instancias
Distingue individualmente los perros:
- Perro 1.
- Perro 2.
- Perro 3.
Cada perro tiene una máscara propia.
¿Por qué importa?
Porque numerosas aplicaciones necesitan contar, medir o manipular objetos individuales.
Ejemplo comercial
Una empresa quiere analizar fotografías de estanterías.
La segmentación semántica puede identificar regiones donde aparecen productos.
La segmentación de instancias puede separar individualmente los artículos visibles, siempre que el modelo haya sido entrenado para esa tarea.
3. Segmentación de Instancias frente a Segmentación Panóptica
La Segmentación Panóptica proporciona una descripción más completa de la escena.
Distingue generalmente dos tipos de categorías.
Things
Objetos individuales y contables.
Ejemplos:
- Personas.
- Vehículos.
- Animales.
- Botellas.
Stuff
Regiones no necesariamente contables como objetos individuales.
Ejemplos:
- Cielo.
- Carretera.
- Hierba.
- Agua.
La segmentación panóptica combina información semántica sobre la escena con identificadores individuales para las categorías correspondientes.
¿La segmentación de instancias tiene que etiquetar todo el fondo?
No.
Un modelo de instancias puede concentrarse en los objetos detectables y dejar otras regiones sin una categoría detallada.
4. ¿Qué produce un modelo de Segmentación de Instancias?
Consideremos una imagen RGB con dimensiones:
H = 480, W = 640
El modelo detecta tres objetos.
Una salida habitual puede contener:
Cajas:
[3, 4]
Categorías:
[3]
Puntuaciones:
[3]
Máscaras:
[3, 1, 480, 640]
La primera dimensión de las máscaras corresponde al número de instancias detectadas.
¿Puede cambiar el número de instancias entre imágenes?
Sí.
Una imagen puede contener cero, una o decenas de detecciones.
¿Qué implica para el procesamiento?
Las predicciones suelen manejarse como colecciones de objetos, no como un tensor con un número fijo de instancias para todas las imágenes.
5. ¿Qué es una máscara de instancia?
Una Instance Mask es una matriz que identifica los píxeles correspondientes a un objeto individual.
Una máscara binaria utiliza normalmente:
- 0: píxel fuera del objeto.
- 1: píxel perteneciente al objeto.
Para dos objetos de la misma clase necesitamos dos máscaras.
Ejemplo
Máscara de instancia A:
0 0 0 0 0 00 1 1 0 0 00 1 1 0 0 00 0 0 0 0 0
Máscara de instancia B:
0 0 0 0 0 00 0 0 0 1 10 0 0 0 1 10 0 0 0 0 0
¿Podemos guardar ambas en una sola imagen?
Sí, por ejemplo utilizando identificadores enteros diferentes.
Sin embargo, una representación compacta de IDs no debe confundirse con una máscara semántica donde el valor representa únicamente la clase.
6. Ejemplo 1 — Crear máscaras individuales con NumPy
import numpy as npheight, width = 64, 96instance_map = np.zeros( (height, width), dtype=np.uint8)# Objeto Ainstance_map[10:35, 8:30] = 1# Objeto Binstance_map[15:48, 44:78] = 2instance_ids = np.unique( instance_map)instance_ids = instance_ids[ instance_ids != 0]masks = np.stack( [ instance_map == object_id for object_id in instance_ids ], axis=0)print( "Identificadores:", instance_ids)print( "Máscaras:", masks.shape)
Resultado esperado
Identificadores: [1 2]Máscaras: (2, 64, 96)
¿Qué demuestra?
Podemos transformar un mapa de identificadores en una colección de máscaras binarias.
¿Qué debemos evitar?
Suponer que el identificador 2 significa necesariamente una categoría semántica.
En este ejemplo identifica el segundo objeto, no la clase «objeto 2».
7. Clase e identidad son conceptos diferentes
Cada instancia puede necesitar dos identificadores.
Identificador de clase
Indica qué tipo de objeto representa.
Ejemplo:
Clase 4 = Botella
Identificador de instancia
Distingue una botella específica de otras botellas de la misma imagen.
Ejemplo:
Instancia 7
Representación conceptual
Instancia: 7Clase: 4Categoría: Botella
¿Los identificadores de instancia son globales entre imágenes?
No necesariamente.
En muchos datasets, una instancia se identifica dentro de una imagen.
Si el sistema también sigue objetos en un vídeo, puede necesitar identificadores persistentes de seguimiento.
8. ¿Qué es una Bounding Box?
Una Bounding Box es una caja delimitadora que aproxima la región de un objeto.
Un formato habitual es:
[x1, y1, x2, y2]
Donde:
- x1: coordenada izquierda.
- y1: coordenada superior.
- x2: coordenada derecha.
- y2: coordenada inferior.
¿Qué relación tiene con una máscara?
La caja delimita un rectángulo.
La máscara describe más precisamente qué píxeles pertenecen al objeto.
¿Una máscara debe llenar toda la caja?
No.
Un objeto puede tener una forma irregular y ocupar solamente parte del rectángulo.
9. Ejemplo 2 — Calcular Bounding Boxes desde máscaras
import numpy as npdef mask_to_box(mask): ys, xs = np.where( np.asarray(mask, dtype=bool) ) if len(xs) == 0: return None x1 = int(xs.min()) y1 = int(ys.min()) # Extremos superiores exclusivos x2 = int(xs.max()) + 1 y2 = int(ys.max()) + 1 return [x1, y1, x2, y2]for object_id, mask in zip( instance_ids, masks): print( "Instancia:", int(object_id), "Caja:", mask_to_box(mask) )
Resultado esperado
Instancia: 1 Caja: [8, 10, 30, 35]Instancia: 2 Caja: [44, 15, 78, 48]
¿Por qué sumamos uno a los límites máximos?
Porque en este ejemplo utilizamos una convención de coordenadas con extremos superiores exclusivos.
¿Todos los datasets utilizan esta convención?
No.
Debemos documentar si utilizamos XYXY, XYWH, coordenadas inclusivas, exclusivas o normalizadas.
10. ¿Cómo se representan objetos superpuestos?
Los objetos pueden ocultarse parcialmente.
Por ejemplo, una botella puede estar situada delante de otra.
¿Qué píxeles se anotan habitualmente?
En una segmentación visible, la máscara contiene los píxeles visibles del objeto.
¿Podemos predecir también las partes ocultas?
Existen tareas especializadas de Amodal Segmentation que intentan estimar la extensión completa de objetos parcialmente ocultos.
¿Es lo mismo que Instance Segmentation convencional?
No exactamente.
El protocolo de anotación determina si se segmenta únicamente la región visible o una representación amodal.
11. ¿Qué es Mask R-CNN?
Mask R-CNN es una arquitectura de segmentación de instancias basada en detección de objetos.
Fue propuesta en 2017 por Kaiming He y colaboradores.
Extiende Faster R-CNN mediante una rama que predice una máscara para cada región de interés.
¿Qué produce?
- Cajas delimitadoras.
- Categorías.
- Puntuaciones de detección.
- Máscaras individuales.
¿Por qué fue importante?
Porque integró detección y segmentación de instancias dentro de una arquitectura entrenable de extremo a extremo y estableció una referencia influyente para la investigación posterior.
12. Arquitectura general de Mask R-CNN
Un flujo conceptual es:
Imagen → Backbone → Feature Maps → Region Proposal Network → RoIAlign → Cabezas de clasificación, cajas y máscaras
Componentes
- Backbone convolucional.
- Feature Pyramid Network, cuando se utiliza.
- Region Proposal Network.
- RoIAlign.
- Cabeza de clasificación.
- Cabeza de regresión de cajas.
- Cabeza de máscaras.
¿Todas las implementaciones son idénticas?
No.
Pueden cambiar el backbone, la FPN, el número de propuestas y las cabezas.
13. ¿Qué es el Backbone?
El Backbone extrae características visuales de la imagen.
Una configuración conocida utiliza:
ResNet-50
¿Para qué sirve?
Para transformar los píxeles en representaciones que faciliten localizar y reconocer objetos.
¿El backbone produce máscaras individuales directamente?
No normalmente.
Produce características que utilizan etapas posteriores.
¿Podemos sustituirlo?
Sí, con las adaptaciones correspondientes.
La compatibilidad de canales y de escalas es fundamental.
14. ¿Qué es Feature Pyramid Network (FPN)?
Una Feature Pyramid Network construye representaciones visuales de distintas escalas.
¿Por qué es importante?
Porque una imagen puede contener objetos grandes y pequeños.
Ejemplo
En una fotografía de un supermercado pueden aparecer:
- Una caja grande.
- Una botella mediana.
- Una etiqueta pequeña.
¿Qué aporta FPN?
Permite combinar información semántica profunda con representaciones de distintas resoluciones.
¿FPN es lo mismo que un módulo Inception?
No.
Ambos tienen relación con procesamiento multiescala, pero su estructura y finalidad son diferentes.
15. ¿Qué es Region Proposal Network (RPN)?
La Region Proposal Network propone regiones que podrían contener objetos.
¿Cómo funciona conceptualmente?
Utiliza características visuales para estimar:
- Si una región contiene un objeto.
- Qué caja delimitadora puede corresponder a ese objeto.
¿Qué produce?
Un conjunto de propuestas candidatas.
¿Son las detecciones finales?
No necesariamente.
Las propuestas se refinan y clasifican posteriormente.
16. ¿Qué es una Region of Interest (RoI)?
Una Region of Interest es una región espacial candidata a contener un objeto.
En Mask R-CNN, las propuestas de la RPN se utilizan para extraer características de regiones individuales.
¿Qué problema aparece?
Las regiones tienen diferentes tamaños.
Sin embargo, las cabezas de predicción trabajan normalmente con dimensiones de características controladas.
¿Qué solución se utiliza?
Operaciones como RoIAlign.
17. ¿Qué es RoIAlign?
RoIAlign (Region of Interest Align) es una operación para extraer representaciones de tamaño fijo a partir de regiones de interés.
Su objetivo es reducir errores de alineación espacial provocados por determinadas cuantizaciones de coordenadas.
¿Por qué importa en segmentación?
Porque las máscaras necesitan localizar los límites de los objetos.
Un pequeño desplazamiento en las características puede afectar especialmente a objetos pequeños o bordes finos.
¿Qué utiliza RoIAlign?
Muestreo e interpolación, habitualmente bilineal.
¿Es una segmentación en sí misma?
No.
Es un componente de extracción de características.
18. RoIPool frente a RoIAlign
En determinadas operaciones tradicionales RoIPool, las coordenadas se redondeaban o cuantizaban al dividir las regiones en celdas.
Esto podía producir desalineaciones.
RoIAlign preserva mejor las coordenadas continuas durante el muestreo.
Comparación
| Operación | Característica |
|---|---|
| RoIPool | Puede cuantizar límites y posiciones |
| RoIAlign | Utiliza muestreo sin la misma cuantización de coordenadas |
| Resultado | Representación espacial de tamaño fijo |
¿RoIAlign conserva perfectamente toda la información?
No.
Sigue siendo una operación de remuestreo sobre mapas de características.
19. Ejemplo 3 — RoIAlign con Torchvision
import torchfrom torchvision.ops import roi_align# Un mapa de característicasfeatures = torch.arange( 0, 64, dtype=torch.float32).reshape(1, 1, 8, 8)# Una región dentro del mapaboxes = [ torch.tensor( [[1.5, 1.5, 6.5, 6.5]], dtype=torch.float32 )]result = roi_align( features, boxes, output_size=(4, 4), spatial_scale=1.0, sampling_ratio=2, aligned=True)print( "Entrada:", features.shape)print( "Salida:", result.shape)print(result[0, 0])
Resultado esperado
Forma de salida:
[1, 1, 4, 4]
¿Qué demuestra?
RoIAlign transforma una región de tamaño variable en una representación espacial fija.
Precaución
El parámetro aligned y las convenciones de coordenadas deben ser consistentes con la implementación y los pesos utilizados.
20. ¿Qué hace la cabeza de clasificación?
La cabeza de clasificación estima la categoría de cada región propuesta.
Ejemplo
Para una región puede producir:
- Botella: 0,90.
- Taza: 0,06.
- Libro: 0,04.
¿Qué significa la puntuación?
Representa una salida de confianza del modelo.
¿Está perfectamente calibrada?
No necesariamente.
Las puntuaciones pueden necesitar calibración para ciertos usos.
21. ¿Qué hace la cabeza de cajas?
La cabeza de regresión de cajas ajusta las coordenadas de las propuestas para estimar mejor los límites de los objetos.
¿Por qué es necesaria?
Porque las cajas propuestas inicialmente pueden ser demasiado grandes, pequeñas o desplazadas.
¿La caja refinada define exactamente la máscara?
No.
La máscara se estima mediante una rama distinta.
22. ¿Qué hace la Mask Head?
La Mask Head es la rama que predice máscaras de segmentación para las regiones de interés.
En la formulación característica de Mask R-CNN, cada región produce máscaras de resolución fija dentro de su espacio local.
Ejemplo conceptual
Una región puede producir una máscara de:
28 × 28
Posteriormente, la máscara se proyecta o remuestrea hacia la región correspondiente en la imagen.
¿La máscara final tiene que medir 28 × 28?
No.
Ese tamaño puede ser la resolución interna de predicción.
La salida posprocesada puede expresarse en la resolución de la imagen original.
23. ¿Qué es una máscara probabilística?
La salida de una Mask Head puede contener probabilidades por píxel.
Ejemplo
Una posición de la máscara contiene:
0,87
El modelo estima una alta probabilidad de pertenencia a la instancia.
¿Cómo convertirla en una máscara binaria?
Aplicando un umbral.
Por ejemplo:
p ≥ 0,5
¿Es obligatorio utilizar 0,5?
No.
Puede ajustarse mediante validación.
¿Cómo distinguir el umbral de máscara del umbral de detección?
Son controles diferentes.
El umbral de detección filtra objetos según su puntuación.
El umbral de máscara determina qué píxeles pertenecen a cada instancia conservada.
24. ¿Cómo se combinan las pérdidas de Mask R-CNN?
Mask R-CNN utiliza una función objetivo compuesta.
Una representación conceptual es:
Ltotal = Lclasificación + Lcajas + Lmáscaras + LRPN
Donde:
- Lclasificación evalúa las categorías.
- Lcajas evalúa el ajuste de cajas.
- Lmáscaras evalúa las máscaras.
- LRPN incluye objetivos relacionados con propuestas.
¿La pérdida de máscaras se calcula para todas las clases a la vez?
En la formulación original, se selecciona la máscara correspondiente a la clase verdadera para calcular la pérdida de esa región.
¿Es igual que Softmax semántico por píxel?
No.
La rama de máscaras se formula de manera diferente.
25. ¿Qué es Intersection over Union en máscaras?
Mask Intersection over Union (Mask IoU) mide el solapamiento entre dos máscaras binarias.
Fórmula
IoU = |P ∩ G| / |P ∪ G|
Donde:
- P es la máscara predicha.
- G es la máscara real.
Ejemplo
Una máscara predicha ocupa 100 píxeles.
La máscara real ocupa 80.
Coinciden en 60.
La unión contiene:
100 + 80 − 60 = 120 píxeles
Por tanto:
IoU = 60/120 = 0,5
26. Box IoU frente a Mask IoU
La distinción es fundamental.
Box IoU
Compara cajas rectangulares.
Mask IoU
Compara regiones de píxeles.
Un detector puede obtener una caja razonablemente correcta y producir una máscara imprecisa.
¿Qué significa?
La calidad de localización rectangular no garantiza buena segmentación.
¿Qué conviene informar?
Tanto métricas de detección como métricas de máscaras cuando ambas son importantes.
27. Ejemplo 4 — Calcular Mask IoU y Dice
import numpy as npdef mask_metrics(predicted, target): predicted = np.asarray( predicted, dtype=bool ) target = np.asarray( target, dtype=bool ) intersection = np.logical_and( predicted, target ).sum() union = np.logical_or( predicted, target ).sum() total = ( predicted.sum() + target.sum() ) if union == 0: return { "iou": 1.0, "dice": 1.0 } return { "iou": float( intersection / union ), "dice": float( 2 * intersection / total ) }target = np.array([ [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0]])predicted = np.array([ [0, 1, 1, 0], [0, 1, 0, 0], [0, 0, 0, 0]])print( mask_metrics(predicted, target))
Resultado esperado
IoU = 0,75
Dice ≈ 0,857
¿Por qué se devuelve 1 si ambas máscaras están vacías?
Es la convención elegida en esta función educativa.
En benchmarks de instancias, las máscaras vacías y las detecciones inexistentes requieren tratamiento de evaluación diferente.
28. ¿Qué es Average Precision (AP)?
Average Precision (AP) resume la relación entre Precision y Recall a medida que varía el umbral de puntuación de las detecciones.
En segmentación de instancias, las coincidencias entre predicciones y objetos reales se determinan utilizando máscaras.
¿Por qué no basta con calcular IoU de una máscara?
Porque el sistema puede:
- Detectar objetos correctos.
- Omitir objetos.
- Producir detecciones falsas.
- Duplicar detecciones.
- Asignar categorías incorrectas.
AP integra varios de estos aspectos mediante un protocolo de evaluación.
29. ¿Qué es Mask AP?
Mask AP es Average Precision calculada utilizando el solapamiento de las máscaras para determinar coincidencias con las anotaciones reales.
Es diferente de Box AP, donde el emparejamiento utiliza las cajas delimitadoras.
¿Qué mide?
La capacidad de detectar y segmentar correctamente objetos individuales.
¿Depende de las puntuaciones de confianza?
Sí.
Las predicciones se ordenan según sus puntuaciones, de acuerdo con el protocolo.
¿Es igual que Mean IoU?
No.
Mean IoU compara solapamientos de categorías o regiones según una definición.
Mask AP evalúa detecciones de instancias y su relación Precision-Recall.
30. ¿Cómo evalúa COCO las máscaras?
Una métrica ampliamente utilizada es:
AP@[0.50:0.95]
Se calcula sobre umbrales IoU desde:
0,50 hasta 0,95, con incrementos de 0,05.
Esto produce diez umbrales:
0,50; 0,55; 0,60; 0,65; 0,70; 0,75; 0,80; 0,85; 0,90 y 0,95.
El protocolo COCO agrega resultados según clases, umbrales y su procedimiento de evaluación.
Otras métricas
- AP50.
- AP75.
- AP para objetos pequeños.
- AP para objetos medianos.
- AP para objetos grandes.
- Average Recall.
¿Por qué importa evaluar diferentes umbrales?
Porque un objeto puede estar razonablemente localizado sin tener una máscara suficientemente precisa para un umbral estricto.
31. ¿Qué son AP50 y AP75?
AP50 utiliza un umbral de Mask IoU de 0,50.
AP75 utiliza un umbral de 0,75.
¿Cuál es más exigente?
AP75 exige mayor solapamiento para considerar una coincidencia.
¿AP50 mide el porcentaje de máscaras con IoU superior a 0,50?
No exactamente.
Average Precision considera también el ranking de puntuaciones, los falsos positivos y los falsos negativos.
¿Cómo obtener resultados COCO comparables?
Utilizando su evaluador o una implementación equivalente con el mismo protocolo.
32. ¿Qué es Non-Maximum Suppression (NMS)?
Non-Maximum Suppression es un procedimiento para reducir detecciones duplicadas.
Ejemplo
El detector produce tres cajas muy parecidas sobre una misma botella.
NMS puede conservar una detección con mejor puntuación y eliminar otras cuando sus solapamientos superan un umbral.
¿Se utiliza Box IoU?
La NMS convencional suele utilizar solapamiento entre cajas.
¿Existe Mask NMS?
Sí, existen variantes que pueden considerar máscaras u otros criterios.
¿NMS garantiza una única detección por objeto?
No.
La calidad depende de las puntuaciones, umbrales y configuración.
33. ¿Cómo funcionan los umbrales?
Un pipeline puede tener diferentes umbrales.
| Umbral | Finalidad |
|---|---|
| Score Threshold | Filtrar detecciones de baja confianza |
| NMS Threshold | Reducir detecciones duplicadas |
| Mask Threshold | Convertir probabilidades de píxeles en máscaras binarias |
| IoU Evaluation Threshold | Determinar coincidencias para una métrica |
¿Por qué no debemos confundirlos?
Porque cada uno modifica un aspecto diferente del resultado.
¿Podemos elegirlos utilizando el Test Set?
No es recomendable.
Lo adecuado es seleccionar los parámetros mediante validación y evaluar después en un conjunto independiente.
34. ¿Qué es un dataset de instancias?
Un dataset de segmentación de instancias necesita identificar objetos individualmente.
Para cada objeto puede almacenar:
- Identificador de imagen.
- Identificador de instancia.
- Clase.
- Máscara.
- Bounding Box.
- Área.
- Información de agrupación o Crowd, según el dataset.
¿Una máscara semántica es suficiente?
No necesariamente.
Si dos objetos de la misma clase se tocan, una máscara semántica convencional puede no distinguir dónde termina uno y empieza el otro.
35. ¿Qué es el formato COCO?
COCO (Common Objects in Context) es un dataset y un conjunto de formatos y protocolos utilizados en visión por computadora.
Para segmentación de instancias, las anotaciones pueden incluir:
image_idcategory_idsegmentationbboxareaiscrowd
¿Cómo representar las máscaras?
Entre otros formatos, pueden utilizarse polígonos o Run-Length Encoding, dependiendo de la anotación.
¿Qué es RLE?
Run-Length Encoding representa regiones mediante secuencias de longitudes codificadas.
¿Por qué utilizarlo?
Puede permitir almacenar máscaras de forma más compacta.
36. ¿Qué significa iscrowd?
El campo iscrowd aparece en anotaciones y protocolos relacionados con COCO.
Puede utilizarse para representar agrupaciones de objetos o para indicar un tratamiento especial durante evaluación.
Ejemplo
Una multitud de personas puede anotarse como una región agrupada bajo determinadas convenciones.
¿Es igual que una máscara de instancia individual?
No necesariamente.
¿Qué debemos hacer?
Respetar el significado del campo y el protocolo de evaluación.
37. ¿Qué es Penn-Fudan Pedestrian Dataset?
Es un dataset de imágenes y máscaras de peatones frecuentemente utilizado en tutoriales de Mask R-CNN.
El tutorial oficial de Torchvision lo utiliza para demostrar cómo adaptar un modelo preentrenado a una tarea especializada.
¿Por qué es útil?
Porque proporciona imágenes con instancias individuales anotadas.
¿Es suficientemente grande para cualquier proyecto comercial?
No.
Es principalmente un recurso educativo y de investigación.
38. ¿Cómo utilizar Torchvision para Segmentación de Instancias?
Torchvision proporciona implementaciones de Mask R-CNN.
Entre ellas:
maskrcnn_resnet50_fpnmaskrcnn_resnet50_fpn_v2
Las implementaciones pueden cargarse con pesos preentrenados.
¿Qué formato de entrada utilizan?
Una lista de imágenes individuales.
Cada imagen es normalmente un tensor:
[3, H, W]
con valores de píxel entre cero y uno.
¿Qué formato de salida producen?
Una lista de diccionarios, uno por imagen.
Los diccionarios incluyen cajas, categorías, puntuaciones y máscaras.
39. Ejemplo 5 — Cargar Mask R-CNN preentrenada
Instalación:
pip install torch torchvision pillow numpy matplotlib
Código:
import torchfrom torchvision.models.detection import ( maskrcnn_resnet50_fpn_v2, MaskRCNN_ResNet50_FPN_V2_Weights)weights = ( MaskRCNN_ResNet50_FPN_V2_Weights.DEFAULT)model = maskrcnn_resnet50_fpn_v2( weights=weights)model.eval()print( "Parámetros:", sum( p.numel() for p in model.parameters() ))print( "Categorías:", len(weights.meta["categories"]))
¿Qué demuestra?
Podemos cargar Mask R-CNN con pesos disponibles en Torchvision.
¿Requiere Internet?
La primera ejecución puede necesitar descargar el checkpoint.
¿Reconoce automáticamente cualquier producto comercial?
No.
El modelo reconoce las categorías disponibles en su entrenamiento.
40. Ejemplo 6 — Inferencia de instancias en una fotografía
import torchfrom PIL import Imagefrom torchvision.models.detection import ( maskrcnn_resnet50_fpn_v2, MaskRCNN_ResNet50_FPN_V2_Weights)weights = ( MaskRCNN_ResNet50_FPN_V2_Weights.DEFAULT)model = maskrcnn_resnet50_fpn_v2( weights=weights)model.eval()image = Image.open( "imagen.jpg").convert("RGB")preprocess = weights.transforms()image_tensor = preprocess(image)with torch.inference_mode(): predictions = model([ image_tensor ])result = predictions[0]print( "Cajas:", result["boxes"].shape)print( "Clases:", result["labels"].shape)print( "Puntuaciones:", result["scores"].shape)print( "Máscaras:", result["masks"].shape)
¿Qué demuestra?
El resultado contiene una colección de instancias detectadas.
¿Por qué utilizamos una lista de imágenes?
Porque las implementaciones de detección de Torchvision trabajan con listas que pueden contener imágenes de tamaños diferentes.
41. Ejemplo 7 — Filtrar detecciones por puntuación
score_threshold = 0.70scores = result["scores"]keep = scores >= score_thresholdboxes = result["boxes"][keep]labels = result["labels"][keep]scores = scores[keep]masks = result["masks"][keep]print( "Instancias conservadas:", len(boxes))
¿Qué demuestra?
Podemos eliminar predicciones que no superan el umbral seleccionado.
¿Por qué puede ser necesario?
Porque algunos resultados tienen puntuaciones bajas.
¿Qué riesgo existe al utilizar un umbral demasiado alto?
Podemos eliminar objetos reales con menor confianza.
42. Ejemplo 8 — Convertir probabilidades en máscaras binarias
mask_threshold = 0.5binary_masks = ( masks[:, 0] >= mask_threshold)print( binary_masks.shape)print( binary_masks.dtype)
¿Qué demuestra?
Cada instancia conservada tiene una máscara booleana.
¿Qué ocurre si no hay instancias?
El tensor tendrá cero máscaras y debe procesarse correctamente sin asumir que existe un objeto.
43. Ejemplo 9 — Visualizar las máscaras de instancias
import numpy as npimport matplotlib.pyplot as pltfrom PIL import Imageimage = Image.open( "imagen.jpg").convert("RGB")canvas = np.asarray( image).astype(np.float32) / 255.0overlay = canvas.copy()rng = np.random.default_rng(42)for mask in binary_masks.cpu().numpy(): color = rng.random(3) overlay[mask] = ( 0.55 * overlay[mask] + 0.45 * color )plt.figure(figsize=(10, 7))plt.imshow(overlay)plt.title( "Segmentación de instancias")plt.axis("off")plt.show()
¿Qué demuestra?
Podemos representar cada objeto con un color diferente.
¿Los colores representan clases?
En este ejemplo no.
Los colores se asignan aleatoriamente a las instancias para distinguir objetos individuales.
44. Ejemplo 10 — Mostrar nombres de categorías
categories = weights.meta[ "categories"]for label, score in zip( labels.cpu().tolist(), scores.cpu().tolist()): if 0 <= label < len(categories): category = categories[label] else: category = f"Clase {label}" print( category, round(score, 3) )
¿Qué demuestra?
Podemos relacionar los identificadores de clase del checkpoint con sus nombres.
Precaución
El mapeo debe proceder del mismo checkpoint utilizado para generar las predicciones.
45. ¿Cómo entrenar Mask R-CNN con datos propios?
El entrenamiento requiere una estructura de datos más compleja que la clasificación convencional.
Para cada imagen necesitamos un diccionario de anotaciones.
Campos fundamentales
boxes
Coordenadas de cajas.
labels
Categorías por instancia.
masks
Una máscara binaria por instancia.
Campos útiles para evaluación
image_id
Identificador único de imagen.
area
Área de la caja o según el protocolo.
iscrowd
Indicador de agrupación.
¿Se necesita fondo como instancia?
No.
El fondo suele tener un identificador de clase reservado, pero no se añade como una máscara de objeto.
46. Ejemplo 11 — Crear anotaciones sintéticas válidas
import torchheight, width = 96, 128image = torch.zeros( (3, height, width), dtype=torch.float32)masks = torch.zeros( (2, height, width), dtype=torch.uint8)# Instancia 1masks[0, 10:45, 12:42] = 1# Instancia 2masks[1, 30:78, 70:110] = 1# Dibujar objetos en la imagenimage[0][masks[0].bool()] = 0.9image[1][masks[1].bool()] = 0.9boxes = torch.tensor([ [12.0, 10.0, 42.0, 45.0], [70.0, 30.0, 110.0, 78.0]])labels = torch.tensor( [1, 1], dtype=torch.int64)target = { "boxes": boxes, "labels": labels, "masks": masks, "image_id": torch.tensor(0), "area": torch.tensor( [1050.0, 1920.0] ), "iscrowd": torch.zeros( 2, dtype=torch.int64 )}print( image.shape)print( target["masks"].shape)
¿Qué demuestra?
Dos objetos comparten una categoría, pero tienen máscaras y cajas independientes.
¿Es suficiente para entrenar un modelo fiable?
No.
Es un ejemplo para verificar el formato de anotación.
47. ¿Qué forma deben tener los datos de entrenamiento?
Para una imagen:
Imagen
[3, H, W]
Cajas
[N, 4]
Etiquetas
[N]
Máscaras
[N, H, W]
¿Qué ocurre si una imagen contiene cinco objetos?
N = 5.
¿Qué ocurre si otra contiene dos?
N = 2.
¿Podemos utilizar el DataLoader habitual sin modificaciones?
Generalmente necesitamos una función de agrupación que permita conservar colecciones de anotaciones con distinta longitud.
48. Ejemplo 12 — Función collate_fn
def collate_fn(batch): images, targets = zip(*batch) return ( list(images), list(targets) )
Uso:
from torch.utils.data import DataLoaderloader = DataLoader( dataset, batch_size=2, shuffle=True, collate_fn=collate_fn)
¿Por qué es necesario?
Porque cada imagen puede contener un número distinto de instancias.
¿Qué presupone este ejemplo?
Que dataset es una instancia válida de una clase Dataset que entrega pares (image, target).
49. Ejemplo 13 — Adaptar Mask R-CNN a nuevas categorías
Supongamos una aplicación con dos clases de objetos:
- Botella.
- Taza.
El modelo necesita tres clases contando el fondo.
from torchvision.models.detection import ( maskrcnn_resnet50_fpn, MaskRCNN_ResNet50_FPN_Weights)from torchvision.models.detection.faster_rcnn import ( FastRCNNPredictor)from torchvision.models.detection.mask_rcnn import ( MaskRCNNPredictor)num_classes = 3model = maskrcnn_resnet50_fpn( weights=MaskRCNN_ResNet50_FPN_Weights.DEFAULT)# Sustituir predictor de cajasin_features = ( model.roi_heads.box_predictor .cls_score.in_features)model.roi_heads.box_predictor = ( FastRCNNPredictor( in_features, num_classes ))# Sustituir predictor de máscarasmask_in_features = ( model.roi_heads.mask_predictor .conv5_mask.in_channels)model.roi_heads.mask_predictor = ( MaskRCNNPredictor( mask_in_features, 256, num_classes ))
¿Qué demuestra?
Podemos conservar gran parte del modelo preentrenado y sustituir las cabezas específicas de la nueva tarea.
¿Las nuevas cabezas están entrenadas?
No.
Necesitan aprendizaje con máscaras anotadas.
50. Ejemplo 14 — Un paso de entrenamiento
Este ejemplo presupone que ya existen images y targets producidos por un DataLoader compatible.
import torchdevice = torch.device( "cuda" if torch.cuda.is_available() else "cpu")model = model.to(device)model.train()optimizer = torch.optim.SGD( [ p for p in model.parameters() if p.requires_grad ], lr=0.001, momentum=0.9, weight_decay=0.0005)images = [ image.to(device) for image in images]targets = [ { key: value.to(device) for key, value in target.items() } for target in targets]optimizer.zero_grad()loss_dict = model( images, targets)loss = sum( value for value in loss_dict.values())loss.backward()optimizer.step()print( "Pérdida total:", loss.item())for name, value in loss_dict.items(): print( name, value.item() )
¿Qué demuestra?
Torchvision puede devolver un diccionario de pérdidas para los componentes de detección y segmentación.
¿Es un entrenamiento completo?
No.
Debemos añadir épocas, validación, selección de checkpoint, evaluación COCO y medidas de reproducibilidad.
51. ¿Cómo crear un Dataset real?
Un Dataset personalizado debe cargar, para cada imagen:
- Imagen RGB.
- Máscaras de instancia.
- Categorías.
- Cajas delimitadoras.
- Metadatos necesarios.
¿Qué debemos verificar?
- Las cajas corresponden a las máscaras.
- Las máscaras tienen la misma geometría que la imagen.
- Los identificadores de clase son válidos.
- Las instancias vacías se eliminan o tratan correctamente.
- Las anotaciones duplicadas se revisan.
- Las transformaciones geométricas mantienen la alineación.
¿Qué ocurre con imágenes sin objetos?
El pipeline debe manejar correctamente el caso con cero instancias, de acuerdo con la implementación utilizada.
52. ¿Cómo realizar Data Augmentation?
Las transformaciones geométricas deben actualizar todos los elementos relacionados.
Si reflejamos horizontalmente una imagen, debemos reflejar:
- Imagen.
- Máscaras.
- Cajas.
Ejemplo
Una caja original es:
[x1, y1, x2, y2]
Si la anchura de la imagen es W, una reflexión horizontal puede transformar sus coordenadas a:
[W − x2, y1, W − x1, y2]
bajo la convención de coordenadas utilizada.
¿Por qué importa?
Porque una caja desalineada con su máscara produce supervisión incorrecta.
¿Qué solución ofrece Torchvision?
Las transformaciones de la API v2 permiten trabajar con imágenes, máscaras y cajas mediante tipos de datos estructurados.
53. Ejemplo 15 — Reflexión horizontal sincronizada
import torchdef horizontal_flip( image, masks, boxes): width = image.shape[-1] flipped_image = torch.flip( image, dims=[-1] ) flipped_masks = torch.flip( masks, dims=[-1] ) flipped_boxes = boxes.clone() flipped_boxes[:, 0] = ( width - boxes[:, 2] ) flipped_boxes[:, 2] = ( width - boxes[:, 0] ) return ( flipped_image, flipped_masks, flipped_boxes )flipped_image, flipped_masks, flipped_boxes = ( horizontal_flip( image, masks, boxes ))
¿Qué demuestra?
Una transformación espacial debe mantener la correspondencia entre imagen, máscaras y cajas.
¿Qué debemos hacer en un pipeline real?
Utilizar transformaciones comprobadas y validar visualmente ejemplos transformados.
54. ¿Cómo evaluar un modelo propio?
Una evaluación completa debe considerar:
- Mask AP.
- Box AP.
- AP50.
- AP75.
- AP para objetos pequeños.
- Recall.
- Errores por categoría.
- Falsos positivos.
- Falsos negativos.
- Calidad de contornos.
- Latencia.
¿Por qué no basta con Accuracy?
Porque el número de detecciones cambia entre imágenes y necesitamos evaluar emparejamientos entre predicciones e instancias verdaderas.
¿Por qué no basta con Mean IoU?
Porque una evaluación de instancias debe penalizar también objetos omitidos, duplicados o inexistentes.
55. ¿Qué significa emparejar predicciones con objetos reales?
Un evaluador debe determinar qué predicción corresponde a qué instancia anotada.
Factores utilizados
- Categoría.
- Solapamiento.
- Puntuación.
- Umbral IoU.
- Reglas del protocolo.
¿Podemos asignar varias predicciones al mismo objeto real?
En una evaluación convencional de detecciones, normalmente solo una predicción puede contar como verdadero positivo para una instancia real, bajo las reglas de emparejamiento.
Las detecciones duplicadas pueden contabilizarse como falsos positivos.
56. ¿Qué es el problema de objetos pequeños?
Los objetos pequeños ocupan pocas posiciones espaciales.
Ejemplo
Una fotografía de estantería contiene etiquetas diminutas.
¿Qué puede ocurrir?
Las reducciones de resolución en el backbone pueden eliminar detalles importantes.
Posibles estrategias
- Mayor resolución de entrada.
- Feature Pyramid Networks.
- Recortes de alta resolución.
- Más ejemplos de objetos pequeños.
- Ajustes del muestreo.
- Arquitecturas especializadas.
¿Aumentar resolución siempre mejora?
No.
Incrementa el coste y no garantiza que el modelo disponga de anotaciones suficientes para aprender la tarea.
57. ¿Qué es Occlusion?
Occlusion (Oclusión) ocurre cuando un objeto tapa parcialmente otro.
¿Por qué dificulta la segmentación?
Porque los límites de las instancias pueden ser ambiguos y solo se observa una parte de determinados objetos.
¿Qué ayuda?
- Datos de entrenamiento con oclusiones.
- Representaciones contextuales.
- Anotaciones consistentes.
- Evaluación específica de casos difíciles.
¿Puede el modelo separar objetos que se tocan?
Puede hacerlo cuando aprende señales suficientes, pero no existe una garantía universal.
58. ¿Qué alternativas existen a Mask R-CNN?
La segmentación de instancias se ha desarrollado mediante diferentes familias.
YOLACT
Propone una arquitectura orientada a segmentación de instancias eficiente mediante combinación de prototipos y coeficientes de máscaras.
SOLO
Plantea la segmentación de instancias mediante una estrategia de asignación espacial.
Modelos basados en Transformers
Algunas arquitecturas utilizan consultas de objetos y decoders especializados para producir clases y máscaras.
Modelos de segmentación guiada por prompts
Pueden producir máscaras a partir de indicaciones espaciales o visuales, como puntos y cajas.
¿Todos estos sistemas resuelven exactamente la misma tarea?
No necesariamente.
La segmentación automática de instancias con clases conocidas y la segmentación interactiva guiada por prompts tienen protocolos y objetivos distintos.
59. ¿Qué es la segmentación guiada por prompts?
Es una familia de métodos donde una indicación ayuda a seleccionar qué objeto o región debe segmentarse.
Ejemplos de prompts
- Un punto dentro del objeto.
- Una caja aproximada.
- Una máscara preliminar.
¿Es lo mismo que detección automática de todas las instancias?
No.
Un sistema guiado necesita una indicación o un mecanismo adicional para seleccionar las regiones.
¿Puede combinarse con un detector?
Sí.
Un detector puede proporcionar cajas y un segmentador guiado puede refinarlas.
60. Segmentación de Instancias en Keras
Keras puede utilizarse para construir sistemas de segmentación de instancias mediante arquitecturas especializadas o implementaciones compatibles con sus APIs.
Sin embargo, no debemos confundir una U-Net multiclase sencilla con un modelo completo de segmentación de instancias.
¿Por qué?
Porque una U-Net semántica produce categorías por píxel.
Una arquitectura de instancias necesita distinguir objetos individuales.
¿Qué componentes adicionales pueden requerirse?
- Predicción de objetos.
- Identificación de instancias.
- Máscaras por instancia.
- Emparejamiento entre predicciones y anotaciones.
- Posprocesamiento.
¿Qué enfoque práctico recomendamos?
Para comenzar con un sistema completo de Mask R-CNN, Torchvision ofrece un flujo oficial documentado y modelos preentrenados.
Keras puede ser apropiado cuando se dispone de una implementación de instancias compatible y mantenida.
61. Ejemplo 16 — Cabeza de máscara educativa con Keras
Este ejemplo demuestra cómo generar probabilidades de máscara a partir de características de regiones ya extraídas.
No implementa por sí mismo un detector completo.
import kerasfrom keras import layersinputs = keras.Input( shape=(14, 14, 256))x = inputsfor _ in range(4): x = layers.Conv2D( 256, kernel_size=3, padding="same", activation="relu" )(x)x = layers.Conv2DTranspose( 256, kernel_size=2, strides=2, activation="relu")(x)outputs = layers.Conv2D( 3, kernel_size=1)(x)mask_head = keras.Model( inputs, outputs)mask_head.summary()
Resultado esperado
Para una región de entrada de:
14 × 14 × 256
la cabeza produce:
28 × 28 × 3
¿Qué representan las tres salidas?
Pueden utilizarse para producir logits de máscaras asociados a tres categorías, según el diseño de entrenamiento.
¿Es Mask R-CNN completa?
No.
Faltan el backbone, la RPN, RoIAlign, la predicción de cajas, la asignación de propuestas y el entrenamiento completo.
62. ¿Cómo visualizar correctamente las instancias?
Una presentación útil puede incluir:
- Imagen original.
- Caja delimitadora.
- Nombre de clase.
- Puntuación.
- Máscara coloreada.
- Identificador de instancia.
¿Por qué utilizar colores diferentes?
Para distinguir objetos próximos de la misma categoría.
¿Los colores tienen que coincidir con las categorías?
No.
Podemos asignar colores por instancia o por clase, pero la leyenda debe indicar qué convención utilizamos.
63. ¿Cómo guardar una predicción?
Una estructura de resultados puede contener:
image_id instance_id category_id score bbox mask
¿Por qué guardar también la puntuación?
Porque puede utilizarse para filtrar y evaluar detecciones.
¿Cómo almacenar la máscara?
Podemos utilizar:
- PNG.
- RLE.
- Polígonos.
- Formatos específicos del sistema.
¿Qué debemos evitar?
Guardar únicamente una visualización RGB si necesitamos reconstruir identificadores o máscaras binarias originales.
64. ¿Cómo medir el área de un objeto?
Una máscara binaria permite contar los píxeles asociados a una instancia.
Fórmula
Área visible en píxeles = Σ máscara
Ejemplo
Si una máscara tiene 850 píxeles positivos:
Área visible = 850 píxeles²
¿Equivale a un área física?
No.
Para obtener unidades físicas necesitamos calibración, escala y, en determinados casos, geometría de cámara.
65. Ejemplo 17 — Medir áreas de instancias
import numpy as npfor object_id, mask in zip( instance_ids, masks): area = int( np.asarray(mask).sum() ) print( f"Instancia {object_id}:", f"{area} píxeles" )
¿Qué demuestra?
Podemos calcular estadísticas individuales de cada objeto.
¿Qué ocurre con objetos parcialmente ocultos?
La medida corresponde a los píxeles positivos de la máscara visible, según la definición de anotación utilizada.
66. ¿Cómo contar objetos?
Cuando el sistema produce una máscara independiente por instancia, podemos contar las detecciones conservadas.
Fórmula básica
Número de objetos = Número de instancias válidas
¿Es un recuento perfecto?
No.
Puede haber objetos omitidos y detecciones duplicadas.
¿Qué debemos evaluar?
Precision, Recall y medidas específicas de conteo.
¿Qué ocurre con objetos parcialmente visibles?
Depende de la definición de objeto válido y del modelo.
67. ¿Qué relación tiene con seguimiento de objetos?
El Object Tracking intenta mantener la identidad de un objeto a lo largo del tiempo.
La segmentación de instancias identifica objetos en imágenes individuales.
¿Son equivalentes?
No.
Una instancia detectada en un fotograma no tiene automáticamente el mismo ID en el siguiente.
¿Cómo combinarlos?
Mediante sistemas de asociación temporal o métodos de seguimiento especializados.
¿Qué resultado obtenemos?
Un sistema de seguimiento con máscaras por objeto, frecuentemente denominado Video Instance Segmentation cuando sigue el protocolo correspondiente.
68. Segmentación de Instancias en comercio electrónico
Una empresa puede utilizar segmentación de instancias para analizar fotografías con varios productos.
Caso 1. Separación de productos
Generar máscaras individuales de los artículos.
Caso 2. Preparación de catálogos
Crear recortes o fondos de forma automatizada.
Caso 3. Conteo visual
Estimar cantidades de productos visibles.
Caso 4. Inspección de estanterías
Identificar posiciones y regiones de artículos.
¿Qué limitación existe?
Los productos parecidos pueden ser difíciles de distinguir.
La segmentación de objetos no proporciona automáticamente su código SKU o identidad comercial exacta.
69. Segmentación de Instancias en robótica
Un robot puede necesitar distinguir objetos manipulables individualmente.
Ejemplo
Una mesa contiene varias piezas.
El sistema debe localizar una pieza específica.
¿Qué puede aportar la segmentación?
Una máscara que delimite la región visible de cada objeto.
¿Es suficiente para sujetar el objeto?
No.
El sistema puede necesitar estimación de profundidad, geometría tridimensional, planificación de agarre y control.
70. Segmentación de Instancias en inspección industrial
Puede utilizarse para separar componentes individuales de una escena.
Ejemplo
Una fotografía contiene veinte tornillos.
Un modelo produce una máscara por tornillo.
¿Qué podemos medir?
- Cantidad de tornillos visibles.
- Superficie aparente.
- Posición relativa.
- Presencia de componentes.
- Características visuales adicionales.
¿Podemos detectar defectos automáticamente?
Es posible si el sistema incluye modelos o reglas específicos para defectos.
La segmentación de instancias por sí sola no implica clasificación de defectos.
71. Segmentación de Instancias en imágenes biomédicas
Puede ser útil cuando necesitamos distinguir estructuras individuales.
Ejemplo
En microscopía, varias células pueden tocarse.
Una máscara semántica podría representar una región celular continua.
Un segmentador de instancias puede intentar separar cada célula.
¿Por qué importa?
Porque permite estudiar características por célula, como su área visible o forma.
¿Es necesario un modelo clínicamente validado?
Para aplicaciones clínicas deben establecerse las validaciones y controles apropiados al uso previsto.
72. Segmentación de Instancias en agricultura
Puede utilizarse para localizar plantas, frutos u otros elementos individuales.
Ejemplo
Un sistema identifica varias manzanas visibles en una fotografía.
¿Qué podemos hacer?
- Contarlas.
- Medir tamaños aparentes.
- Analizar su distribución.
- Relacionarlas con otras estimaciones.
¿Puede calcular automáticamente el rendimiento real de una cosecha?
No.
El recuento visible puede diferir de la cantidad real por oclusiones, cobertura de cámara y errores de detección.
73. Segmentación de Instancias en imágenes satelitales
En imágenes aéreas o satelitales podemos necesitar distinguir estructuras individuales.
Ejemplos
- Vehículos.
- Edificios.
- Embarcaciones.
- Instalaciones específicas.
¿Qué desafío aparece?
Los objetos pueden ser muy pequeños y las imágenes muy grandes.
¿Qué estrategias pueden ayudar?
Procesamiento por parches, preservación de resolución y modelos especializados.
74. Segmentación de Instancias y AI Visibility
Una plataforma de AI Visibility puede integrar sistemas de análisis visual.
Caso 1. Identificación de productos
Separar artículos individuales en imágenes comerciales.
Caso 2. Análisis de activos gráficos
Delimitar objetos o elementos visuales de una marca.
Caso 3. Procesamiento de catálogos
Contar o aislar productos visibles.
Caso 4. Análisis de capturas web
Identificar elementos visuales individuales cuando existan datos adecuados.
¿Qué aporta?
Representaciones espaciales por objeto, útiles para análisis automatizado.
¿Qué no aporta?
No mejora automáticamente la frecuencia de recomendaciones o citas generadas por asistentes externos.
75. ¿La Segmentación de Instancias mejora Recommendation Rate?
No directamente.
Recommendation Rate mide recomendaciones observadas bajo una metodología específica.
La segmentación de instancias analiza objetos dentro de imágenes.
Su utilización en una aplicación propia no cambia por sí sola las recomendaciones de un asistente externo.
76. ¿La Segmentación de Instancias mejora Citation Coverage?
No directamente.
Citation Coverage está relacionada con las referencias registradas en respuestas de asistentes.
Una máscara de objeto no es una cita a una fuente.
La segmentación puede mejorar un sistema de análisis visual, pero no produce automáticamente nuevas citas de marca.
77. ¿Qué errores son frecuentes?
Error 1. Confundir segmentación semántica y de instancias
La segmentación semántica no distingue necesariamente objetos individuales.
Error 2. Confundir detección de objetos y segmentación de instancias
Una caja no equivale a una máscara.
Error 3. Confundir clase e identificador de instancia
Son conceptos diferentes.
Error 4. Utilizar una máscara semántica como si identificara automáticamente todos los objetos
Puede fusionar objetos de la misma categoría.
Error 5. No conservar la correspondencia entre cajas y máscaras
Produce anotaciones incorrectas.
Error 6. Utilizar coordenadas XYWH como si fueran XYXY
Puede generar cajas inválidas.
Error 7. No revisar objetos con máscaras vacías
Puede provocar errores de entrenamiento o evaluación.
Error 8. Aplicar transformaciones distintas a imágenes y máscaras
Destruye la alineación.
Error 9. Redimensionar etiquetas categóricas con interpolación incorrecta
Puede generar valores inexistentes.
Error 10. Confundir umbral de puntuación y umbral de máscara
Controlan elementos diferentes.
Error 11. Utilizar NMS sin revisar sus efectos
Puede eliminar detecciones correctas o conservar duplicados.
Error 12. Calcular únicamente Mask IoU sobre objetos detectados
Ignora objetos omitidos y falsas detecciones.
Error 13. Interpretar AP50 como una simple media de IoU
No es equivalente.
Error 14. Confundir Box AP y Mask AP
Utilizan criterios de solapamiento diferentes.
Error 15. Ignorar clases minoritarias
Puede ocultar un rendimiento desigual.
Error 16. Evaluar únicamente imágenes sencillas
Puede sobreestimar la generalización.
Error 17. No considerar oclusiones
Puede afectar al reconocimiento de objetos parcialmente visibles.
Error 18. Utilizar imágenes de menor resolución sin comprobar objetos pequeños
Puede provocar pérdida de detalles.
Error 19. Suponer que un checkpoint COCO conoce cualquier marca comercial
Solo contiene las clases y representaciones aprendidas durante su entrenamiento.
Error 20. Confundir la salida de Mask R-CNN con una máscara semántica única
Produce una colección de predicciones individuales.
Error 21. No incluir el fondo al configurar num_classes en Torchvision
Puede provocar incompatibilidades de las cabezas.
Error 22. Suponer que una cabeza nueva está entrenada por sustituir sus capas
Los pesos nuevos necesitan aprendizaje.
Error 23. Utilizar el Test Set para elegir umbrales
Introduce sesgo de selección.
Error 24. Confundir segmentación visible y amodal
Representan objetivos diferentes.
Error 25. Asociar la segmentación con mayores citas en asistentes externos
No existe una relación automática.
78. Buenas prácticas para Segmentación de Instancias
- Definir qué cuenta como instancia.
- Diferenciar categorías semánticas e IDs individuales.
- Documentar las convenciones de cajas.
- Utilizar máscaras de calidad.
- Verificar la correspondencia entre cajas, categorías y máscaras.
- Mantener transformaciones geométricas sincronizadas.
- Validar el formato del Dataset.
- Gestionar correctamente imágenes sin objetos.
- Utilizar un modelo preentrenado como línea base cuando sea apropiado.
- Sustituir las cabezas para nuevas categorías.
- Entrenar con datos representativos.
- Evaluar Mask AP y Box AP.
- Analizar AP50 y AP75.
- Evaluar objetos pequeños, medianos y grandes.
- Ajustar los umbrales mediante validación.
- Revisar detecciones duplicadas.
- Medir Precision y Recall.
- Analizar errores por clase.
- Controlar casos con oclusión.
- Medir latencia y memoria.
- Evaluar el rendimiento en hardware objetivo.
- Utilizar un conjunto de prueba independiente.
- Documentar las versiones de Torchvision y pesos.
- Verificar las licencias del dataset.
- Examinar visualmente predicciones difíciles.
Preguntas frecuentes sobre Segmentación de Instancias
¿Qué es Instance Segmentation?
Es una tarea de visión artificial que identifica cada objeto individual y produce una máscara por instancia.
¿Qué significa instancia?
Es una ocurrencia individual de un objeto.
¿Qué diferencia existe entre segmentación semántica y de instancias?
La semántica clasifica píxeles; la de instancias también distingue objetos individuales.
¿Qué es segmentación panóptica?
Es una tarea que combina información semántica de la escena y diferenciación de instancias.
¿Qué son Things y Stuff?
Son categorías de objetos contables y regiones no necesariamente contables.
¿Qué es una máscara de instancia?
Es una representación espacial de los píxeles de un objeto individual.
¿Las máscaras tienen que ser binarias?
Pueden almacenarse como probabilidades durante inferencia o como máscaras binarias para anotación y evaluación.
¿Qué es una Bounding Box?
Es una caja que delimita un objeto.
¿Qué diferencia existe entre una caja y una máscara?
La caja es rectangular; la máscara puede describir contornos irregulares.
¿Qué es Mask R-CNN?
Es una arquitectura que combina detección de objetos y predicción de máscaras individuales.
¿Quién desarrolló Mask R-CNN?
Kaiming He, Georgia Gkioxari, Piotr Dollár y Ross Girshick.
¿Cuándo se publicó?
En ICCV 2017.
¿Qué es Faster R-CNN?
Es una arquitectura de detección de objetos basada en propuestas de regiones.
¿Qué añade Mask R-CNN?
Una rama de máscaras y mecanismos adecuados para extraer características alineadas.
¿Qué es Backbone?
Es la red que extrae características visuales.
¿Qué es ResNet-50?
Es una arquitectura residual que puede utilizarse como backbone.
¿Qué es FPN?
Feature Pyramid Network.
¿Para qué sirve FPN?
Para procesar características de diferentes escalas.
¿Qué es RPN?
Region Proposal Network.
¿Qué produce RPN?
Regiones candidatas a contener objetos.
¿Qué significa RoI?
Region of Interest.
¿Qué es RoIAlign?
Es una operación que extrae características de regiones preservando mejor la alineación espacial.
¿Qué diferencia existe entre RoIPool y RoIAlign?
RoIAlign evita determinadas cuantizaciones espaciales utilizadas por RoIPool.
¿Qué es una Mask Head?
Es la rama que predice máscaras para regiones de interés.
¿Qué es Box Head?
Es la parte encargada de clasificación y ajuste de cajas, según la arquitectura.
¿Qué son logits?
Son puntuaciones no normalizadas del modelo.
¿Qué es Sigmoid?
Es una función que convierte logits individuales en valores entre cero y uno.
¿Qué es Mask Threshold?
Es el umbral utilizado para convertir probabilidades de máscara en una región binaria.
¿Qué es Score Threshold?
Es el umbral que filtra detecciones por puntuación.
¿Qué es NMS?
Non-Maximum Suppression.
¿Para qué sirve NMS?
Para reducir detecciones duplicadas.
¿Qué es Mask IoU?
Es Intersection over Union calculada entre máscaras.
¿Qué es Box IoU?
Es Intersection over Union calculada entre cajas.
¿Qué es Average Precision?
Es una métrica que resume Precision y Recall bajo un protocolo de evaluación.
¿Qué es Mask AP?
Es Average Precision basada en el emparejamiento de máscaras.
¿Qué es Box AP?
Es Average Precision basada en cajas delimitadoras.
¿Qué significa AP50?
Es AP evaluada con umbral IoU de 0,50.
¿Qué significa AP75?
Es AP evaluada con umbral IoU de 0,75.
¿Qué significa AP@[0.50:0.95]?
Es una agregación de AP calculada sobre diez umbrales IoU.
¿Es igual que Mean IoU?
No.
¿Qué es COCO?
Es Common Objects in Context, un dataset y benchmark de visión por computadora.
¿Qué es RLE?
Run-Length Encoding.
¿Para qué sirve RLE?
Para representar máscaras mediante codificación de longitudes.
¿Qué es iscrowd?
Es un campo utilizado para indicar determinadas anotaciones agrupadas o tratamientos especiales.
¿Qué es Penn-Fudan?
Es un dataset de peatones utilizado en tutoriales de segmentación de instancias.
¿Se puede usar Mask R-CNN en PyTorch?
Sí.
¿Torchvision proporciona Mask R-CNN?
Sí.
¿Qué diferencia existe entre maskrcnn_resnet50_fpn y la variante v2?
Utilizan configuraciones y procedimientos de entrenamiento diferentes.
¿Se puede utilizar en CPU?
Sí, aunque el rendimiento puede ser más lento.
¿Es obligatoria una GPU?
No, pero puede facilitar entrenamiento e inferencia.
¿Qué es Transfer Learning?
Es reutilizar características preentrenadas en una nueva tarea.
¿Qué significa num_classes?
Es el número de clases de salida, incluyendo el fondo en los constructores de Mask R-CNN de Torchvision.
¿Qué formato tienen las cajas en Torchvision?
Habitualmente [x1, y1, x2, y2].
¿Qué formato tienen las máscaras de entrenamiento?
Normalmente [N, H, W].
¿Qué formato tienen las máscaras de inferencia?
Habitualmente [N, 1, H, W].
¿Qué es collate_fn?
Es una función que agrupa las muestras de un DataLoader.
¿Por qué es importante en segmentación de instancias?
Porque las imágenes pueden contener diferentes números de objetos.
¿Qué es Data Augmentation?
Es aplicar transformaciones para ampliar la variedad de los datos de entrenamiento.
¿Deben transformarse las cajas y máscaras junto con la imagen?
Sí, cuando la transformación afecta a la geometría.
¿Qué es Occlusion?
Es la ocultación parcial de un objeto por otro.
¿Qué es Amodal Segmentation?
Es una tarea que intenta representar también las partes ocultas de un objeto.
¿Qué es YOLACT?
Es una arquitectura de segmentación de instancias basada en prototipos y coeficientes de máscaras.
¿Qué es SOLO?
Es una familia de métodos de segmentación de instancias basada en asignación espacial.
¿Qué es segmentación guiada por prompts?
Es producir máscaras utilizando indicaciones como puntos o cajas.
¿Es idéntica a segmentación automática de instancias?
No necesariamente.
¿Se puede utilizar Keras?
Sí, mediante implementaciones apropiadas de segmentación de instancias.
¿Una U-Net multiclase equivale a Mask R-CNN?
No.
¿Puede identificar varios productos?
Sí, si el modelo dispone de categorías y entrenamiento apropiados.
¿Puede contar objetos?
Puede estimar el número de instancias detectadas.
¿Puede medir el área de cada objeto?
Sí, en píxeles; para medidas físicas suele requerirse calibración.
¿Puede separar botellas que se tocan?
Puede hacerlo si el modelo aprende a distinguir esas instancias.
¿Puede seguir objetos en vídeo?
Necesita un sistema de seguimiento o una arquitectura especializada.
¿Qué es Video Instance Segmentation?
Es segmentar y mantener identidades de instancias a lo largo de una secuencia de vídeo.
¿Puede detectar defectos industriales?
Puede contribuir, pero la detección de defectos necesita una definición y entrenamiento apropiados.
¿Puede utilizarse para fotografías comerciales?
Sí.
¿Puede reconocer logotipos individuales?
Puede entrenarse para determinadas categorías visuales, con las limitaciones correspondientes.
¿La Segmentación de Instancias mejora Recommendation Rate?
No directamente.
¿Aumenta Citation Coverage?
No directamente.
¿Por qué importa para AI Visibility?
Puede formar parte de herramientas que analizan objetos y activos visuales de marca.
Conceptos relacionados
- Inteligencia Artificial.
- Aprendizaje Automático.
- Aprendizaje Profundo.
- Visión por Computadora.
- Clasificación de Imágenes.
- Detección de Objetos.
- Segmentación Semántica.
- Segmentación de Instancias.
- Segmentación Panóptica.
- Instance Mask.
- Bounding Box.
- Mask R-CNN.
- Faster R-CNN.
- Region Proposal Network.
- Region of Interest.
- RoIAlign.
- RoIPool.
- Feature Pyramid Network.
- ResNet.
- Mask Head.
- Box Head.
- Mask IoU.
- Box IoU.
- Average Precision.
- Mask AP.
- Box AP.
- AP50.
- AP75.
- Non-Maximum Suppression.
- COCO.
- Run-Length Encoding.
- Data Augmentation.
- Transfer Learning.
- Fine-Tuning.
- Object Tracking.
- Video Instance Segmentation.
- Amodal Segmentation.
- YOLACT.
- SOLO.
- PyTorch.
- Torchvision.
- NumPy.
- AI Visibility.
Conclusión
La Segmentación de Instancias (Instance Segmentation) es una técnica de visión artificial que permite identificar y delimitar objetos individuales dentro de una imagen.
Su principal diferencia respecto a la segmentación semántica es que conserva la identidad de cada instancia, incluso cuando varios objetos comparten la misma categoría.
Esta capacidad permite desarrollar aplicaciones que necesitan contar, separar, medir o analizar objetos individuales.
Mask R-CNN es una de las arquitecturas fundamentales del área.
Combina propuestas de regiones, extracción de características, RoIAlign y predicción de máscaras para producir resultados por objeto.
La evaluación requiere medidas específicas como Mask AP, además de considerar Box AP, precisión, recall, objetos pequeños y calidad de contornos.
El entrenamiento depende de anotaciones individuales, cajas válidas, máscaras correctamente alineadas y categorías consistentes.
PyTorch y Torchvision proporcionan implementaciones preentrenadas que pueden utilizarse como referencia o adaptarse mediante Transfer Learning.
En aplicaciones empresariales, la segmentación de instancias puede ser útil para analizar fotografías comerciales, inventarios, componentes industriales, imágenes satelitales y activos visuales de marca.
En AI Visibility puede formar parte de sistemas de análisis visual, pero no genera automáticamente nuevas recomendaciones ni citas en asistentes externos.
La conclusión fundamental es que la segmentación de instancias añade identidad individual a la comprensión espacial de imágenes. No solamente identifica qué objetos están presentes y dónde se encuentran: también delimita los píxeles visibles correspondientes a cada objeto, permitiendo aplicaciones visuales más detalladas y estructuradas.
