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 dentro de una imagen a partir de textos descriptivos. Al reducir significativamente las exigencias computacionales y mantener un rendimiento competitivo, YOLO-World se convierte en una herramienta versátil para numerosas aplicaciones basadas en visión.
Watch: YOLO World training workflow on custom dataset

Descripción general#
YOLO-World aborda los desafíos de los modelos tradicionales de detección de vocabulario abierto, que suelen depender de modelos Transformer complejos que requieren muchos recursos computacionales. La dependencia de estos modelos respecto a categorías de objetos predefinidas también limita su utilidad en escenarios dinámicos. YOLO-World revitaliza el marco YOLOv8 con capacidades de detección de vocabulario abierto, mediante modelado de visión-lenguaje y preentrenamiento con conjuntos de datos amplios para destacar en la identificación de una gran variedad de objetos en escenarios de tipo zero-shot con una eficiencia inigualable.
Para trabajos con vocabulario abierto que también necesiten máscaras de instancia, indicaciones visuales o un modo sin indicaciones, consulta YOLOE, que mantiene la misma API set_classes().
Características principales#
-
Solución en tiempo real: Al aprovechar la velocidad computacional de las CNN, YOLO-World ofrece una solución rápida de detección de vocabulario abierto para sectores que necesitan resultados inmediatos.
-
Eficiencia y rendimiento: YOLO-World reduce drásticamente las necesidades computacionales y de recursos sin sacrificar el rendimiento, y ofrece una alternativa sólida a modelos como SAM con una fracción del coste computacional, lo que permite 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 mejorar aún más la eficiencia. Este enfoque permite usar indicaciones personalizadas calculadas a priori, como descripciones o categorías, que se codifican y almacenan como embeddings del vocabulario sin conexión, agilizando el proceso de detección.
-
Basado en YOLOv8: Creado 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 inigualables.
-
Excelencia en benchmarks: YOLO-World supera a los detectores de vocabulario abierto existentes, incluidas las series MDETR y GLIP, en velocidad y eficiencia en benchmarks estándar, lo que demuestra la superior capacidad de YOLOv8 en una única 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 respecto a los métodos existentes.
Modelos disponibles, tareas compatibles y modos de funcionamiento#
Esta sección detalla los modelos disponibles con sus pesos preentrenados específicos, las tareas que admiten y su compatibilidad con varios modos de funcionamiento, como Inferencia, Validación, Entrenamiento y Exportación, indicados con ✅ para los modos compatibles y ❌ para los no compatibles.
Todos los pesos de YOLOv8-World se han migrado directamente desde el repositorio oficial de YOLO-World, lo que pone de relieve sus excelentes 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 Python. Ultralytics proporciona una API de Python y comandos CLI fáciles de usar para agilizar el desarrollo.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Uso del entrenamiento#
Recomendamos encarecidamente usar yolov8-worldv2 para el entrenamiento personalizado, porque admite entrenamiento determinista y facilita la exportación a formatos como ONNX y TensorRT.
La detección de objetos es sencilla con el método train, como se muestra a continuación:
Los modelos *.pt preentrenados con PyTorch, así como los archivos de configuración *.yaml, se pueden pasar a la clase YOLOWorld() para crear una instancia del modelo en Python:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")Uso de Predict#
La detección de objetos es sencilla con el método predict, como se muestra a continuación:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Este fragmento muestra lo sencillo que es cargar un modelo preentrenado y ejecutar una predicción en una imagen.
Uso de Val#
La validación del modelo en un conjunto de datos se realiza de la siguiente forma:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")Uso de Track#
El seguimiento de objetos con el modelo YOLO-World en un vídeo o imágenes se realiza de la siguiente forma:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Track with a YOLO-World model on a video
results = model.track(source="path/to/video.mp4")Los modelos YOLO-World proporcionados por 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 a los modelos YOLOv8-World reconocer y predecir directamente las 80 categorías estándar definidas en el conjunto de datos COCO sin necesidad de configuración ni personalización adicionales.
Establecer indicaciones#

El marco YOLO-World permite especificar clases dinámicamente mediante indicaciones personalizadas, lo que te 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 originalmente no formaban parte de los datos de entrenamiento. Al establecer indicaciones personalizadas, puedes orientar el foco del modelo hacia los objetos de interés, mejorando la relevancia y la precisión de los resultados de detección.
Por ejemplo, si tu aplicación solo necesita detectar objetos «person» y «bus», puedes especificar estas clases directamente:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Algunos usuarios han comprobado que añadir una cadena vacía "" como clase de fondo puede mejorar el rendimiento de detección en determinados escenarios. Este comportamiento parece depender del escenario y no se conoce por completo el mecanismo exacto:
model.set_classes(["person", "bus", ""])También puedes guardar un modelo después de establecer clases personalizadas. De este modo, creas una versión del modelo YOLO-World especializada para tu caso de uso específico. Este proceso integra las definiciones de tus clases personalizadas directamente en el archivo del modelo, de modo que el modelo está listo para usarse con las clases especificadas sin más ajustes. Sigue estos pasos para guardar y cargar tu modelo YOLO-World personalizado:
Primero, carga un modelo YOLO-World, establece sus clases personalizadas y guárdalo:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
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 significativamente el rendimiento y la eficiencia de detección en los escenarios específicos de tu aplicación.
from ultralytics import YOLO
# Load your custom model
model = YOLO("custom_yolov8s.pt")
# Run inference to detect your custom classes
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Ventajas de guardar con vocabulario personalizado#
- Eficiencia: Agiliza el proceso de detección al centrarse en los objetos relevantes, reducir la sobrecarga computacional y acelerar la inferencia.
- Flexibilidad: Permite adaptar fácilmente el modelo a tareas de detección nuevas o específicas sin necesidad de volver a entrenarlo exhaustivamente ni recopilar grandes cantidades de datos.
- Simplicidad: Simplifica la implementación al eliminar la necesidad de especificar repetidamente las clases personalizadas durante la ejecución, haciendo que el modelo sea directamente utilizable con su vocabulario integrado.
- 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 un medio eficaz para personalizar modelos de detección de objetos de última generación para tareas específicas, haciendo que la IA avanzada sea más accesible y aplicable a un abanico más amplio de aplicaciones prácticas.
Reproducir los resultados oficiales desde cero (experimental)#
Preparar los conjuntos de datos#
- Datos de entrenamiento
| Conjunto de datos | Tipo | Muestras | Cuadros | Archivos de anotaciones |
|---|---|---|---|---|
| Objects365v1 | Detección | 609k | 9621k | objects365_train.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Grounding | 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 entrenar modelos yolo-world simultáneamente en conjuntos de datos de detección y conjuntos de datos de grounding. 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
# Option 1: Use Python dictionary
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"]},
}
# Option 2: Use YAML file (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, # or data="yolo_world_data.yaml" if using YAML file
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)Citas y agradecimientos#
Agradecemos enormemente al Tencent AILab Computer Vision Center su trabajo pionero en la detección de objetos de vocabulario abierto en tiempo real con 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}
}Para obtener más información, el artículo original de YOLO-World está disponible en arXiv. Puedes acceder al código fuente del proyecto y a recursos adicionales a través de su repositorio de GitHub. Apreciamos su compromiso con el avance del sector y con compartir sus valiosas ideas con la comunidad.
Preguntas frecuentes#
El modelo YOLO-World es un enfoque avanzado de detección de objetos en tiempo real basado en el marco Ultralytics YOLOv8. Destaca en tareas de detección de vocabulario abierto al identificar objetos dentro de una imagen a partir de textos descriptivos. Mediante el modelado de visión-lenguaje y el preentrenamiento con conjuntos de datos grandes, YOLO-World logra una alta eficiencia y rendimiento con unas exigencias computacionales considerablemente menores, lo que lo hace ideal para aplicaciones en tiempo real de diversos sectores.
YOLO-World admite una estrategia de «indicar y detectar» que utiliza un vocabulario sin conexión para mejorar la eficiencia. Las indicaciones personalizadas, como descripciones o categorías de objetos específicas, se precodifican y almacenan como embeddings del vocabulario sin conexión. Este enfoque agiliza el proceso de detección sin necesidad de volver a entrenar el modelo. Puedes establecer estas indicaciones dinámicamente en el modelo para adaptarlo a tareas de detección específicas, como se muestra a continuación:
from ultralytics import YOLOWorld # Initialize a YOLO-World model model = YOLOWorld("yolov8s-world.pt") # Define custom classes model.set_classes(["person", "bus"]) # Execute prediction on an image results = model.predict("path/to/image.jpg") # Show results results[0].show()YOLO-World ofrece varias ventajas frente a los modelos tradicionales de detección de vocabulario abierto:
- Rendimiento en tiempo real: Aprovecha la velocidad computacional de las CNN para ofrecer una detección rápida y eficiente.
- Eficiencia y pocos recursos necesarios: YOLO-World mantiene un alto rendimiento y reduce significativamente las exigencias computacionales y de recursos.
- Indicaciones personalizables: El modelo admite el establecimiento dinámico de indicaciones, lo que permite 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 mediante la API de Python o los comandos CLI proporcionados. Así puedes iniciar el entrenamiento con Python:
from ultralytics import YOLOWorld # Load a pretrained YOLOv8s-worldv2 model model = YOLOWorld("yolov8s-worldv2.pt") # Train the model on the COCO8 dataset for 100 epochs results = model.train(data="coco8.yaml", epochs=100, imgsz=640)O mediante CLI:
yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640Ultralytics ofrece varios modelos YOLO-World preentrenados compatibles con diversas 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 los resultados oficiales desde cero, tienes que preparar los conjuntos de datos e iniciar el entrenamiento usando el código proporcionado. El procedimiento de entrenamiento implica 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)