YOLO Vision 2026:

YOLOE: Detección y segmentación de vocabulario abierto en tiempo real#

Ultralytics YOLOE (Real-Time Seeing Anything) es un modelo de detección de vocabulario abierto y segmentación de instancias: en lugar de una lista de clases fija en el momento del entrenamiento, toma las categorías que deseas en el momento de la inferencia como un texto descriptivo, un ejemplo visual o un vocabulario integrado de 4.585 nombres. Construido sobre las arquitecturas Ultralytics YOLO —YOLOv8, YOLO11 y YOLO26— e inspirado en YOLO-World, YOLOE alcanza una precisión de vanguardia sin entrenamiento previo (zero-shot) con una velocidad cercana a la de un YOLO de conjunto cerrado.



Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀

Inicio rápido#

Indica las clases que quieras y ejecuta. YOLOE-26 devuelve cuadros delimitadores y máscaras de segmentación de instancias para categorías con las que nunca ha sido entrenado.

Detecta cualquier cosa que puedas nombrar
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")

# "double-decker bus" is not a COCO class; YOLOE resolves it from the words alone
model.set_classes(["double-decker bus", "person"])

results = model.predict("https://ultralytics.com/images/bus.jpg")
results[0].show()

La primera llamada a set_classes() descarga un codificador de texto; consulta la sección Instalación y requisitos antes de realizar el despliegue en una máquina sin acceso a la red.

Elegir un modo de indicación#

YOLOE admite tres modos de indicación, y la elección determina qué punto de control (checkpoint) cargas y cómo se ven las etiquetas de tus clases. Selecciona la fila que coincida con lo que puedes proporcionar en el momento de la inferencia.

YOLOE detectando y segmentando objetos a partir de indicaciones de texto, indicaciones visuales y su vocabulario sin indicaciones

ModoPunto de controlTú proporcionasNombres de clases en los resultadosÚsalo cuando
Indicación de texto*-seg.ptNombres de clases como cadenas de textoExactamente los nombres que pasastePuedes describir el objetivo en palabras; la opción habitual
Indicación visual*-seg.ptCuadros de ejemplo en una imagen de referenciaGenérico object0, object1, …No puedes expresar el objetivo con palabras: una pieza específica, un logotipo o un defecto
Sin indicaciones*-seg-pf.ptNadaNombres del vocabulario integrado de 4.585 nombresEstás catalogando o explorando y no sabes de antemano qué buscar
Dos sorpresas comunes
  • Las indicaciones visuales no conservan tus etiquetas. Los identificadores de clase en visual_prompts agrupan los ejemplos; el modelo los reporta como object0, object1, y así sucesivamente. Haz la correspondencia con tus propios nombres manualmente.
  • Los puntos de control sin indicaciones rechazan set_classes(). Llamarlo en un modelo *-seg-pf.pt genera AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.. Carga un punto de control *-seg.pt en su lugar cuando necesites tus propias clases.

Instalación y requisitos#

YOLOE se incluye en el paquete principal de Ultralytics:

pip install -U ultralytics

La indicación de texto requiere además un codificador de texto, el cual se descarga en el primer uso en lugar de durante la instalación:

  • La primera llamada a set_classes() instala ultralytics/CLIP desde GitHub con pip (proporciona el tokenizador) y descarga un codificador de texto TorchScript en el directorio de trabajo actual. YOLOE-26 descarga mobileclip2_b.ts, de unos 254 MB; YOLOE-11 y YOLOE-v8 descargan mobileclip_blt.ts. Ejecuta la descarga una vez desde el directorio desde el que vas a operar, o copia el archivo allí; de lo contrario, se volverá a solicitar.
  • Ambos pasos requieren acceso a la red, así que ejecuta una predicción guiada antes de realizar el despliegue en una máquina sin conexión o aislada (air-gapped).
  • Las indicaciones visuales y los puntos de control sin indicaciones no necesitan ningún codificador de texto.

Los puntos de control de YOLOE-26 requieren ultralytics 8.4.0 o posterior; las familias YOLOE-11 y YOLOE-v8 están disponibles en versiones anteriores. Una predicción guiada por texto pone a prueba todo el proceso: descarga del punto de control, instalación de CLIP, codificador de texto e inferencia:

yolo predict model=yoloe-26s-seg.pt source="https://ultralytics.com/images/bus.jpg" classes="person"

Para omitir por completo la descarga del codificador de texto en el momento de la inferencia, integra las indicaciones en los pesos una sola vez y reutilízalas; consulta Reutilizar incrustaciones de indicaciones.

Descripción general de la arquitectura#

YOLOE Architecture

YOLOE mantiene la estructura estándar de YOLO —una red troncal (backbone) convolucional para la extracción de características, un cuello (neck) para la fusión multiescala y una cabeza desacoplada y libre de anclajes que predice clases y cuadros— y añade tres módulos, uno por cada modo de indicación:

  • Alineación de región y texto reparametrizable (RepRTA): Refina las incrustaciones de texto de CLIP mediante una pequeña red auxiliar. Dicha red se ejecuta una vez por cada llamada a set_classes() y se pliega durante la exportación, por lo que no genera costes por fotograma. Lo que sí se ejecuta en cada pase de propagación hacia adelante es la comparación de las incrustaciones de indicaciones almacenadas con las características de las regiones; consulta Limitaciones para conocer el coste que esto supone con un conjunto de indicaciones grande.
  • Codificador de indicaciones visuales activado por semántica (SAVPE): Codifica las características semánticas y de activación a partir de un cuadro de ejemplo, condicionando el modelo a objetos que tengan un aspecto similar. Esta es la ruta de un solo disparo (one-shot) para objetivos difíciles de nombrar, como un logotipo o una pieza específica.
  • Contraste de indicaciones de regiones perezoso (LRPC): Compara las incrustaciones de regiones con un vocabulario integrado de 4.585 nombres, de modo que los puntos de control sin indicaciones reconocen objetos sin necesidad de indicaciones externas ni de un codificador de texto.

La segmentación de instancias proviene de una rama de máscaras en la cabeza de detección, tal como en YOLOv8-Seg, y cada predicción incluye una máscara en results[0].masks. Una vez que el modelo es exportado, los módulos de mundo abierto se reparametrizan en una cabeza YOLO estándar, por lo que el archivo exportado ejecuta la ruta habitual de detección y segmentación.

Modelos disponibles#

Cada punto de control a continuación es un modelo de segmentación de instancias y es compatible con val, predict, export y track. Carga un archivo *-seg.pt para la indicación por texto o visual y un archivo *-seg-pf.pt para la inferencia sin indicaciones; no son intercambiables, consulta Elegir un modo de indicación. Solo los archivos *-seg.pt admiten train; un punto de control sin indicaciones se genera a partir de un modelo entrenado con indicaciones de texto, consulta Entrenar los modelos oficiales desde cero.

Rendimiento de YOLOE en LVIS#

Resultados de zero-shot en el conjunto minival de LVIS a 640 píxeles, extraídos del documento de investigación de Ultralytics YOLO26.

Indicaciones de texto y visuales#

Cada celda de precisión y parámetros muestra indicación de texto / indicación visual; los FLOPs se indican una sola vez. Los parámetros y los FLOPs corresponden a la configuración de detección evaluada en el artículo. La precisión es la cifra Non-E2E del artículo, el único protocolo que reporta para cada modelo en la comparativa; la cabeza de extremo a extremo (end-to-end) de YOLOE-26 se queda por detrás por un máximo de 1,1 AP con indicaciones de texto y 2,6 AP con indicaciones visuales.

ModelomAP50-95mAPrmAPcmAPfparams
(M)
FLOPs
(B)
YOLOE-26n24.7 / 21.920.5 / 17.624.1 / 22.326.1 / 22.43.9 / 3.16.1
YOLOE-26s30.8 / 28.623.9 / 25.129.6 / 27.833.0 / 29.910.7 / 11.021.9
YOLOE-26m35.4 / 33.931.1 / 33.434.7 / 34.036.9 / 33.821.3 / 25.170.6
YOLOE-26l37.8 / 36.335.1 / 37.637.6 / 36.238.5 / 36.125.5 / 29.389.0
YOLOE-26x40.6 / 38.537.4 / 35.340.9 / 38.841.0 / 38.855.2 / 65.2197.7
YOLOE-11s27.5 / 26.321.4 / 22.526.8 / 27.129.3 / 26.410.7 / 10.922.7
YOLOE-11m33.0 / 31.426.9 / 27.132.5 / 31.934.5 / 31.721.0 / 24.870.4
YOLOE-11l35.2 / 33.729.1 / 28.135.0 / 34.636.5 / 33.826.0 / 29.889.5
YOLOE-v8s27.9 / 26.222.3 / 21.327.8 / 27.729.0 / 25.712.3 / 12.629.8
YOLOE-v8m32.6 / 31.026.9 / 27.031.9 / 31.734.4 / 31.126.4 / 28.480.7
YOLOE-v8l35.9 / 34.233.2 / 33.234.8 / 34.637.3 / 34.143.5 / 47.3167.6

Sin prompt#

Los puntos de control sin indicaciones responden a partir de su vocabulario integrado sin que se proporcione ninguna indicación. Cada celda de precisión muestra end-to-end / Non-E2E, los dos protocolos bajo los cuales el artículo evalúa YOLOE-26; la página de YOLO26 cita la columna Non-E2E.

ModelomAP50-95mAPrmAPcmAPfparams
(M)
FLOPs
(B)
YOLOE-26n-pf16.6 / 17.715.7 / 15.815.3 / 16.417.9 / 19.22.35.3
YOLOE-26s-pf21.4 / 22.616.2 / 20.220.1 / 20.923.5 / 24.59.020.8
YOLOE-26m-pf25.7 / 26.426.7 / 24.524.0 / 25.026.9 / 27.919.468.4
YOLOE-26l-pf27.2 / 28.026.3 / 25.725.7 / 26.828.7 / 29.523.686.8
YOLOE-26x-pf29.9 / 31.127.5 / 28.929.1 / 30.731.1 / 31.753.1194.4

Con indicaciones de texto y visuales, los modelos YOLOE-26 superan a sus homólogos YOLOE-11 y YOLOE-v8 en cada escala correspondiente en mAP50-95, manteniéndose por debajo de la línea de la versión v8 en cuanto a parámetros y FLOPs. En la misma partición (split), el artículo reporta YOLO-Worldv2 con 24,4 (S), 32,4 (M) y 35,5 (L), y los detectores basados en Transformer GLIP-T con 26,0, GDINO-T con 27,4 y DetCLIP-T con 34,4, cada uno con entre 155 y 232 M de parámetros. El artículo original de YOLOE añade dos resultados para los modelos a escala v8 que introdujo. En LVIS, YOLOE-v8s supera a YOLO-Worldv2-S por 3,5 AP con un tercio del coste de entrenamiento y 1,4 veces la velocidad de inferencia. Al transferirse a COCO, YOLOE-v8l gana 0,6 AP de cuadro y 0,4 AP de máscara en comparación con el modelo de conjunto cerrado YOLOv8-L, con un tiempo de entrenamiento casi 4 veces menor.

Recuentos del artículo frente a puntos de control publicados

El artículo de YOLO26 evalúa una configuración de detección. Los pesos publicados son puntos de control de segmentación e incluyen una rama de máscaras, SAVPE y la proyección de texto superpuesta, por lo que un yoloe-26l-seg.pt cargado reporta 35,4 M y 142,0 B en lugar de los 25,5 M y 89,0 B anteriores. En ambos casos, la cifra de FLOPs excluye la similitud entre región y texto, por lo que el coste real aumenta con el tamaño del conjunto de indicaciones aunque la columna no varíe; consulta Limitaciones.

Ejemplos de uso#

Cada ejemplo de YOLOE que se muestra a continuación se ejecuta desde la API de Python. La predicción con indicaciones de texto, la validación, la exportación, el rastreo y el entrenamiento simple también funcionan desde la CLI; las recetas de ajuste fino (fine-tuning) y las indicaciones visuales pasan una clase de entrenador o predictor como argumento, lo cual solo acepta la API de Python.

Uso de entrenamiento#

Ajusta con precisión (fine-tune) cualquier punto de control *-seg.pt publicado en tu propio conjunto de datos de YOLO. Esto sigue principalmente el procedimiento estándar de entrenamiento de YOLO; la diferencia radica en el entrenador que pasas. YOLOEPESegTrainer fusiona los nombres de tus clases en la cabeza y realiza el ajuste fino a partir de ahí, que es lo que buscas para tus propias etiquetas; el entrenador predeterminado no entrena con los nombres de tus clases.



Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
Ejemplo
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer

model = YOLOE("yoloe-26s-seg.pt")

results = model.train(
    data="coco128-seg.yaml",
    epochs=80,
    patience=10,
    trainer=YOLOEPESegTrainer,  # <- Important: the fine-tuning trainer, not the default
)
Entrenar un modelo de detección en su lugar

Cada punto de control publicado es un modelo de segmentación. Para entrenar un detector, construye el modelo a partir del archivo YAML correspondiente, carga los pesos de segmentación de la misma escala e intercala el entrenador de detección. Todo lo demás permanece sin cambios.

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPETrainer

model = YOLOE("yoloe-26s.yaml").load("yoloe-26s-seg.pt")

results = model.train(data="coco128.yaml", epochs=80, patience=10, trainer=YOLOEPETrainer)

Uso de Predict#

La llamada de indicación de texto es la que se muestra en Inicio rápido. Los otros dos modos requieren cada uno un argumento adicional:

Ejemplo

Las indicaciones visuales muestran al modelo un ejemplo en lugar de describirlo. visual_prompts toma una matriz bboxes de cuadros de ejemplo y una matriz cls de identificadores de clase, uno por cuadro. Los identificadores son agrupaciones temporales, no etiquetas; deben ser secuenciales a partir de 0, y los resultados se devuelven como object0, object1, … en lugar de bajo los nombres que elijas.

Los cuadros de ejemplo pueden situarse en la imagen sobre la que estás realizando la predicción:

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

# One example box per target, each with its own class ID
visual_prompts = {
    "bboxes": np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # person, glasses
    "cls": np.array([0, 1]),
}

results = model.predict(
    "ultralytics/assets/bus.jpg",
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

O en una imagen de referencia independiente pasada como refer_image, en cuyo caso bboxes y cls describen objetos en esa referencia, no en el objetivo:

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {"bboxes": np.array([[221.52, 405.8, 344.98, 857.54]]), "cls": np.array([0])}  # person

results = model.predict(
    "ultralytics/assets/zidane.jpg",  # Target image
    refer_image="ultralytics/assets/bus.jpg",  # Where the example boxes live
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

# refer_image also sets the classes permanently, so later calls need no prompts at all
results = model("ultralytics/assets/bus.jpg")
model.export(format="onnx")  # And the export keeps them
Nota

Cuando source es un vídeo o flujo continuo (stream), el primer fotograma se convierte automáticamente en el refer_image, por lo que las indicaciones que pases se aplican a dicho fotograma y se propagan por el resto del vídeo. Pasa refer_image explícitamente para elegir un fotograma diferente.

Tanto source como refer_image aceptan tensores de torch directamente, lo cual resulta útil cuando las imágenes ya proceden de una canalización existente. Proporciona los cuadros en las propias coordenadas de píxeles del tensor:

import numpy as np
import torch

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-11l-seg.pt")

img_tensor = torch.rand(1, 3, 480, 480)  # (1, 3, H, W) float tensor in [0, 1]
visual_prompts = {"bboxes": np.array([[10, 10, 50, 50]]), "cls": np.array([0])}

results = model.predict(
    img_tensor,
    refer_image=img_tensor,
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
    imgsz=640,
)

Para realizar predicciones en varias imágenes a la vez, anida las indicaciones un nivel más profundo: una matriz bboxes y una matriz cls por imagen de origen, en el mismo orden que las fuentes.

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {
    "bboxes": [
        np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # bus.jpg: person, glasses
        np.array([[150, 200, 1150, 700]]),  # zidane.jpg: person
    ],
    "cls": [np.array([0, 1]), np.array([0])],
}

results = model.predict(
    ["ultralytics/assets/bus.jpg", "ultralytics/assets/zidane.jpg"],
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

Uso de Val#

La validación se ejecuta como en cualquier otro modelo en un conjunto de datos de segmentación:

Ejemplo
from ultralytics import YOLOE

model = YOLOE("yoloe-26l-seg.pt")  # or yoloe-26s/m-seg.pt for other sizes

metrics = model.val(data="coco128-seg.yaml")

Dos variantes de la misma llamada cubren los demás modos de indicación:

  • Indicaciones visuales: model.val(data="coco128-seg.yaml", load_vp=True) extrae una incrustación visual por categoría del propio conjunto de datos. Añade refer_data="coco.yaml" para obtener las incrustaciones de un conjunto de datos diferente, el cual debe contener exactamente las mismas categorías.
  • Sin indicaciones: carga un punto de control *-seg-pf.pt y pasa single_cls=True.

Uso de exportación#

Los embeddings de prompts se pueden guardar una sola vez y reutilizar al generar exportaciones estáticas como ONNX, OpenVINO, TensorRT, CoreML, LiteRT y RKNN. El perfil NPZ se carga en el modelo original de PyTorch antes de la exportación; no es una entrada adicional en tiempo de ejecución y el modelo exportado no requiere el archivo NPZ.

Los modelos exportados son estáticos

Las clases configuradas con set_classes() (o mediante refer_image para indicaciones visuales) quedan integradas (baked-in) en los pesos exportados. Una vez exportado, el modelo ya no puede aceptar nuevas indicaciones: llamar a set_classes() o pasar visual_prompts=... a predict() en una exportación cargada fallará. Para cambiar las clases detectadas, vuelve a exportar desde el punto de control .pt original con las nuevas indicaciones configuradas. El archivo exportado se comporta como un modelo YOLO estándar y también se puede cargar con YOLO() en lugar de YOLOE().

Reutilizar embeddings de prompts
from ultralytics import YOLOE

model = YOLOE("yoloe-26n-seg.pt")
model.set_classes(["person", "bus"])
model.save_prompt_embeddings("person-bus.npz")

# The profile is bound to the source checkpoint and can be reused for later exports.
model = YOLOE("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="onnx")

El mismo perfil de prompt también puede configurar un modelo exclusivo de detección construido a partir de la arquitectura YOLOE correspondiente. Esto elimina la rama de máscaras mientras conserva las clases indicadas:

from ultralytics import YOLOE

model = YOLOE("yoloe-26n.yaml").load("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="rknn", name="rk3588", quantize=16)

Uso de Track#

Las clases guiadas se transfieren directamente al rastreo, por lo que puedes seguir objetos con los que el rastreador nunca ha sido entrenado:

Ejemplo
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")
model.set_classes(["forklift", "pallet"])

# persist=True keeps track IDs stable across frames
for result in model.track("path/to/video.mp4", stream=True, persist=True):
    print(result.boxes.id)

Cómo se compara YOLOE#

YOLOE se sitúa entre un detector de conjunto cerrado y un modelo de vocabulario abierto de gran peso. Tres comparaciones determinan si es la opción correcta:

  • Frente a un YOLO de conjunto cerrado. Una vez establecidas las indicaciones, YOLOE predice a través de la ruta habitual de detección y segmentación y se exporta como cualquier otro modelo. Lo que aporta es la capacidad de cambiar la lista de clases en el momento de la inferencia en lugar de reentrenar; el coste es una precisión zero-shot muy inferior a la de un modelo entrenado con tus propias clases.
  • Frente a las familias YOLOE anteriores. YOLOE-26 hereda la cabeza de extremo a extremo sin NMS de YOLO26 y cubre cinco escalas (n/s/m/l/x) frente a las tres anteriores (s/m/l), liderando en cada escala correspondiente en Rendimiento.
  • Frente a detectores de vocabulario abierto basados en Transformer. GLIP y OWL-ViT ejecutan un Transformer de visión-lenguaje en la inferencia. YOLOE codifica las indicaciones una sola vez y luego las compara con las características de las regiones dentro de una cabeza convolucional.

Las alternativas más cercanas aceptan una indicación de texto, pero solo YOLOE y SAM 3 devuelven máscaras, y las tres responden a preguntas diferentes:

YOLOESAM 3YOLO-World
Diseñado paraDetección y segmentación en tiempo real de clases nombradasSegmentación de conceptos y seguimiento guiado por indicacionesDetección de vocabulario abierto en tiempo real
MáscarasSí, con los puntos de control *-seg.ptNo, solo cuadros
Indicaciones visualesSí (SAVPE)No
Modo sin indicacionesSí, vocabulario de 4585 nombresNoNo
Elígelo cuandoNecesitas rendimiento y puedes nombrar las clasesNecesitas la mejor segmentación de conceptos y puedes gastar capacidad de cómputoYa estás aquí; consulta la nota de migración a continuación

¿Vienes de YOLO-World? La API tiene la misma forma: cambia YOLOWorld por YOLOE, carga un punto de control *-seg.pt y mantén tu llamada set_classes() tal como está. Obtienes máscaras e indicaciones visuales; la nota de exportación sobre clases congeladas se aplica a ambas.

Casos de uso y aplicaciones#

La detección de vocabulario abierto elimina el paso de reentrenamiento por clase, lo cual importa más cuando la lista de objetivos no se conoce de antemano:

  • Detección en mundo abiertorobótica y sistemas de seguridad que encuentran objetos que nadie enumeró en el momento del entrenamiento.
  • Detección de un solo ejemplo — las indicaciones visuales seleccionan una parte específica, logotipo o defecto a partir de un único cuadro de referencia, útil en inspección industrial.
  • Catalogación de cola larga — el vocabulario integrado de 4585 nombres es lo suficientemente amplio para monitoreo de biodiversidad o barridos de inventario minorista.
  • Generación de conjuntos de datos — etiqueta previamente imágenes con cuadros y máscaras antes de la revisión humana, luego entrena un modelo rápido de conjunto cerrado con el resultado.
  • Segmentación de objetivos arbitrarios — los puntos de control *-seg.pt publicados devuelven una máscara con cada predicción, por lo que la imagen médica y el análisis satelital obtienen resultados precisos a nivel de píxel sin un segundo modelo.

Un patrón común combina dos modos: ejecuta sin indicaciones una vez para descubrir qué hay presente, luego cambia a indicaciones de texto para las categorías que importan.

Limitaciones#

YOLOE sacrifica precisión a cambio de la capacidad de cambiar clases en el momento de la inferencia. Las consecuencias que vale la pena conocer antes de comprometerte:

  • La precisión de disparo cero está muy por debajo de un modelo entrenado en tus clases. Los puntos de control con indicaciones se sitúan aproximadamente en la banda de 22-40 mAP en la validación reducida de LVIS; un YOLO de conjunto cerrado entrenado con tus propios datos superará eso en esas clases. Usa YOLOE para cubrir clases para las que no puedes entrenar, no para reemplazar el entrenamiento.
  • Las categorías raras son el punto débil. La columna mAPr en Rendimiento informa específicamente sobre la precisión en las clases raras de LVIS, y bajo indicaciones de texto se sitúa por debajo de las columnas común y frecuente en cada fila. Revísala en lugar del mAP principal cuando tus objetivos sean inusuales.
  • Una indicación describe la apariencia, no las relaciones. La detección funciona comparando las características de la región con la incrustación de la indicación, por lo que las indicaciones que dependen del estado, contexto o comparación —«dañado», «más a la izquierda», «el que está siendo transportado»— no tienen un punto de referencia fiable para coincidir. Prefiere una redacción cercana a los nombres de categorías cotidianos.
  • Los conjuntos grandes de indicaciones cuestan latencia. Las incrustaciones de las indicaciones se calculan una vez, pero se comparan con las características de la región en cada pasada hacia adelante. Medido en CPU con yoloe-26s-seg.pt, una pasada hacia adelante aumenta aproximadamente un 19% al pasar de 80 a 1203 clases y aproximadamente un 89% con el vocabulario completo de 4585 nombres. Los FLOPs reportados no se mueven en absoluto, porque la similitud entre región y texto no se cuenta, por lo que el perfil no te avisará.
  • Los nombres de las clases son marcadores de posición hasta que indicas. Un punto de control *-seg.pt recién cargado informa nc=80 con nombres numéricos ("0", "1", …), así que llama a set_classes() antes de leer las etiquetas. Los puntos de control sin indicaciones vienen con el vocabulario completo ya poblado.

Notas de despliegue#

  • Hardware. La inferencia necesita una GPU NVIDIA con 4-8 GB de VRAM; las escalas n y s se ejecutan en GPUs de borde como Jetson o en CPU a resolución reducida. El ajuste fino necesita una sola GPU.
  • NMS es agnóstico de clase por defecto. YOLOE predice con agnostic_nms=True. En YOLOE-11 y YOLOE-v8, esto suprime los cuadros superpuestos con menor puntuación entre diferentes clases en lugar de solo dentro de la misma clase, lo que evita duplicados cuando un objeto coincide con varias categorías. Los modelos YOLOE-26 de extremo a extremo no aplican ninguna supresión de IoU; allí, el modo agnóstico solo mantiene la única mejor clase por anclaje en lugar de permitir que un anclaje emita varias etiquetas de clase. Pasa agnostic_nms=False para anular esto.
  • Lotes. La inferencia por lotes funciona directamente, y las indicaciones visuales pueden diferir por imagen en la misma llamada.

Entrenamiento de los modelos oficiales desde cero#

La mayoría de los lectores nunca necesitan esto. Reproduce los puntos de control de vocabulario abierto publicados a partir de Objects365, GQA y Flickr30k —alrededor de 1,4 millones de muestras de entrenamiento en 8× RTX 4090— y no está relacionado con el ajuste fino en tus propios datos, el cual se cubre en Uso de entrenamiento arriba.

Advertencia

Cada entrenador que hereda YOLOETrainer rechaza compile=True, incluidos el YOLOESegTrainer predeterminado y todos los entrenadores desde cero a continuación. Pasa compile=False (el predeterminado). Los dos entrenadores de ajuste fino usados arriba, YOLOEPESegTrainer y YOLOEPETrainer, no tienen esa restricción.

El entrenamiento necesita anotaciones de segmentación. Descarga los archivos procesados a continuación o genera los tuyos propios con el script proporcionado por el equipo oficial, el cual funciona con SAM 2.1. La validación utiliza la validación reducida de LVIS.

Conjunto de datosTipoMuestrasCajas (Boxes)Anotaciones de segmentación procesadas
Objects365v1Detección609k9621kobjects365_train_segm.json
GQAGrounding621k3681kfinal_mixed_train_no_coco_segm.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train_segm.json

El modelo de indicación de texto se entrena primero, y los otros dos modos de indicación son refinamientos de este:

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOESegTrainerFromScratch

data = {
    "train": {
        "yolo_data": ["Objects365.yaml"],
        "grounding_data": [
            {
                "img_path": "flickr/full_images/",
                "json_file": "flickr/annotations/final_flickr_separateGT_train_segm.json",
            },
            {
                "img_path": "mixed_grounding/gqa/images",
                "json_file": "mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            },
        ],
    },
    "val": {"yolo_data": ["lvis.yaml"]},
}

model = YOLOE("yoloe-26l-seg.yaml")
model.train(
    data=data,  # or the path to a YAML file holding the same structure
    batch=128,
    epochs=30,
    close_mosaic=2,
    optimizer="AdamW",
    lr0=2e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOESegTrainerFromScratch,
    device="0,1,2,3,4,5,6,7",
)

Los puntos de control de indicación visual y sin indicaciones parten de ese modelo de indicación de texto entrenado y actualizan un módulo cada uno. YOLOESegVPTrainer es la receta de indicación visual y YOLOEPEFreeTrainer la de sin indicaciones, pero ninguno congela nada por sí solo: el entrenamiento selectivo proviene de la lista freeze que pasas junto a él, la cual nombra a todos los hijos de la cabeza excepto savpe (respectivamente, cada torre de clasificación), y la ejecución sin indicaciones necesita además single_cls=True. El repositorio original de YOLOE contiene las recetas completas para los modelos a escala v8.

Una ejecución sin indicaciones finalizada se reparametriza en un punto de control que informa sus nombres sin ninguna indicación en la inferencia, utilizando get_vocab y set_vocab:

from ultralytics import YOLOE

# Weights written by the prompt-free run and by the text-prompt run it started from. Each
# rerun creates a new directory (train-2, train-3, ...), so take the paths the runs printed.
model = YOLOE("runs/segment/train-2/weights/best.pt")  # prompt-free run, its head is already fused
text_model = YOLOE("runs/segment/train/weights/best.pt")  # text-prompt run, its head is still unfused

names = list(YOLOE("yoloe-26l-seg-pf.pt").model.names.values())  # the 4,585-name vocabulary, or your own list
vocab = text_model.get_vocab(names)

model.set_vocab(vocab, names)
model.save("yoloe-26l-seg-pf-custom.pt")  # never overwrite the released checkpoint

Citas y agradecimientos#

Si YOLOE ha contribuido a tu investigación o proyecto, por favor cita el artículo original de Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han y Guiguang Ding de la Universidad de Tsinghua:

Cita
@misc{wang2025yoloerealtimeseeing,
      title={YOLOE: Real-Time Seeing Anything},
      author={Ao Wang and Lihao Liu and Hui Chen and Zijia Lin and Jungong Han and Guiguang Ding},
      year={2025},
      eprint={2503.07465},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2503.07465},
}

Para lecturas adicionales, el artículo original de YOLOE está disponible en arXiv. Se puede acceder al código fuente del proyecto y a recursos adicionales a través de su repositorio de GitHub.

FAQ#

  • Ultralytics YOLOE añade dos capacidades que YOLO-World no tiene: indicaciones visuales, donde un cuadro de ejemplo reemplaza el nombre de la clase, y puntos de control sin indicaciones que responden a partir de un vocabulario integrado de 4585 nombres sin ninguna indicación. Cada predicción de los puntos de control *-seg.pt publicados también incluye una máscara de segmentación de instancias. En cuanto a precisión, el artículo original de YOLOE sitúa a YOLOE-v8s por delante de YOLO-Worldv2-S por 3,5 AP en LVIS, con un tercio del costo de entrenamiento y 1,4 veces la velocidad de inferencia. Migrar es un cambio de una sola línea; consulta Cómo se compara YOLOE.

  • Ultralytics YOLOE admite tres modos de indicación. Una indicación de texto son nombres de clases como cadenas en un punto de control *-seg.pt, y es la opción habitual. Una indicación visual consta de uno o más cuadros de ejemplo en una imagen de referencia, para objetivos que son difíciles de expresar con palabras. La inferencia sin indicaciones utiliza un punto de control *-seg-pf.pt separado que responde a partir de un vocabulario integrado de 4585 nombres sin proporcionar nada. Las indicaciones de texto y visuales comparten los mismos puntos de control; las de sin indicaciones son archivos diferentes y rechazan set_classes(). Consulta Elección de un modo de indicación para ver la comparación completa.

  • Empieza con yoloe-26s-seg.pt: la familia YOLOE-26 supera a YOLOE-11 y YOLOE-v8 en cada escala correspondiente, y la escala s es la más pequeña por encima de 30 mAP en la validación reducida de LVIS. Pasa a m, l o x cuando la precisión en categorías raras importe más que la latencia; la columna mAPr en Rendimiento es la que debes comparar. Baja a n solo para despliegues en el borde. Carga el archivo *-seg-pf.pt de la misma escala en su lugar cuando quieras el vocabulario integrado en lugar de tus propios nombres de clases.

  • Etiquetas como object0 y object1 significan que la predicción provino de una indicación visual, la cual agrupa los cuadros de ejemplo en clases temporales numeradas en lugar de conservar tus nombres. Los identificadores de clase que pasas en visual_prompts["cls"] solo hacen esa agrupación. El modelo los reporta como object0, object1, y así sucesivamente, en el orden de los identificadores que asignaste, así que vuelve a mapearlos a tus propias etiquetas en el resultado. Si quieres tus nombres en la salida, usa una indicación de texto en su lugar.

  • Los puntos de control sin indicaciones (*-seg-pf.pt) resuelven las clases a través de su propio vocabulario integrado y rechazan las indicaciones externas con AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.. Carga un punto de control *-seg.pt cuando necesites tu propia lista de clases. Consulta Elección de un modo de indicación.

  • La primera indicación de texto hace que Ultralytics YOLOE instale ultralytics/CLIP desde GitHub con pip y descargue un codificador de texto TorchScript en el directorio de trabajo actual —aproximadamente 254 MB para YOLOE-26; consulta Instalación y requisitos para ver el recurso exacto por familia de modelos. Las indicaciones visuales y los puntos de control sin indicaciones no necesitan ninguna de las dos cosas. Para evitar la descarga en la máquina de destino, configura las indicaciones una vez y guárdalas con save_prompt_embeddings(), o exporta el modelo con las clases ya configuradas.

  • No — YOLOE integra las clases indicadas en los pesos en el momento de la exportación, por lo que una exportación cargada rechaza tanto set_classes() como visual_prompts=. Vuelve a exportar desde el punto de control .pt original con las nuevas indicaciones configuradas. El archivo exportado se comporta como un modelo YOLO estándar y se puede cargar con YOLO() así como con YOLOE().

  • Usa YOLOE cuando necesites rendimiento en tiempo real y puedas nombrar las clases, y SAM 3 cuando la calidad de segmentación en un concepto importe más que la velocidad. Ambos aceptan ejemplos visuales; solo YOLOE tiene un modo sin indicaciones. La comparación completa está en Cómo se compara YOLOE.

Comentarios