Ultralytics YOLO27: Únete a la lista de espera.
Get Started
Desarrolla con Ultralytics Platform·Crea el conjunto de datos·Lección 3/10
Lecciónintermedio

Anotación inteligente y etiquetado por lotes

Elige un modelo de etiquetado y un umbral de confianza midiendo el trabajo de revisión; después, ejecuta la anotación por lotes y comprueba el resultado con la tasa de edición.

Dibujar cajas a mano permite procesar quizá 100 imágenes por hora; revisar buenas preetiquetas puede ser varias veces más rápido. Pero un modelo de etiquetado con un umbral de confianza inadecuado puede generar más trabajo del que ahorra, y si no revisas sus resultados, el siguiente modelo aprenderá sus errores. En esta lección medirás el trabajo de revisión para cada umbral con datos reales etiquetados, para que elijas el umbral basándote en cifras y no en suposiciones.

Resultado

Puedes medir cuántos borrados y redibujos provoca un modelo de etiquetado con cada umbral de confianza, elegir el que menos trabajo requiera, ejecutar la anotación por lotes con ese umbral y calcular la tasa de edición de tu revisión.

Vía rápida
Si ya tienes experiencia, aquí tienes un resumen.
  1. Pulsa S en el editor: SAM para etiquetar formas con clics, YOLO o modelos basados en clases indicadas para imágenes completas.

  2. Prueba distintos valores de confianza en imágenes etiquetadas y elige el umbral que genere menos ediciones por imagen.

  3. Ejecuta Más acciones > Anotación por lotes; antes de empezar, se guarda una versión del conjunto de datos.

  4. Revisa todas las imágenes, guarda una segunda versión y calcula la tasa de edición con Comparar versiones.

Práctico

Tres formas de preetiquetar#

En el editor de anotaciones, el modo Draw (V) es manual y el modo Smart (S) permite que un modelo proponga etiquetas:

Editor de anotaciones de Ultralytics Platform en el conjunto de datos medical-pills, con los botones Draw y Smart en la barra de herramientas y cajas azules alrededor de pastillas en un blíster

FamiliaFuncionamientoTareasCoste
SAM (SAM 2.1 Tiny a Large, SAM 3, SAM 3.1 predeterminado)Haz clic en un objeto para crear una máscara; haz clic fuera para añadirla y dentro para restarla; A activa o desactiva la aplicación automáticaDetección, segmentación, semántica, OBBGratis
YOLO (modelos oficiales o propios)Predict añade las detecciones del modelo; Map classes alinea las clases del modelo y del conjunto de datos; se omiten los duplicados con IoU de 0,7 o másDetección, segmentación, semántica, OBB, poseGratis en el editor
Basados en clases indicadas (Moondream 3.1 predeterminado, YOLOE-26x, SAM 3 Text y otros)Busca en la imagen los nombres de clase del conjunto de datos; los modelos de proveedores de pago se ejecutan con tu propia clave de APIConjuntos de datos de detección con entre 1 y 200 clasesModelos alojados gratuitos

Editor de anotaciones de Ultralytics Platform en modo Smart, con un modelo YOLO y un botón Predict en la barra de herramientas, sobre las cajas de pastillas de la imagen

SAM requiere un clic por objeto y genera las formas más ajustadas. Las predicciones del modelo requieren un clic por imagen y su calidad depende del modelo, así que el resto de esta lección trata sobre cómo elegirlo y ajustarlo.

Elige el modelo de etiquetado#

Un modelo v0 poco potente entrenado con 100–200 etiquetas manuales sigue siendo mejor que empezar desde cero, y para v1 suele ser un compañero útil de aprendizaje activo. El rendimiento de los modelos basados en clases indicadas varía mucho según el dominio: algunos detectan casi todo en fotos cotidianas, pero se les escapan la mayoría de los objetos en imágenes de PCB, radiografías o tiendas; por eso, comprueba diez predicciones antes de confiar en uno.

Ejemplo práctico: mide el trabajo de revisión para cada umbral#

El umbral de confianza determina en qué emplean su tiempo los revisores: si es demasiado bajo, borran cajas falsas; si es demasiado alto, dibujan las cajas que el modelo ha omitido. Mídelo con imágenes que ya tengan etiquetas correctas; aquí se usan las 128 imágenes etiquetadas de COCO128 y un YOLO26n preentrenado como modelo de etiquetado:

from pathlib import Path

import torch

from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset
from ultralytics.utils.metrics import box_iou
from ultralytics.utils.ops import xywhn2xyxy

data = check_det_dataset("coco128.yaml")  # 128 labeled images, downloaded on first use
images = sorted(Path(data["train"]).glob("*.jpg"))
results = YOLO("yolo26n.pt").predict(images, conf=0.05, verbose=False)  # your labeling model

def review_work(result, image, conf):
    """Return (kept, delete, draw): correct pre-labels, false positives to delete, missed objects to draw."""
    label = Path(str(image).replace("images", "labels")).with_suffix(".txt")
    lines = label.read_text().splitlines() if label.exists() else []  # no label file = background image
    gt = torch.tensor([[float(x) for x in line.split()] for line in lines]).reshape(-1, 5)
    h, w = result.orig_shape
    gt_boxes, gt_cls = xywhn2xyxy(gt[:, 1:], w=w, h=h), gt[:, 0]
    boxes = result.boxes[result.boxes.conf >= conf]
    iou = box_iou(boxes.xyxy, gt_boxes) * (boxes.cls[:, None] == gt_cls[None])  # IoU with same-class boxes only
    matched = set()
    for row in iou:  # greedily match each prediction to its best unmatched ground-truth box
        for j in row.argsort(descending=True).tolist():
            if row[j] >= 0.5 and j not in matched:
                matched.add(j)
                break
    return len(matched), len(boxes) - len(matched), len(gt) - len(matched)

print("conf  kept  delete  draw  edits/image")
for conf in (0.1, 0.25, 0.4, 0.5, 0.7):
    kept, delete, draw = (sum(t) for t in zip(*(review_work(r, i, conf) for r, i in zip(results, images))))
    print(f"{conf:<5} {kept:>4} {delete:>7} {draw:>5} {(delete + draw) / len(images):>12.1f}")
conf  kept  delete  draw  edits/image
0.1    590     490   339          6.5
0.25   468     138   461          4.7
0.4    386      58   543          4.7
0.5    328      35   601          5.0
0.7    230       6   699          5.5

Cómo funciona y qué indican los resultados:

  1. El modelo predice una vez con un valor conf=0.05 bajo; luego, cada umbral filtra las mismas predicciones, así que probar varios umbrales es rápido.
  2. review_work empareja cada predicción con una caja de referencia de la misma clase cuyo IoU sea de 0,5 o más. Las predicciones sin emparejar son cajas que un revisor borra; los objetos de referencia sin emparejar son objetos que un revisor dibuja.
  3. El número de ediciones por imagen alcanza su mínimo entre 0,25 y 0,4 (4,7). Por debajo de ese intervalo, se disparan los borrados; por encima, las omisiones.
  4. Incluso con el mejor umbral, los revisores dibujan unas 3,6 cajas por imagen, porque los muchos objetos pequeños de la cola larga de COCO son difíciles de detectar para un modelo nano.

Reglas para decidir: elige el umbral con menos ediciones por imagen. Si dibujar predomina con todos los umbrales, el modelo de etiquetado es demasiado débil para los datos; usa un modelo más grande o el que has ajustado. Si borrar predomina incluso con un umbral de 0,5, el modelo confunde clases parecidas; comprueba la matriz de confusión antes de etiquetar más. En tu propio proyecto, prueba varios umbrales con tu modelo ajustado en 50–100 imágenes que ya hayas etiquetado.

Ejecuta la anotación por lotes#

La anotación por lotes ejecuta un modelo YOLO o basado en clases indicadas en todo el conjunto de datos. Ábrela desde Más acciones > Anotación por lotes o selecciona Anotar todo en la notificación que aparece tras una predicción en el editor:

Cuadro de diálogo Batch Annotation de Ultralytics Platform con Moondream 3.1 seleccionado, ejemplos de predicciones en seis fotos de trabajadores, un selector Include annotated images y un coste estimado de 0,05 $

  1. Elige el modelo. Los conjuntos de datos de detección se abren con Moondream 3.1 seleccionado; cámbialo por tu modelo ajustado o tu modelo YOLO.
  2. Si usas un modelo YOLO, configura la confianza con el umbral elegido al probar varios valores (el valor predeterminado es 0.25) y el IoU (0.7), y comprueba los ejemplos de predicciones.
  3. Deja desactivada la opción Incluir imágenes anotadas para etiquetar solo las imágenes sin etiquetar.
  4. Comprueba el Coste estimado (1,00 $ por cada 1000 imágenes; mínimo de 0,01 $) y haz clic en Iniciar.

Al iniciar una ejecución, primero se guarda una versión del conjunto de datos para que puedas restaurar el estado anterior. Detener conserva y cobra las imágenes procesadas hasta ese momento.

Revisa las imágenes y, después, mide la tasa de edición#

Las predicciones se guardan como anotaciones normales, así que nada indica que estén sin revisar. Filtra por clase para comprobar primero las clases poco frecuentes y ordena por Anotaciones de forma ascendente (posibles omisiones) y descendente (escenas abarrotadas en las que se fusionan las cajas). Después, crea una versión, abre Comparar versiones en la pestaña Versions y selecciona v_auto como versión Desde:

RecuentoSignificado
AñadidosObjetos que el modelo no detectó, más la copia corregida de cada caja modificada
EliminadosFalsos positivos, más la versión original de cada caja modificada
Tasa de edición(añadidos + eliminados) ÷ anotaciones en v_auto; es un límite superior porque cada caja corregida cuenta dos veces

Registra la tasa de edición de cada lote. Si aumenta, es una señal de alerta temprana de que las imágenes nuevas se han alejado de lo que conoce el modelo de etiquetado. La lección sobre buenas prácticas de anotación trata las guías de etiquetado y la concordancia entre revisores.

Errores habituales#

Entrenar con predicciones sin revisar

Síntoma: cada nuevo entrenamiento obtiene más o menos la misma puntuación y siempre se pasan por alto los mismos objetos. Solución: las preetiquetas sin revisar incorporan los errores sistemáticos del modelo de etiquetado al conjunto de datos como si fueran verdaderos: clases parecidas, bordes de cajas sistemáticamente holgados u objetos que nunca detecta. Revisa todas las imágenes antes de que se incorporen a una versión de entrenamiento.

Confiar en un modelo con indicaciones de clase para un dominio especializado

Síntoma: termina la anotación por lotes, pero la mayoría de los objetos siguen sin etiquetar. Solución: ejecuta primero el modelo en el editor con diez imágenes representativas. Si no detecta más que unos pocos objetos, etiqueta manualmente un conjunto inicial y entrena una versión v0.

Las clases del modelo y del conjunto de datos no coinciden

Síntoma: las cajas predichas tienen nombres de clase incorrectos. Solución: cuando las clases del modelo difieren de las del conjunto de datos, el paso Map classes asigna cada clase del modelo a una clase del conjunto de datos o la omite. Asigna las clases con cuidado; una asignación incorrecta cambia la etiqueta de todas las cajas de esa clase.

Pruébalo

Ejecuta threshold_sweep.py con tu modelo de etiquetado en 50–100 imágenes que ya hayas etiquetado y elige el umbral que requiera menos ediciones por imagen. Ejecuta la anotación por lotes con ese umbral en al menos 50 imágenes sin etiquetar, revísalas todas, guarda una versión y calcula la tasa de edición con Comparar versiones.

Cuándo se considera terminado
Has terminado la lección cuando se cumplen todas estas condiciones.
  • Tienes una tabla de barrido para tu modelo de etiquetado y un umbral elegido, con su justificación.

  • Has revisado todas las imágenes preetiquetadas y tienes dos versiones que delimitan la revisión.

  • Has calculado la tasa de edición y has identificado el error más habitual del modelo de etiquetado.

Mostrar solución

Ejemplo práctico: el barrido elige 0.35 para un ajuste fino de inspección de pastillas. La anotación por lotes guarda v4 con 1,240 anotaciones. Tras la revisión, Comparar versiones v4 → v5 muestra 96 elementos añadidos y 152 eliminados, así que la tasa de edición es (96 + 152) ÷ 1,240 = 20 %. Si hay más elementos eliminados que añadidos, significa que el modelo predice de más: al inspeccionar los cuadros eliminados, ves que el modelo marca como pastillas los reflejos de los blísteres. De ahí se derivan dos acciones: aumenta un paso la confianza (0.35 → 0.45) para el siguiente lote y confirma que la tasa disminuye; y añade 30 imágenes revisadas de envases brillantes a la siguiente versión de entrenamiento para que el ajuste fino aprenda a distinguirlos.

Qué viene después

Ya tienes las etiquetas. Ahora demostrarás que no hay filtraciones entre las particiones del conjunto de datos y fijarás una versión.