Ir al contenido

YOLO-Modelo Mundial

El modelo YOLO-World introduce un sistema avanzado en tiempo real. 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 significativamente las exigencias computacionales y mantener al mismo tiempo un rendimiento competitivo, YOLO-World se perfila como una herramienta versátil para numerosas aplicaciones basadas en la visión.



Observa: YOLO Flujo de trabajo de formación mundial en un conjunto de datos personalizado

YOLO-Descripción general de la arquitectura del Modelo Mundial

Visión general

YOLO-World aborda los retos a los que se enfrentan los modelos tradicionales de detección de vocabularios abiertos, que a menudo se basan en engorrosos modelos Transformer que requieren grandes 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 marco YOLOv8 con capacidades de detección de vocabulario abierto, empleando elmodelado de visión-lenguaje y el preentrenamiento en amplios conjuntos de datos para sobresalir en la identificación de una amplia gama de objetos en escenarios de disparo cero con una eficiencia inigualable.

Características principales

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

  2. Eficacia y rendimiento: YOLO-World reduce drásticamente los requisitos computacionales y de recursos sin sacrificar el rendimiento, ofreciendo una alternativa sólida a modelos como SAM pero a una fracción del coste computacional, lo que permite aplicaciones en tiempo real.

  3. Inferencia con vocabulario fuera de línea: YOLO-World introduce una estrategia de "preguntar y luego detectar", empleando un vocabulario fuera de línea para mejorar aún más la eficiencia. Este enfoque permite codificar y almacenar como incrustaciones de vocabulario fuera de línea las indicaciones personalizadas calculadas a priori, incluidos subtítulos o categorías, lo que agiliza el proceso de detección.

  4. Desarrollado por YOLOv8: Basado en 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 rapidez inigualables.

  5. Excelencia en pruebas de referencia: YOLO World supera a los detectores de vocabulario abierto existentes, incluidas las series MDETR y GLIP, en términos de velocidad y eficacia en las pruebas de referencia estándar, lo que demuestra la capacidad superior de YOLOv8 en un único NVIDIA V100 GPU.

  6. Aplicaciones versátiles: YOLO-El enfoque innovador de World abre nuevas posibilidades para multitud de tareas de visión, proporcionando mejoras de velocidad en órdenes de magnitud con respecto a los métodos existentes.

Modelos disponibles, tareas admitidas y modos de funcionamiento

En esta sección se detallan los modelos disponibles con sus pesos específicos preentrenados, las tareas que admiten y su compatibilidad con varios modos de funcionamiento 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 modelo Pesas preentrenadas Tareas admitidas Inferencia Validación Formación Exportar
YOLOv8s-mundo yolov8s-world.pt Detección de objetos
YOLOv8s-worldv2 yolov8s-worldv2.pt Detección de objetos
YOLOv8m-mundo yolov8m-world.pt Detección de objetos
YOLOv8m-worldv2 yolov8m-worldv2.pt Detección de objetos
YOLOv8l-mundo yolov8l-world.pt Detección de objetos
YOLOv8l-worldv2 yolov8l-worldv2.pt Detección de objetos
YOLOv8x-mundo yolov8x-world.pt Detección de objetos
YOLOv8x-worldv2 yolov8x-worldv2.pt Detección de objetos

Transferencia de disparo cero en el conjunto de datos COCO

Tipo de modelo mAP mAP50 mAP75
yolov8s-mundo 37.4 52.0 40.6
yolov8s-worldv2 37.7 52.2 41.0
yolov8m-mundo 42.0 57.0 45.6
yolov8m-worldv2 43.0 58.4 46.8
yolov8l-mundo 45.7 61.3 49.8
yolov8l-worldv2 45.8 61.3 49.8
yolov8x-mundo 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 sus aplicaciones Python . Ultralytics proporciona una API Python y comandos CLI fáciles de usar para agilizar el desarrollo.

Uso del tren

Consejo

Recomendamos encarecidamente utilizar yolov8-worldv2 para la formación personalizada, ya que admite la formación determinista y también es fácil de exportar a otros formatos, como onnx/tensorrt.

Detección de objetos es sencillo con el train como se ilustra a continuación:

Ejemplo

PyTorch preentrenado *.pt así como la configuración *.yaml pueden pasarse a la función 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 YOLOv8n model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
# Load a pretrained YOLOv8s-worldv2 model and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

Predecir el uso

La detección de objetos es sencilla con el 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()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640

Este fragmento demuestra la simplicidad de cargar un modelo preentrenado y ejecutar una predicción sobre una imagen.

Uso de Val

La validación del modelo en un conjunto de datos se racionaliza del siguiente modo:

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")
# Validate a YOLO-World model on the COCO8 dataset with a specified image size
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640

Uso de la pista

El seguimiento de objetos con el modelo YOLO-World en un vídeo/imágenes se racionaliza del siguiente modo:

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")
# Track with a YOLO-World model on the video with a specified image size
yolo track model=yolov8s-world.pt imgsz=640 source="path/to/video/file.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, lo que mejora la eficacia para su 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 adicionales.

Establecer indicaciones

YOLO-Resumen de los nombres de las clases

El marco YOLO-World permite la especificación dinámica de clases a través de avisos personalizados, lo que permite a los usuarios adaptar el modelo a sus necesidades específicas sin necesidad de volver a formarse. Esta función es especialmente útil para adaptar el modelo a nuevos dominios o tareas específicas que no formaban parte de los datos de entrenamiento. Al configurar las instrucciones personalizadas, los usuarios pueden orientar el modelo hacia objetos de interés, lo que aumenta la pertinencia y precisión de los resultados de detección.

Por ejemplo, si su aplicación sólo requiere detectar objetos "persona" y "autobús", puede 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()

También puede guardar un modelo después de configurar las clases personalizadas. De este modo, creará una versión del modelo YOLO-World especializada para su caso de uso específico. Este proceso incorpora sus definiciones de clases personalizadas directamente en el archivo del modelo, haciendo que el modelo esté listo para ser utilizado con sus clases especificadas sin más ajustes. Siga estos pasos para guardar y cargar su modelo personalizado YOLOv8 :

Ejemplo

Primero cargue un modelo YOLO-World, configure clases personalizadas para él y guárdelo:

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

Una vez guardado, el modelo custom_yolov8s.pt se comporta como cualquier otro modelo preentrenado de YOLOv8 , pero con una diferencia clave: ahora está optimizado para detectar sólo las clases que usted haya definido. Esta personalización puede mejorar significativamente el rendimiento y la eficacia de la detección para sus 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()

Ventajas de ahorrar con el vocabulario personalizado

  • Eficacia: Agiliza el proceso de detección centrándose en los objetos relevantes, reduciendo la carga computacional y acelerando la inferencia.
  • Flexibilidad: Permite adaptar fácilmente el modelo a tareas de detección nuevas o de nicho sin necesidad de un reentrenamiento o recopilación de datos exhaustivos.
  • Simplicidad: Simplifica el despliegue al eliminar la necesidad de especificar repetidamente clases personalizadas en tiempo de ejecución, haciendo que el modelo pueda utilizarse directamente con su vocabulario integrado.
  • Rendimiento: Mejora la precisión de la detección para las clases especificadas centrando la atención y los recursos del modelo en el reconocimiento de los objetos definidos.

Este enfoque proporciona un potente medio para personalizar los modelos de detección de objetos más avanzados para tareas específicas, lo que hace 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

  • Datos del tren
Conjunto de datos Tipo Muestras Cajas Archivos de anotación
Objetos365v1 Detección 609k 9621k objects365_train.json
GQA Conexión a tierra 621k 3681k final_mixed_train_no_coco.json
Flickr30k Conexión a tierra 149k 641k final_flickr_separateGT_train.json
  • Datos Val
Conjunto de datos Tipo Archivos de anotación
LVIS minival Detección minival.txt

Iniciar la formación 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 puesta a tierra simultáneamente. Más información en ultralytics.model.yolo.world.train_world.py.

Ejemplo

from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="../datasets/flickr30k/images",
                json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="../datasets/GQA/images",
                json_file="../datasets/GQA/final_mixed_train_no_coco.json",
            ),
        ],
    ),
    val=dict(yolo_data=["lvis.yaml"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)

Citas y agradecimientos

Extendemos nuestra gratitud al Centro de Visión por Ordenador AILab de Tencent 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 YOLO-World está disponible en arXiv. El código fuente del proyecto y otros recursos pueden consultarse en su repositorio de GitHub. Apreciamos su compromiso por hacer avanzar este campo y compartir sus valiosos conocimientos 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 Ultralytics YOLOv8 en tiempo real. Destaca en tareas de detección de vocabulario abierto al identificar objetos dentro de una imagen basándose en textos descriptivos. Gracias al modelado del lenguaje de visión y al preentrenamiento en grandes conjuntos de datos, YOLO-World logra una gran eficiencia y rendimiento con una demanda computacional significativamente reducida, lo que lo hace ideal para aplicaciones en tiempo real en diversos sectores.

¿Cómo gestiona YOLO-World la inferencia con indicaciones personalizadas?

YOLO-World es compatible con la estrategia "preguntar y luego detectar", que utiliza un vocabulario offline para mejorar la eficacia. Las indicaciones personalizadas, como subtítulos o categorías específicas de objetos, se codifican previamente y se almacenan como incrustaciones de vocabulario fuera de línea. Este método agiliza el proceso de detección sin necesidad de reentrenamiento. Puede configurar dinámicamente estas indicaciones 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é 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 de cálculo de las CNN para ofrecer una detección rápida y eficaz.
  • Eficiencia y bajo consumo de recursos: YOLO-World mantiene un alto rendimiento a la vez que reduce significativamente la demanda de recursos y de cálculo.
  • Avisos personalizables: El modelo admite la configuración dinámica de avisos, lo que permite a los usuarios especificar clases de detección personalizadas sin necesidad de reentrenamiento.
  • Excelencia en las pruebas: Supera a otros detectores de vocabulario abierto, como MDETR y GLIP, tanto en velocidad como en eficacia en pruebas estándar.

¿Cómo entreno un modelo YOLO-World en mi conjunto de datos?

Entrenar un modelo YOLO-World en su conjunto de datos es sencillo a través de la API proporcionada Python o los comandos CLI . A continuación se explica cómo empezar a entrenar 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 utilizando CLI:

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

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

Ultralytics ofrece múltiples modelos preentrenados YOLO-World que admiten diversas tareas y modos de funcionamiento:

Tipo de modelo Pesas preentrenadas Tareas admitidas Inferencia Validación Formación Exportar
YOLOv8s-mundo yolov8s-world.pt Detección de objetos
YOLOv8s-worldv2 yolov8s-worldv2.pt Detección de objetos
YOLOv8m-mundo yolov8m-world.pt Detección de objetos
YOLOv8m-worldv2 yolov8m-worldv2.pt Detección de objetos
YOLOv8l-mundo yolov8l-world.pt Detección de objetos
YOLOv8l-worldv2 yolov8l-worldv2.pt Detección de objetos
YOLOv8x-mundo 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, es necesario preparar los conjuntos de datos y lanzar el entrenamiento utilizando el código proporcionado. El procedimiento de entrenamiento consiste en crear un diccionario de datos y ejecutar el programa 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": "../datasets/flickr30k/images",
                "json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
            },
            {
                "img_path": "../datasets/GQA/images",
                "json_file": "../datasets/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)
Creado hace 10 meses ✏️ Actualizado hace 1 mes

Comentarios