Modelo YOLO-World
El modelo YOLO-World presenta un enfoque avanzado y en tiempo real Ultralytics YOLOv8-basado para tareas de detección de vocabulario abierto. Esta innovación permite la detección de cualquier objeto dentro de una imagen basándose en textos descriptivos. Al reducir significativamente las demandas computacionales mientras mantiene un rendimiento competitivo, YOLO-World emerge como 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 de detección de vocabulario abierto tradicionales, que a menudo dependen de modelos Transformer pesados que requieren extensos recursos computacionales. La dependencia de estos modelos en categorías de objetos predefinidas también restringe su utilidad en escenarios dinámicos. YOLO-World revitaliza el framework de YOLOv8 con capacidades de detección de vocabulario abierto, empleando el modelado de visión-lenguaje y preentrenamiento en vastos conjuntos de datos para sobresalir en la identificación de una amplia gama de objetos en escenarios zero-shot con una eficiencia inigualable.
Características principales
-
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, atendiendo a industrias que necesitan resultados inmediatos.
-
Eficiencia y rendimiento: YOLO-World reduce drásticamente los requisitos de computación y recursos sin sacrificar el rendimiento, ofreciendo una alternativa robusta a modelos como SAM pero a una fracción del coste computacional, lo que permite aplicaciones en tiempo real.
-
Inferencia con vocabulario offline: YOLO-World introduce una estrategia de "indicar para 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, optimizando el proceso de detección.
-
Impulsado por 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 sin precedentes.
-
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 única GPU NVIDIA V100.
-
Aplicaciones versátiles: El enfoque innovador de YOLO-World abre nuevas posibilidades para multitud de tareas de visión, ofreciendo mejoras de velocidad por órdenes de magnitud respecto a los métodos existentes.
Modelos disponibles, tareas soportadas 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 diversos modos de operación como Inference, Validación, Entrenamiento, y Exportar, denotados por ✅ para los modos admitidos y ❌ para los no admitidos.
Todos los pesos de YOLOv8-World han sido migrados directamente desde el repositorio oficial YOLO-World, destacando sus excelentes contribuciones.
| Tipo de modelo | Pesos preentrenados | Tareas admitidas | Inference | Validación | Entrenamiento | 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 dataset 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 Python API 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 para entrenamiento
Recomendamos encarecidamente utilizar el modelo yolov8-worldv2 para el entrenamiento personalizado, ya que admite entrenamiento determinista y también es fácil de exportar a otros formatos, es decir, onnx/tensorrt.
Detección de objetos es directo con el método train, como se ilustra a continuación:
PyTorch preentrenados *.pt modelos, así como los *.yaml archivos de configuración se pueden pasar a la YOLOWorld() clase 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 para predicción
La detección de objetos es directa con el predict, 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 para validación
La validación del modelo en un dataset se agiliza 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 para seguimiento
El seguimiento de objetos con el modelo YOLO-World en un vídeo/imágenes se agiliza 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 COCO dataset categorías como parte de su vocabulario offline, mejorando la eficiencia para la aplicación inmediata. Esta integración permite a los modelos YOLOv8-World reconocer y predecir directamente las 80 categorías estándar definidas en el dataset COCO sin requerir configuración o personalización adicional.
Establecer prompts

El framework YOLO-World permite la especificación dinámica de clases a través de prompts personalizados, permitiendo a los usuarios adaptar el modelo a sus necesidades específicas sin reentrenar. Esta característica es particularmente útil para adaptar el modelo a nuevos dominios o tareas específicas que no formaban parte originalmente del datos de entrenamiento. Al configurar prompts personalizados, los usuarios pueden esencialmente guiar el enfoque del modelo hacia los objetos de interés, mejorando la relevancia y precisión de los resultados de detección.
Por ejemplo, si tu aplicación solo requiere detectar objetos de '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 completamente:
model.set_classes(["person", "bus", ""])También puedes guardar un modelo después de configurar clases personalizadas. Al hacerlo, creas una versión del modelo YOLO-World que está especializada para tu caso de uso específico. Este proceso integra tus definiciones de clase personalizadas directamente en el archivo del modelo, haciendo que el modelo esté listo para usar con tus clases especificadas sin más ajustes. Sigue estos pasos para guardar y cargar tu modelo YOLO-World personalizado:
Primero carga un modelo YOLO-World, configura 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 de la detección y la eficiencia 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: Optimiza el proceso de detección al centrarse en objetos relevantes, lo que reduce la carga computacional y acelera la inferencia.
- Flexibilidad: Permite una fácil adaptación del modelo a tareas de detección nuevas o especializadas sin necesidad de un reentrenamiento exhaustivo o de recopilació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 la detección para clases específicas al enfocar la atención y los recursos del modelo en el reconocimiento de los objetos definidos.
Este enfoque proporciona un medio potente para personalizar modelos de object detection de última generación para tareas específicas, haciendo que la IA avanzada sea más accesible y aplicable a una gama más amplia de aplicaciones prácticas.
Reproduce resultados oficiales desde cero (Experimental)
Prepara datasets
- Entrena datos
| Dataset | Tipo | Muestras | Boxes | Archivos de anotación |
|---|---|---|---|---|
| Objects365v1 | Detection | 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
| Dataset | Tipo | Archivos de anotación |
|---|---|---|
| LVIS minival | Detection | minival.txt |
Inicia el entrenamiento desde cero
WorldTrainerFromScratch está altamente personalizado para permitir el entrenamiento de modelos yolo-world tanto en datasets de detección como en datasets de grounding simultáneamente. Para más detalles, por favor consulta ultralytics.model.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
data = dict(
train=dict(
yolo_data=["Objects365.yaml"],
grounding_data=[
dict(
img_path="flickr30k/images",
json_file="flickr30k/final_flickr_separateGT_train.json",
),
dict(
img_path="GQA/images",
json_file="GQA/final_mixed_train_no_coco.json",
),
],
),
val=dict(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 reconocimientos
Extendemos nuestra gratitud al Tencent AILab Computer Vision Center 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 más información, el artículo original de YOLO-World está disponible en arXiv. El código fuente del proyecto y recursos adicionales pueden ser consultados a través de su repositorio de GitHub. Agradecemos su compromiso por hacer avanzar el campo y compartir sus valiosas ideas con la comunidad.
FAQ
¿Qué es el modelo YOLO-World y cómo funciona?
El modelo YOLO-World es un enfoque avanzado de detección de objetos en tiempo real basado en el framework Ultralytics YOLOv8. Destaca en tareas de Open-Vocabulary Detection identificando objetos dentro de una imagen basándose en textos descriptivos. Utilizando modelos de visión-lenguaje y preentrenamiento en grandes datasets, YOLO-World logra una alta eficiencia y rendimiento con demandas computacionales significativamente reducidas, lo que lo hace ideal para aplicaciones en tiempo real en diversas industrias.
¿Cómo maneja YOLO-World la inferencia con prompts personalizados?
YOLO-World admite una estrategia de "prompt-then-detect", que utiliza un vocabulario offline para mejorar la eficiencia. Los prompts personalizados, como pies de foto o categorías específicas de objetos, se codifican previamente y se almacenan como vocabulario offline embeddings. Este enfoque agiliza el proceso de detección sin necesidad de reentrenamiento. Puedes configurar dinámicamente estos prompts 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()¿Por qué debería elegir YOLO-World frente a modelos tradicionales de detección Open-Vocabulary?
YOLO-World ofrece varias ventajas sobre los modelos tradicionales de detección Open-Vocabulary:
- 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 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.
¿Cómo entreno un modelo YOLO-World con mi propio dataset?
Entrenar un modelo YOLO-World con tu propio dataset es sencillo a través de la API de Python o comandos de CLI proporcionados. Aquí te explicamos cómo empezar a entrenar 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=640¿Qué modelos YOLO-World preentrenados hay disponibles y qué tareas admiten?
Ultralytics ofrece múltiples modelos YOLO-World preentrenados que admiten diversas tareas y modos de operación:
| Tipo de modelo | Pesos preentrenados | Tareas admitidas | Inference | Validación | Entrenamiento | 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 | ✅ | ✅ | ✅ | ✅ |
¿Cómo reproduzco los resultados oficiales de YOLO-World desde cero?
Para reproducir los resultados oficiales desde cero, necesitas preparar los datasets y lanzar el entrenamiento usando el código proporcionado. El procedimiento de entrenamiento implica crear un diccionario de datos y ejecutar el train método con 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)