Modelo YOLO-World#
El modelo YOLO-World presenta un enfoque avanzado y en tiempo real basado en Ultralytics YOLOv8 para tareas de detección de vocabulario abierto. Esta innovación permite detectar cualquier objeto de una imagen a partir de textos descriptivos. Al reducir considerablemente las necesidades computacionales y mantener un rendimiento competitivo, YOLO-World se convierte en una herramienta versátil para numerosas aplicaciones basadas en visión.
Ver: Flujo de trabajo de entrenamiento de YOLO World con un conjunto de datos personalizado

Descripción general#
YOLO-World aborda los retos de los modelos tradicionales de detección de vocabulario abierto, que suelen depender de modelos Transformer costosos que requieren muchos recursos computacionales. La dependencia de categorías de objetos predefinidas también limita la utilidad de estos modelos en situaciones dinámicas. YOLO-World renueva el framework YOLOv8 con capacidades de detección de vocabulario abierto, emplea el modelado de lenguaje visual y se preentrena con conjuntos de datos amplios para destacar en la identificación de una gran variedad de objetos en situaciones de cero ejemplos, con una eficiencia sin igual.
Para trabajos de vocabulario abierto que también necesiten máscaras de instancias, indicaciones visuales o un modo sin indicaciones, consulta YOLOE, que mantiene la misma API set_classes().
Características principales#
-
Solución en tiempo real: Gracias a la velocidad computacional de las CNN, YOLO-World ofrece una solución rápida de detección de vocabulario abierto para los sectores que necesitan resultados inmediatos.
-
Eficiencia y rendimiento: YOLO-World reduce drásticamente las necesidades computacionales y de recursos sin sacrificar rendimiento. Ofrece una alternativa robusta a modelos como SAM con un coste computacional muy inferior, lo que permite utilizarlo en aplicaciones en tiempo real.
-
Inferencia con vocabulario sin conexión: YOLO-World introduce una estrategia de «indicar y detectar» que utiliza un vocabulario sin conexión para aumentar aún más la eficiencia. Este enfoque permite utilizar indicaciones personalizadas calculadas de antemano, como descripciones o categorías, codificarlas y almacenarlas como incrustaciones del vocabulario sin conexión, y agilizar así el proceso de detección.
-
Basado en YOLOv8: Desarrollado sobre Ultralytics YOLOv8, YOLO-World aprovecha los últimos avances en detección de objetos en tiempo real para facilitar la detección de vocabulario abierto con una precisión y velocidad excepcionales.
-
Excelencia en las pruebas de referencia: YOLO-World supera a los detectores de vocabulario abierto existentes, como las series MDETR y GLIP, en velocidad y eficiencia en pruebas de referencia estándar, lo que demuestra la capacidad superior de YOLOv8 en una sola GPU NVIDIA V100.
-
Aplicaciones versátiles: El enfoque innovador de YOLO-World abre nuevas posibilidades para multitud de tareas de visión y ofrece mejoras de velocidad de varios órdenes de magnitud frente a los métodos existentes.
Modelos disponibles, tareas compatibles y modos de funcionamiento#
En esta sección se detallan los modelos disponibles, sus pesos preentrenados específicos, las tareas compatibles y la compatibilidad con distintos modos de funcionamiento, como Inferencia, Validación, Entrenamiento y Exportación. ✅ indica los modos compatibles y ❌, los que no lo son.
Todos los pesos de YOLOv8-World se han migrado directamente desde el repositorio oficial de YOLO-World, lo que pone de relieve la calidad de sus contribuciones.
| Tipo de modelo | Pesos preentrenados | Tareas compatibles | Entrenamiento | Validación | Inferencia | Exportar |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Detección de objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Detección de objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Detección de objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Detección de objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Detección de objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Detección de objetos | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Detección de objetos | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Detección de objetos | ✅ | ✅ | ✅ | ✅ |
Transferencia zero-shot en el conjunto de datos COCO#
| Tipo de modelo | mAP | mAP50 | mAP75 |
|---|---|---|---|
| yolov8s-world | 37.4 | 52.0 | 40.6 |
| yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
| yolov8m-world | 42.0 | 57.0 | 45.6 |
| yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
| yolov8l-world | 45.7 | 61.3 | 49.8 |
| yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
| yolov8x-world | 47.0 | 63.0 | 51.2 |
| yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
Ejemplos de uso#
Los modelos YOLO-World son fáciles de integrar en tus aplicaciones de Python. Ultralytics proporciona una API de Python y comandos CLI fáciles de usar para agilizar el desarrollo.
Ver: Ejemplos de uso del modelo YOLO-World con Ultralytics | Vocabulario abierto, sin indicaciones y mucho más 🚀
Uso del entrenamiento#
Recomendamos encarecidamente usar yolov8-worldv2 para el entrenamiento personalizado, ya que admite el entrenamiento determinista y permite exportar fácilmente a formatos como ONNX y TensorRT.
La detección de objetos es sencilla con el método train, como se muestra a continuación:
Se pueden pasar modelos *.pt preentrenados de PyTorch, así como archivos de configuración *.yaml, a la clase YOLOWorld() para crear una instancia del modelo en Python:
from ultralytics import YOLOWorld
# Carga un modelo YOLOv8s-worldv2 preentrenado
model = YOLOWorld("yolov8s-worldv2.pt")
# Entrena el modelo durante 100 épocas con el conjunto de datos de ejemplo COCO8
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Ejecuta la inferencia con el modelo YOLO-World en la imagen 'bus.jpg'
results = model("path/to/bus.jpg")Uso de la predicción#
La detección de objetos es sencilla con el método predict, como se muestra a continuación:
from ultralytics import YOLOWorld
# Inicializa un modelo YOLO-World
model = YOLOWorld("yolov8s-world.pt") # o selecciona yolov8m/l-world.pt para usar otros tamaños
# Ejecuta la inferencia con el modelo YOLOv8s-world en la imagen especificada
results = model.predict("path/to/image.jpg")
# Muestra los resultados
results[0].show()Este fragmento muestra lo sencillo que es cargar un modelo preentrenado y ejecutar una predicción sobre una imagen.
Uso de la validación#
La validación del modelo en un conjunto de datos se realiza fácilmente de la siguiente manera:
from ultralytics import YOLO
# Crea un modelo YOLO-World
model = YOLO("yolov8s-world.pt") # o selecciona yolov8m/l-world.pt para usar otros tamaños
# Valida el modelo en el conjunto de datos de ejemplo COCO8
metrics = model.val(data="coco8.yaml")Seguimiento de uso#
El seguimiento de objetos con el modelo YOLO-World en un vídeo o en imágenes se realiza fácilmente de la siguiente manera:
from ultralytics import YOLO
# Crea un modelo YOLO-World
model = YOLO("yolov8s-world.pt") # o selecciona yolov8m/l-world.pt para usar otros tamaños
# Realiza el seguimiento con un modelo YOLO-World en un vídeo
results = model.track(source="path/to/video.mp4")Los modelos YOLO-World que proporciona Ultralytics vienen preconfigurados con las categorías del conjunto de datos COCO como parte de su vocabulario sin conexión, lo que mejora la eficiencia para su uso inmediato. Esta integración permite que los modelos YOLOv8-World reconozcan y predigan directamente las 80 categorías estándar definidas en el conjunto de datos COCO sin necesidad de configuración ni personalización adicionales.
Configurar prompts#

El framework YOLO-World permite especificar clases de forma dinámica mediante prompts personalizados, lo que permite adaptar el modelo a tus necesidades específicas sin volver a entrenarlo. Esta función resulta especialmente útil para adaptar el modelo a nuevos dominios o tareas específicas que no formaban parte originalmente de los datos de entrenamiento. Al configurar prompts personalizados, puedes dirigir la atención del modelo hacia los objetos que te interesan y mejorar así la relevancia y la precisión de los resultados de detección.
Por ejemplo, si tu aplicación solo necesita detectar objetos de tipo «persona» y «autobús», puedes especificar directamente estas clases:
from ultralytics import YOLO
# Inicializa un modelo YOLO-World
model = YOLO("yolov8s-world.pt") # o elige yolov8m/l-world.pt
# Define clases personalizadas
model.set_classes(["person", "bus"])
# Ejecuta la predicción de las categorías especificadas en una imagen
results = model.predict("path/to/image.jpg")
# Muestra los resultados
results[0].show()Algunos usuarios han observado que añadir una cadena vacía "" como clase de fondo puede mejorar el rendimiento de detección en ciertas situaciones. Este comportamiento parece depender del escenario y no se conoce por completo el mecanismo exacto:
model.set_classes(["person", "bus", ""])La cadena vacía permanece en model.names como una clase propia, incluso en cualquier modelo que guardes, por lo que sus detecciones aparecen con una etiqueta vacía. Pasa classes=[0, 1] al realizar la predicción para conservar solo las clases reales.
También puedes guardar un modelo después de configurar clases personalizadas. Así crearás una versión del modelo YOLO-World especializada para tu caso de uso concreto. Este proceso incorpora las definiciones de tus clases personalizadas directamente en el archivo del modelo, que queda listo para usarse con las clases especificadas sin necesidad de realizar más ajustes. Sigue estos pasos para guardar y cargar tu modelo YOLO-World personalizado:
Primero, carga un modelo YOLO-World, configúrale clases personalizadas y guárdalo:
from ultralytics import YOLO
# Inicializa un modelo YOLO-World
model = YOLO("yolov8s-world.pt") # o selecciona yolov8m/l-world.pt
# Define clases personalizadas
model.set_classes(["person", "bus"])
# Guarda el modelo con el vocabulario sin conexión definido
model.save("custom_yolov8s.pt")Después de guardarlo, el modelo custom_yolov8s.pt se comporta como cualquier otro modelo YOLOv8 preentrenado, pero con una diferencia clave: ahora está optimizado para detectar únicamente las clases que has definido. Esta personalización puede mejorar notablemente el rendimiento de detección y la eficiencia en los escenarios de uso específicos de tu aplicación.
from ultralytics import YOLO
# Carga tu modelo personalizado
model = YOLO("custom_yolov8s.pt")
# Ejecuta la inferencia para detectar tus clases personalizadas
results = model.predict("path/to/image.jpg")
# Muestra los resultados
results[0].show()Ventajas de guardar un modelo con vocabulario personalizado#
- Eficiencia: Agiliza el proceso de detección al centrarse en los objetos relevantes, reducir la carga computacional y acelerar la inferencia.
- Flexibilidad: Permite adaptar fácilmente el modelo a tareas de detección nuevas o especializadas sin necesidad de recopilar datos ni realizar un reentrenamiento exhaustivo.
- Sencillez: Simplifica la implementación al eliminar la necesidad de especificar repetidamente las clases personalizadas durante la ejecución, de modo que el modelo puede usarse directamente con el vocabulario incorporado.
- Rendimiento: Mejora la precisión de detección de las clases especificadas al centrar la atención y los recursos del modelo en reconocer los objetos definidos.
Este enfoque ofrece una forma eficaz de personalizar modelos de detección de objetos de última generación para tareas específicas, y hace que la IA avanzada sea más accesible y aplicable a una gama más amplia de aplicaciones prácticas.
Reproduce desde cero los resultados oficiales (experimental)#
Preparar conjuntos de datos#
- Datos de entrenamiento
| Conjunto de datos | Tipo | Muestras | Cajas | Archivos de anotaciones |
|---|---|---|---|---|
| Objects365v1 | Detección | 609k | 9621k | objects365_train.json |
| GQA | Anotación de regiones | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Anotación de regiones | 149k | 641k | final_flickr_separateGT_train.json |
- Datos de validación
| Conjunto de datos | Tipo | Archivos de anotaciones |
|---|---|---|
| LVIS minival | Detección | minival.txt |
Iniciar el entrenamiento desde cero#
WorldTrainerFromScratch está muy personalizado para permitir el entrenamiento simultáneo de modelos yolo-world con conjuntos de datos de detección y de anotación de regiones. Para obtener más información, consulta ultralytics.models.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Opción 1: Usa un diccionario de Python
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "flickr30k/images",
"json_file": "flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "GQA/images",
"json_file": "GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
# Opción 2: Usa un archivo YAML (yolo_world_data.yaml)
# 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 = YOLOWorld("yolov8s-worldv2.yaml")
model.train(
data=data, # o data="yolo_world_data.yaml" si usas un archivo YAML
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)Citas y agradecimientos#
Agradecemos especialmente al Centro de Visión Artificial de Tencent AILab su trabajo pionero en la detección de objetos en tiempo real con vocabulario abierto mediante YOLO-World:
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}Puedes consultar el artículo original de YOLO-World en arXiv si quieres obtener más información. El código fuente del proyecto y otros recursos están disponibles en su repositorio de GitHub. Agradecemos su compromiso con el avance del campo y con compartir sus valiosas aportaciones con la comunidad.
Preguntas frecuentes#
El modelo YOLO-World es un método avanzado de detección de objetos en tiempo real basado en el framework Ultralytics YOLOv8. Destaca en tareas de detección con vocabulario abierto, ya que identifica objetos en una imagen a partir de descripciones textuales. Gracias al uso de modelos de visión y lenguaje y al preentrenamiento con grandes conjuntos de datos, YOLO-World ofrece un alto rendimiento y eficiencia con una demanda computacional mucho menor, por lo que resulta ideal para aplicaciones en tiempo real de diversos sectores.
YOLO-World admite una estrategia de «prompt y detección» que utiliza un vocabulario sin conexión para mejorar la eficiencia. Los prompts personalizados, como los pies de foto o las categorías de objetos específicas, se codifican previamente y se almacenan como embeddings en el vocabulario sin conexión. Este enfoque agiliza el proceso de detección sin necesidad de volver a entrenar el modelo. Puedes configurar estos prompts dinámicamente en el modelo para adaptarlo a tareas de detección específicas, como se muestra a continuación:
from ultralytics import YOLOWorld # Inicializa un modelo YOLO-World model = YOLOWorld("yolov8s-world.pt") # Define clases personalizadas model.set_classes(["person", "bus"]) # Ejecuta una predicción en una imagen results = model.predict("path/to/image.jpg") # Muestra los resultados results[0].show()YOLO-World ofrece varias ventajas frente a los modelos tradicionales de detección con vocabulario abierto:
- Rendimiento en tiempo real: Aprovecha la velocidad computacional de las CNN para ofrecer una detección rápida y eficiente.
- Eficiencia y bajo consumo de recursos: YOLO-World mantiene un alto rendimiento y, a la vez, reduce notablemente las necesidades computacionales y de recursos.
- Prompts personalizables: El modelo permite configurar prompts dinámicamente, de modo que puedes especificar clases de detección personalizadas sin volver a entrenarlo.
- Excelencia en benchmarks: Supera a otros detectores de vocabulario abierto, como MDETR y GLIP, tanto en velocidad como en eficiencia en benchmarks estándar.
Entrenar un modelo YOLO-World con tu conjunto de datos es sencillo gracias a la API de Python o a los comandos CLI disponibles. Así puedes empezar a entrenarlo con Python:
from ultralytics import YOLOWorld # Carga un modelo YOLOv8s-worldv2 preentrenado model = YOLOWorld("yolov8s-worldv2.pt") # Entrena el modelo con el conjunto de datos COCO8 durante 100 épocas results = model.train(data="coco8.yaml", epochs=100, imgsz=640)O con CLI:
yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640Ultralytics ofrece varios modelos YOLO-World preentrenados que admiten distintas tareas y modos de funcionamiento:
Tipo de modelo Pesos preentrenados Tareas compatibles Entrenamiento Validación Inferencia Exportar YOLOv8s-world yolov8s-world.pt Detección de objetos ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt Detección de objetos ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt Detección de objetos ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt Detección de objetos ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt Detección de objetos ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt Detección de objetos ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt Detección de objetos ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt Detección de objetos ✅ ✅ ✅ ✅ Para reproducir desde cero los resultados oficiales, tienes que preparar los conjuntos de datos e iniciar el entrenamiento con el código proporcionado. El proceso de entrenamiento consiste en crear un diccionario de datos y ejecutar el método
traincon un entrenador personalizado:from ultralytics import YOLOWorld from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch data = { "train": { "yolo_data": ["Objects365.yaml"], "grounding_data": [ { "img_path": "flickr30k/images", "json_file": "flickr30k/final_flickr_separateGT_train.json", }, { "img_path": "GQA/images", "json_file": "GQA/final_mixed_train_no_coco.json", }, ], }, "val": {"yolo_data": ["lvis.yaml"]}, } model = YOLOWorld("yolov8s-worldv2.yaml") model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)