Modelo YOLO-World
El modelo YOLO-World introduce un enfoque avanzado y en tiempo real basado en Ultralytics YOLOv8 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, manteniendo al mismo tiempo un rendimiento competitivo, YOLO-World emerge como una herramienta versátil para numerosas aplicaciones basadas en la visión.
Ver: Flujo de trabajo de entrenamiento de YOLO World en un conjunto de datos personalizado
Visión general
YOLO-World aborda los desafíos que enfrentan los modelos tradicionales de detección de vocabulario abierto, que a menudo dependen de modelos Transformer engorrosos que requieren amplios 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 YOLOv8 con capacidades de detección de vocabulario abierto, empleando modelado de visión-lenguaje y preentrenamiento en conjuntos de datos expansivos para sobresalir en la identificación de una amplia gama de objetos en escenarios de cero disparos con una eficiencia inigualable.
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, que atiende a las industrias que necesitan resultados inmediatos.
-
Eficiencia y rendimiento: YOLO-World reduce drásticamente los requisitos computacionales y de 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 "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 subtítulos o categorías, para ser codificados y almacenados como incrustaciones de vocabulario offline, agilizando el proceso de detección.
-
Impulsado por YOLOv8: Construido sobre Ultralytics YOLOv8, YOLO-World aprovecha los últimos avances en la detección de objetos en tiempo real para facilitar la detección de vocabulario abierto con una precisión y velocidad incomparables.
-
Excelencia en el benchmark: YOLO-World supera a los detectores de vocabulario abierto existentes, incluidas las series MDETR y GLIP, en términos de velocidad y eficiencia en benchmarks estándar, lo que demuestra la capacidad superior de YOLOv8 en una sola GPU NVIDIA V100.
-
Aplicaciones versátiles: El enfoque innovador de YOLO-World desbloquea nuevas posibilidades para multitud de tareas de visión, ofreciendo mejoras de velocidad en órdenes de magnitud con respecto a los métodos existentes.
Modelos disponibles, tareas compatibles y modos de funcionamiento
En esta sección se detallan los modelos disponibles con sus pesos pre-entrenados específicos, las tareas que admiten y su compatibilidad con varios modos de operación como Inferencia, Validación, Entrenamiento y Exportación, denotado por ✅ para los modos compatibles y ❌ para los modos no compatibles.
Nota
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 Pre-entrenados | Tareas admitidas | Inferencia | 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 conjunto de datos COCO
Rendimiento
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 sus aplicaciones de python. Ultralytics proporciona una API de python y comandos CLI fáciles de usar para agilizar el desarrollo.
Uso del Entrenamiento
Consejo
Recomendamos encarecidamente utilizar yolov8-worldv2
modelo para el entrenamiento personalizado, porque admite el entrenamiento determinista y también es fácil de exportar a otros formatos, es decir, ONNX/TensorRT.
Detección de objetos es sencillo con el train
método, como se ilustra a continuación:
Ejemplo
PyTorch preentrenados *.pt
modelos, así como la configuración *.yaml
los archivos se pueden pasar a la YOLOWorld()
clase 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
Uso de Predicción
La detección de objetos es sencilla con predict
método, 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 pre-entrenado y ejecutar una predicción en una imagen.
Uso de Val
La validación de modelos 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")
# 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
Seguimiento del uso
El seguimiento de objetos con el modelo YOLO-World en un video/imágenes se realiza 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")
# 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.mp4"
Nota
Los modelos YOLO-World proporcionados por Ultralytics vienen preconfigurados con categorías del conjunto de datos COCO como parte de su vocabulario offline, lo que mejora la eficiencia para su 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 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, lo que permite a los usuarios adaptar el modelo a sus necesidades específicas sin necesidad de volver a entrenar. Esta característica es particularmente útil para adaptar el modelo a nuevos dominios o tareas específicas que no formaban parte originalmente de los datos de entrenamiento. Al establecer prompts personalizados, los usuarios pueden esencialmente guiar 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 '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()
También puede guardar un modelo después de establecer clases personalizadas. Al hacer esto, crea una versión del modelo YOLO-World que está especializada para su caso de uso específico. Este proceso incrusta las definiciones de sus clases personalizadas directamente en el archivo del modelo, lo que hace que el modelo esté listo para usar con sus clases especificadas sin más ajustes. Siga estos pasos para guardar y cargar su modelo YOLOv8 personalizado:
Ejemplo
Primero cargue un modelo YOLO-World, establezca 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")
Después de guardar, el modelo custom_yolov8s.pt se comporta como cualquier otro modelo YOLOv8 pre-entrenado, 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()
Ventajas de guardar con vocabulario personalizado
- Eficiencia: Agiliza el proceso de detección centrándose en los 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 o recopilación de datos extensivos.
- 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 específicas al enfocar la atención y los recursos del modelo en el reconocimiento de los objetos definidos.
Este enfoque proporciona un medio poderoso para personalizar los 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
- Datos de entrenamiento
Conjunto de datos | Tipo | Muestras | Cajas delimitadoras | Archivos de anotación |
---|---|---|---|---|
Objects365v1 | 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 de Val
Conjunto de datos | Tipo | Archivos de anotación |
---|---|---|
LVIS minival | Detección | minival.txt |
Inicie 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 obtener más detalles, consulte 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="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"]),
)
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 Artificial 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 obtener más información, el documento original de YOLO-World está disponible en arXiv. Se puede acceder al código fuente del proyecto y a recursos adicionales a través de su repositorio de GitHub. Agradecemos su compromiso de hacer avanzar el campo y de 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 framework Ultralytics YOLOv8. Destaca en tareas de detección de vocabulario abierto al identificar objetos dentro de una imagen basándose en textos descriptivos. Utilizando el modelado de visión-lenguaje y el preentrenamiento 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 diversas industrias.
¿Cómo gestiona YOLO-World la inferencia con prompts personalizados?
YOLO-World admite una estrategia de "prompt-then-detect", que utiliza un vocabulario fuera de línea para mejorar la eficiencia. Los prompts personalizados, como subtítulos o categorías de objetos específicos, se pre-codifican y se almacenan como incrustaciones de vocabulario fuera de línea. Este enfoque agiliza el proceso de detección sin necesidad de volver a entrenar. Puede 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 al tiempo que reduce significativamente las demandas computacionales y de recursos.
- Indicaciones personalizables: El modelo admite el ajuste dinámico de indicaciones, lo que permite a los usuarios especificar clases de detección personalizadas sin necesidad de volver a entrenar.
- Excelencia en el benchmark: 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 en mi conjunto de datos?
Entrenar un modelo YOLO-World en tu dataset es sencillo a través de la API de Python o los comandos de la CLI proporcionados. Aquí te mostramos 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 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 funcionamiento:
Tipo de Modelo | Pesos Pre-entrenados | Tareas admitidas | Inferencia | 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, debes preparar los conjuntos de datos e iniciar el entrenamiento utilizando el código proporcionado. El procedimiento de entrenamiento implica la creación de un diccionario de datos y la ejecución del 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)