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 en una imagen a partir de textos descriptivos. Al reducir significativamente las demandas computacionales mientras mantiene un rendimiento competitivo, YOLO-World surge como una herramienta versátil para numerosas aplicaciones basadas en visión.



Watch: YOLO World training workflow on custom dataset

Vista general de la arquitectura del modelo YOLO-World

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 complejos que requieren amplios recursos computacionales. La dependencia de estos modelos de categorías de objetos predefinidas también limita su utilidad en escenarios dinámicos. YOLO-World revitaliza el framework YOLOv8 con capacidades de detección de vocabulario abierto, empleando modelado de lenguaje visual 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 clave

  1. Solución en tiempo real: Aprovechando la velocidad computacional de las CNN, YOLO-World ofrece una solución de detección de vocabulario abierto rápida, satisfaciendo a las industrias que necesitan resultados inmediatos.

  2. Eficiencia y rendimiento: YOLO-World reduce drásticamente los requisitos de recursos y computación 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.

  3. Inferencia con vocabulario offline: YOLO-World introduce una estrategia de "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, optimizando el proceso de detección.

  4. 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 inigualables.

  5. 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.

  6. 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 respecto a los métodos existentes.

Modelos disponibles, tareas admitidas 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.

Nota

Todos los pesos de YOLOv8-World han sido migrados directamente desde el repositorio oficial de YOLO-World, destacando sus excelentes contribuciones.

Tipo de modeloPesos preentrenadosTareas soportadasInferenciaValidaciónEntrenamientoExportar (Export)
YOLOv8s-worldyolov8s-world.ptDetección de objetos
YOLOv8s-worldv2yolov8s-worldv2.ptDetección de objetos
YOLOv8m-worldyolov8m-world.ptDetección de objetos
YOLOv8m-worldv2yolov8m-worldv2.ptDetección de objetos
YOLOv8l-worldyolov8l-world.ptDetección de objetos
YOLOv8l-worldv2yolov8l-worldv2.ptDetección de objetos
YOLOv8x-worldyolov8x-world.ptDetección de objetos
YOLOv8x-worldv2yolov8x-worldv2.ptDetección de objetos

Transferencia zero-shot en el conjunto de datos COCO

Rendimiento
Tipo de modelomAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

Ejemplos de uso

Los modelos YOLO-World son fáciles de integrar en tus aplicaciones Python. Ultralytics proporciona una API de Python fácil de usar y comandos CLI para agilizar el desarrollo.



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

Uso del entrenamiento

Consejo

Recomendamos encarecidamente utilizar el modelo yolov8-worldv2 para el entrenamiento personalizado, ya que admite el entrenamiento determinista y también es fácil de exportar a otros formatos, es decir, onnx/tensorrt.

La detección de objetos es sencilla con el método train, como se ilustra a continuación:

Ejemplo

PyTorch pretrained *.pt models as well as configuration *.yaml files can be passed to the YOLOWorld() class to create a model instance in 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 la predicción (Predict)

La detección de objetos es sencilla con el método predict, como se ilustra a continuación:

Ejemplo
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 validación (Val)

La validación del modelo en un conjunto de datos se simplifica de la siguiente manera:

Ejemplo
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 seguimiento (Track)

El seguimiento de objetos con el modelo YOLO-World en vídeo/imágenes se simplifica de la siguiente manera:

Ejemplo
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")
Nota

Los modelos YOLO-World proporcionados por Ultralytics vienen preconfigurados con las categorías del conjunto de datos COCO como parte de su vocabulario offline, mejorando la eficiencia para una 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 conjunto de datos COCO sin necesidad de configuración o personalización adicional.

Establecer prompts

Vista general de los nombres de clase de los prompts de YOLO-World

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 reentrenamiento. Esta función es particularmente útil para adaptar el modelo a nuevos dominios o tareas específicas que originalmente no formaban parte de los datos de entrenamiento. Al establecer prompts personalizados, los usuarios pueden guiar esencialmente el enfoque 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 requiere detectar objetos de tipo 'persona' y 'autobús', puedes especificar estas clases directamente:

Ejemplo
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()
Clase de fondo

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 del todo:

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 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:

Ejemplo

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: Optimiza el proceso de detección al centrarse en los objetos relevantes, reduciendo la carga computacional y acelerando la inferencia.
  • Flexibilidad: Permite una fácil adaptación del modelo a tareas de detección nuevas o especializadas sin necesidad de un reentrenamiento extenso o recolección de datos.
  • Simplicidad: Simplifica la implementación 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 especificadas al centrar la atención y los recursos del modelo en reconocer los objetos definidos.

Este enfoque proporciona 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 una gama más amplia de aplicaciones prácticas.

Reproducir resultados oficiales desde cero (Experimental)

Preparar conjuntos de datos

  • Entrenar datos
DatasetTipoMuestrasBoxesArchivos de anotación
Objects365v1Detección609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Datos de validación
DatasetTipoArchivos de anotación
LVIS minivalDetecciónminival.txt

Inicia el entrenamiento desde cero

Nota

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 grounding simultáneamente. Para más detalles, consulta ultralytics.model.yolo.world.train_world.py.

Ejemplo
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:

Cita
@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 recursos adicionales pueden consultarse a través de su repositorio de GitHub. Agradecemos su compromiso con el avance del campo y por compartir sus valiosas aportaciones con la comunidad.

Preguntas frecuentes

¿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 marco de trabajo 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 modelado de visión-lenguaje y el pre-entrenamiento en grandes conjuntos de datos, YOLO-World logra una alta eficiencia y rendimiento con demandas computacionales significativamente reducidas, lo que lo hace ideal para aplicaciones en tiempo real en diversos sectores.

¿Cómo gestiona YOLO-World la inferencia con prompts personalizados?

YOLO-World admite una estrategia de "prompt-then-detect" (primero prompt, luego detectar), que utiliza un vocabulario offline para mejorar la eficiencia. Los prompts personalizados, como pies de foto o categorías de objetos específicas, se codifican previamente y se almacenan como embeddings de vocabulario offline. Este enfoque agiliza el proceso de detección sin necesidad de reentrenamiento. Puedes establecer 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 en lugar de los modelos tradicionales de detección de vocabulario abierto?

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, lo que permite a los usuarios especificar clases de detección personalizadas sin necesidad de reentrenamiento.
  • Excelente rendimiento 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 conjunto de datos?

Entrenar un modelo YOLO-World con tu conjunto de datos es sencillo a través de la API de Python proporcionada o mediante comandos de CLI. Así es como empiezas 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 la CLI:

yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

¿Cuáles son los modelos YOLO-World pre-entrenados disponibles y sus tareas compatibles?

Ultralytics ofrece múltiples modelos YOLO-World pre-entrenados que admiten diversas tareas y modos de operación:

Tipo de modeloPesos preentrenadosTareas soportadasInferenciaValidaciónEntrenamientoExportar (Export)
YOLOv8s-worldyolov8s-world.ptDetección de objetos
YOLOv8s-worldv2yolov8s-worldv2.ptDetección de objetos
YOLOv8m-worldyolov8m-world.ptDetección de objetos
YOLOv8m-worldv2yolov8m-worldv2.ptDetección de objetos
YOLOv8l-worldyolov8l-world.ptDetección de objetos
YOLOv8l-worldv2yolov8l-worldv2.ptDetección de objetos
YOLOv8x-worldyolov8x-world.ptDetección de objetos
YOLOv8x-worldv2yolov8x-worldv2.ptDetección de objetos

¿Cómo reproduzco los resultados oficiales de YOLO-World desde cero?

Para reproducir los resultados oficiales desde cero, necesitas preparar los conjuntos de datos y lanzar el entrenamiento usando el código proporcionado. El procedimiento de entrenamiento implica crear un diccionario de datos y ejecutar el método train 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)

Comentarios