Modelo YOLO-World#
El modelo YOLO-World introduce un enfoque avanzado 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 basándose en textos descriptivos. Al reducir significativamente las demandas computacionales mientras mantiene 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 a los que se enfrentan los modelos tradicionales de detección de vocabulario abierto, que a menudo dependen de modelos Transformer engorrosos que requieren cuantiosos recursos computacionales. La dependencia de estos modelos en categorías de objetos predefinidas también limita su utilidad en escenarios dinámicos. YOLO-World revitaliza el marco de YOLOv8 con capacidades de detección de vocabulario abierto, empleando modelado de lenguaje de visión y preentrenamiento en conjuntos de datos extensos para destacar en la identificación de una amplia gama de objetos en escenarios de cero disparos con una eficiencia sin igual.
Características clave#
-
Solución en tiempo real: Aprovechando la velocidad computacional de las CNN, YOLO-World ofrece una solución rápida de detección de vocabulario abierto, satisfaciendo a industrias que necesitan resultados inmediatos.
-
Eficiencia y rendimiento: YOLO-World reduce drásticamente los requisitos de cómputo y recursos sin sacrificar el rendimiento, ofreciendo una alternativa robusta a modelos como SAM pero a una fracción del costo computacional, lo que permite aplicaciones en tiempo real.
-
Inferencia con vocabulario offline: YOLO-World introduce una estrategia de "prompt-then-detect" (indicar y luego detectar), empleando un vocabulario offline para mejorar aún más la eficiencia. Este enfoque permite el uso de prompts personalizados calculados a priori, incluyendo pies de foto o categorías, para ser codificados y almacenados como embeddings de vocabulario offline, simplificando el proceso de detección.
-
Con el respaldo de YOLOv8: Construido 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 incomparables.
-
Excelencia en benchmarks: YOLO-World supera a los detectores de vocabulario abierto existentes, incluyendo las series MDETR y GLIP, en términos de velocidad y eficiencia en benchmarks estándar, mostrando la capacidad superior de YOLOv8 en una sola GPU NVIDIA V100.
-
Aplicaciones versátiles: El enfoque innovador de YOLO-World desbloquea nuevas posibilidades para una multitud de tareas de visión, ofreciendo mejoras de velocidad por órdenes de magnitud sobre 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 operación como Inferencia, Validación, Entrenamiento y Exportación, denotados por ✅ para los modos admitidos y ❌ para los modos no admitidos.
Todos los pesos de YOLOv8-World se han migrado directamente desde el repositorio oficial de YOLO-World, lo que destaca 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 de Python. Ultralytics proporciona una API de Python intuitiva y comandos CLI para agilizar el desarrollo.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Uso de entrenamiento#
Recomendamos encarecidamente usar yolov8-worldv2 para el entrenamiento personalizado porque admite el entrenamiento determinista y se exporta más fácilmente a formatos como ONNX y TensorRT.
La detección de objetos es sencilla con el método train, tal como se ilustra a continuación:
Los modelos preentrenados de PyTorch *.pt, así como los archivos de configuración *.yaml, se pueden pasar a la clase YOLOWorld() para crear una instancia de 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, tal como se ilustra 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 demuestra la simplicidad de 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 simplifica de la siguiente manera:
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 en imágenes se simplifica de la siguiente manera:
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 una aplicación inmediata. 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 configuraciones o personalizaciones adicionales.
Establecer prompts#

El marco de YOLO-World permite la especificación dinámica de clases mediante indicaciones personalizadas, lo que da a los usuarios el poder de adaptar el modelo a sus necesidades específicas sin necesidad de reentrenamiento. Esta característica es especialmente útil para adaptar el modelo a nuevos dominios o a tareas específicas que no formaban parte originalmente de los datos de entrenamiento. Al establecer indicaciones personalizadas, los usuarios pueden orientar esencialmente el enfoque del modelo hacia objetos de interés, lo que mejora la relevancia y la precisión de los resultados de la detección.
Por ejemplo, si tu aplicación solo requiere detectar objetos 'persona' y 'autobús', 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 descubierto que añadir una cadena vacía "" como clase de fondo puede mejorar el rendimiento de la detección en ciertos escenarios. Este comportamiento parece depender del escenario y el mecanismo exacto no se comprende por completo:
model.set_classes(["person", "bus", ""])También puedes guardar un modelo después de establecer clases personalizadas. Al hacer esto, creas una versión del modelo YOLO-World que está especializada para tu caso de uso específico. Este proceso integra tus definiciones de clases personalizadas directamente en el archivo del modelo, haciendo que el modelo esté listo para usar con tus clases especificadas sin ajustes adicionales. Sigue estos pasos para guardar y cargar tu modelo YOLO-World personalizado:
Primero carga un modelo YOLO-World, establece clases personalizadas para él 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 guardar, el modelo custom_yolov8s.pt se comporta como cualquier otro modelo YOLOv8 preentrenado, pero con una diferencia clave: ahora está optimizado para detectar solo las clases que has definido. Esta personalización puede mejorar significativamente el rendimiento y la eficiencia de la detección para tus escenarios de aplicación específicos.
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()Beneficios de guardar con vocabulario personalizado#
- Eficiencia: Simplifica el proceso de detección al enfocarse en objetos relevantes, reduciendo la sobrecarga computacional y acelerando la inferencia.
- Flexibilidad: Permite una fácil adaptación del modelo a tareas de detección nuevas o de nicho sin necesidad de un reentrenamiento extenso o recolección de datos.
- Simplicidad: Simplifica el despliegue al eliminar la necesidad de especificar repetidamente clases personalizadas en tiempo de ejecución, haciendo que el modelo sea directamente utilizable con su vocabulario integrado.
- Rendimiento: Mejora la precisión de detección para las clases especificadas al enfocar la atención y los recursos del modelo en reconocer los objetos definidos.
Este enfoque ofrece un medio potente 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 resultados oficiales desde cero (Experimental)#
Preparar conjuntos de datos#
- Datos de entrenamiento
| Conjunto de datos | Tipo | Muestras | Cajas (Boxes) | Archivos de anotación |
|---|---|---|---|---|
| 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 anotación |
|---|---|---|
| LVIS minival | Detección | minival.txt |
Lanza el entrenamiento desde cero#
WorldTrainerFromScratch está altamente personalizado para permitir el entrenamiento de modelos yolo-world tanto en conjuntos de datos de detección como en conjuntos de datos de conexión a tierra simultáneamente. Para obtener más detalles, 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#
Expresamos nuestro agradecimiento al Centro de Visión por Computador de Tencent AILab por 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 seguir leyendo, el artículo original de YOLO-World está disponible en arXiv. El código fuente del proyecto y otros recursos adicionales se pueden consultar a través de su repositorio de GitHub. Agradecemos su compromiso con el avance del campo y por compartir sus valiosas ideas con la comunidad.
FAQ#
El modelo YOLO-World es un enfoque avanzado de detección de objetos en tiempo real basado en el marco de Ultralytics YOLOv8. Destaca en tareas de Detección de Vocabulario Abierto al identificar objetos dentro de una imagen basándose en textos descriptivos. Mediante el uso de modelado de lenguaje visual y preentrenamiento en grandes conjuntos de datos, YOLO-World logra una gran eficiencia y rendimiento con demandas computacionales significativamente reducidas, lo que lo hace ideal para aplicaciones en tiempo real en diversas industrias.
YOLO-World admite una estrategia de "indicar y luego detectar", que utiliza un vocabulario sin conexión para mejorar la eficiencia. Las indicaciones personalizadas, como pies de foto o categorías de objetos específicas, se predecodifican y se almacenan como incrustaciones de vocabulario sin conexión. Este enfoque agiliza el proceso de detección sin necesidad de reentrenamiento. Puedes configurar estas indicaciones de forma dinámica dentro del 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 sobre 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 bajos requisitos de recursos: YOLO-World mantiene un alto rendimiento mientras reduce significativamente las demandas computacionales y de recursos.
- Prompts personalizables: El modelo admite la configuración dinámica de prompts, permitiendo a los usuarios especificar clases de detección personalizadas sin necesidad de reentrenamiento.
- 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 en tu propio conjunto de datos es sencillo a través de la API de Python o los comandos CLI proporcionados. Aquí tienes cómo empezar el entrenamiento usando 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 usando CLI:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640Ultralytics ofrece múltiples modelos YOLO-World preentrenados que admiten varias 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, debes preparar los conjuntos de datos e iniciar el entrenamiento utilizando 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)