YOLO Vision 2026 :

Modèle YOLO-World#

Le modèle YOLO-World introduit une approche avancée en temps réel basée sur Ultralytics YOLOv8 pour les tâches de détection à vocabulaire ouvert. Cette innovation permet de détecter n'importe quel objet dans une image à l'aide de textes descriptifs. En réduisant considérablement les exigences de calcul tout en préservant des performances compétitives, YOLO-World s'impose comme un outil polyvalent pour de nombreuses applications basées sur la vision.



Watch: YOLO World training workflow on custom dataset

Aperçu de l'architecture du modèle YOLO-World

Présentation#

YOLO-World relève les défis rencontrés par les modèles de détection à vocabulaire ouvert traditionnels, qui reposent souvent sur des modèles Transformer lourds nécessitant d'importantes ressources de calcul. La dépendance de ces modèles vis-à-vis de catégories d'objets prédéfinies restreint également leur utilité dans des scénarios dynamiques. YOLO-World ins insuffle une nouvelle jeunesse au cadre YOLOv8 avec des capacités de détection à vocabulaire ouvert, en employant la modélisation vision-langage et un pré-entraînement sur des ensembles de données étendus pour exceller dans l'identification d'un large éventail d'objets dans des scénarios zero-shot avec une efficacité inégalée.

Pour le travail à vocabulaire ouvert qui nécessite également des masques d'instance, des invites visuelles ou un mode sans invite, consulte YOLOE, qui conserve la même API set_classes().

Fonctionnalités clés#

  1. Solution en temps réel : En exploitant la vitesse de calcul des CNN, YOLO-World offre une solution de détection rapide à vocabulaire ouvert, répondant aux besoins des industries en quête de résultats immédiats.

  2. Efficacité et performance : YOLO-World réduit les besoins en calcul et en ressources sans sacrifier les performances, offrant une alternative robuste à des modèles comme SAM, mais à une fraction du coût de calcul, permettant des applications en temps réel.

  3. Inférence avec vocabulaire hors ligne : YOLO-World introduit une stratégie de "détection par prompt" (prompt-then-detect), utilisant un vocabulaire hors ligne pour accroître encore l'efficacité. Cette approche permet d'utiliser des prompts personnalisés calculés a priori, incluant des légendes ou des catégories, pour être encodés et stockés en tant qu'embeddings de vocabulaire hors ligne, simplifiant ainsi le processus de détection.

  4. Propulsé par YOLOv8 : Construit sur Ultralytics YOLOv8, YOLO-World exploite les dernières avancées en matière de détection d'objets en temps réel pour faciliter la détection à vocabulaire ouvert avec une précision et une vitesse sans égales.

  5. Excellence des benchmarks : YOLO-World surpasse les détecteurs à vocabulaire ouvert existants, y compris les séries MDETR et GLIP, en termes de vitesse et d'efficacité sur les benchmarks standards, démontrant la capacité supérieure de YOLOv8 sur un seul GPU NVIDIA V100.

  6. Applications polyvalentes : L'approche innovante de YOLO-World ouvre de nouvelles possibilités pour une multitude de tâches de vision, offrant des améliorations de vitesse de plusieurs ordres de grandeur par rapport aux méthodes existantes.

Modèles disponibles, tâches prises en charge et modes de fonctionnement#

Cette section détaille les modèles disponibles avec leurs poids pré-entraînés spécifiques, les tâches qu'ils prennent en charge et leur compatibilité avec divers modes de fonctionnement tels que l'Inférence, la Validation, l'Entraînement et l'Exportation, indiqués par ✅ pour les modes pris en charge et ❌ pour les modes non pris en charge.

Remarque

Tous les poids de YOLOv8-World ont été directement migrés depuis le dépôt YOLO-World officiel, soulignant leur excellente contribution.

Type de modèlePoids pré-entraînésTâches prises en chargeEntraînementValidationInférenceExporter (Export)
YOLOv8s-worldyolov8s-world.ptDétection d'objets
YOLOv8s-worldv2yolov8s-worldv2.ptDétection d'objets
YOLOv8m-worldyolov8m-world.ptDétection d'objets
YOLOv8m-worldv2yolov8m-worldv2.ptDétection d'objets
YOLOv8l-worldyolov8l-world.ptDétection d'objets
YOLOv8l-worldv2yolov8l-worldv2.ptDétection d'objets
YOLOv8x-worldyolov8x-world.ptDétection d'objets
YOLOv8x-worldv2yolov8x-worldv2.ptDétection d'objets

Transfert Zero-shot sur le jeu de données COCO#

Performance
Type de modèlemAPmAP50mAP75
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

Exemples d'utilisation#

Les modèles YOLO-World sont faciles à intégrer dans tes applications Python. Ultralytics fournit une API Python simple d'utilisation et des commandes CLI pour rationaliser le développement.



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

Utilisation pour l'entraînement#

Astuce

Nous recommandons vivement d'utiliser yolov8-worldv2 pour l'entraînement personnalisé, car il prend en charge l'entraînement déterministe et s'exporte plus facilement vers des formats tels que ONNX et TensorRT.

La détection d'objets est simple avec la méthode train, comme illustré ci-dessous :

Exemple

Des modèles pré-entraînés PyTorch *.pt ainsi que des fichiers de configuration *.yaml peuvent être passés à la classe YOLOWorld() pour créer une instance de modèle 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")

Utilisation pour la prédiction#

La détection d'objets est simple avec la méthode predict, comme illustré ci-dessous :

Exemple
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()

Ce snippet démontre la simplicité de charger un modèle pré-entraîné et d'exécuter une prédiction sur une image.

Utilisation pour la validation#

La validation du modèle sur un jeu de données est simplifiée comme suit :

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

Utilisation pour le suivi#

Le suivi d'objets avec le modèle YOLO-World sur une vidéo ou des images est simplifié comme suit :

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

Les modèles YOLO-World fournis par Ultralytics viennent préconfigurés avec les catégories du dataset COCO dans le cadre de leur vocabulaire hors ligne, améliorant ainsi l'efficacité pour une application immédiate. Cette intégration permet aux modèles YOLOv8-World de reconnaître et de prédire directement les 80 catégories standard définies dans le dataset COCO sans nécessiter de configuration ou de personnalisation supplémentaire.

Définir des prompts#

Aperçu des noms de classes de prompt YOLO-World

Le cadre YOLO-World permet la spécification dynamique de classes via des prompts personnalisés, donnant les moyens aux utilisateurs d'adapter le modèle à leurs besoins spécifiques sans réentraînement. Cette fonctionnalité est particulièrement utile pour adapter le modèle à de nouveaux domaines ou à des tâches spécifiques qui ne faisaient pas initialement partie des données d'entraînement. En définissant des prompts personnalisés, tu peux essentiellement guider l'attention du modèle vers les objets d'intérêt, améliorant ainsi la pertinence et la précision des résultats de détection.

Par exemple, si ton application nécessite uniquement de détecter les objets 'person' (personne) et 'bus', tu peux spécifier ces classes directement :

Exemple
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()
Classe d'arrière-plan

Certains utilisateurs ont constaté que l'ajout d'une chaîne vide "" en tant que classe d'arrière-plan peut améliorer les performances de détection dans certains scénarios. Ce comportement semble dépendre du scénario et le mécanisme exact n'est pas entièrement compris :

model.set_classes(["person", "bus", ""])

Tu peux également enregistrer un modèle après avoir défini des classes personnalisées. Ce faisant, tu crées une version du modèle YOLO-World spécialisée pour ton cas d'utilisation spécifique. Ce processus intègre tes définitions de classes personnalisées directement dans le fichier du modèle, le rendant prêt à l'emploi avec tes classes spécifiées sans ajustements supplémentaires. Suis ces étapes pour enregistrer et charger ton modèle YOLO-World personnalisé :

Exemple

Charge d'abord un modèle YOLO-World, définis les classes personnalisées pour celui-ci et enregistre-le :

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

Après l'enregistrement, le modèle custom_yolov8s.pt se comporte comme n'importe quel autre modèle YOLOv8 pré-entraîné, mais avec une différence clé : il est désormais optimisé pour détecter uniquement les classes que tu as définies. Cette personnalisation peut améliorer considérablement les performances de détection et l'efficacité pour tes scénarios d'application spécifiques.

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

Avantages de l'enregistrement avec un vocabulaire personnalisé#

  • Efficacité : Rationalise le processus de détection en se concentrant sur les objets pertinents, réduisant la surcharge de calcul et accélérant l'inférence.
  • Flexibilité : Permet une adaptation facile du modèle à de nouvelles tâches de détection ou de niche sans avoir besoin d'un réentraînement approfondi ou d'une collecte de données.
  • Simplicité : Simplifie le déploiement en éliminant le besoin de spécifier à plusieurs reprises des classes personnalisées lors de l'exécution, rendant le modèle directement utilisable avec son vocabulaire intégré.
  • Performance : Améliore la précision de la détection pour les classes spécifiées en concentrant l'attention et les ressources du modèle sur la reconnaissance des objets définis.

Cette approche offre un moyen puissant de personnaliser des modèles de détection d'objets de pointe pour des tâches spécifiques, rendant l'IA avancée plus accessible et applicable à un plus large éventail d'applications pratiques.

Reproduire les résultats officiels à partir de zéro (Expérimental)#

Préparer les jeux de données#

  • Données d'entraînement
Jeu de donnéesTypeÉchantillonsBoîtesFichiers d'annotation
Objects365v1Détection609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Données de validation
Jeu de donnéesTypeFichiers d'annotation
LVIS minivalDétectionminival.txt

Lancer l'entraînement à partir de zéro#

Remarque

WorldTrainerFromScratch est hautement personnalisé pour permettre l'entraînement de modèles yolo-world sur des datasets de détection et des datasets de grounding simultanément. Pour plus de détails, consulte ultralytics.models.yolo.world.train_world.py.

Exemple
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,
)

Citations et remerciements#

Nous exprimons notre gratitude au Tencent AILab Computer Vision Center pour son travail pionnier dans la détection d'objets à vocabulaire ouvert en temps réel avec YOLO-World :

Citation
@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}
}

Pour aller plus loin, le document original YOLO-World est disponible sur arXiv. Le code source du projet et des ressources supplémentaires sont accessibles via leur dépôt GitHub. Nous apprécions leur engagement à faire progresser le domaine et à partager leurs précieux enseignements avec la communauté.

FAQ#

  • Le modèle YOLO-World est une approche avancée de détection d'objets en temps réel basée sur le cadre Ultralytics YOLOv8. Il excelle dans les tâches de détection à vocabulaire ouvert en identifiant des objets dans une image à partir de textes descriptifs. En utilisant la modélisation vision-langage et un pré-entraînement sur de grands datasets, YOLO-World atteint une efficacité et des performances élevées avec des exigences de calcul considérablement réduites, ce qui le rend idéal pour les applications en temps réel dans diverses industries.

  • YOLO-World prend en charge une stratégie de type « prompt-puis-détection », qui utilise un vocabulaire hors ligne pour améliorer l'efficacité. Les prompts personnalisés tels que les légendes ou les catégories d'objets spécifiques sont pré-encodés et stockés en tant qu'embeddings de vocabulaire hors ligne. Cette approche simplifie le processus de détection sans nécessiter de réentraînement. Tu peux définir dynamiquement ces prompts au sein du modèle pour l'adapter à des tâches de détection spécifiques, comme illustré ci-dessous :

    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 offre plusieurs avantages par rapport aux modèles traditionnels de détection à vocabulaire ouvert :

    • Performances en temps réel : Il exploite la vitesse de calcul des CNN pour offrir une détection rapide et efficace.
    • Efficacité et faible exigence en ressources : YOLO-World maintient des performances élevées tout en réduisant considérablement les besoins en calcul et en ressources.
    • Invites personnalisables : Le modèle prend en charge la définition d'invites dynamiques, permettant aux utilisateurs de spécifier des classes de détection personnalisées sans réentraînement.
    • Excellence des benchmarks : Il surpasse les autres détecteurs à vocabulaire ouvert comme MDETR et GLIP en termes de vitesse et d'efficacité sur les benchmarks standards.
  • L'entraînement d'un modèle YOLO-World sur ton jeu de données est simple grâce à l'API Python fournie ou aux commandes CLI. Voici comment commencer l'entraînement en utilisant 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)

    Ou en utilisant la CLI :

    yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640
  • Ultralytics propose plusieurs modèles YOLO-World pré-entraînés prenant en charge diverses tâches et modes de fonctionnement :

    Type de modèlePoids pré-entraînésTâches prises en chargeEntraînementValidationInférenceExporter (Export)
    YOLOv8s-worldyolov8s-world.ptDétection d'objets
    YOLOv8s-worldv2yolov8s-worldv2.ptDétection d'objets
    YOLOv8m-worldyolov8m-world.ptDétection d'objets
    YOLOv8m-worldv2yolov8m-worldv2.ptDétection d'objets
    YOLOv8l-worldyolov8l-world.ptDétection d'objets
    YOLOv8l-worldv2yolov8l-worldv2.ptDétection d'objets
    YOLOv8x-worldyolov8x-world.ptDétection d'objets
    YOLOv8x-worldv2yolov8x-worldv2.ptDétection d'objets
  • Pour reproduire les résultats officiels à partir de zéro, tu dois préparer les datasets et lancer l'entraînement en utilisant le code fourni. La procédure d'entraînement implique la création d'un dictionnaire de données et l'exécution de la méthode train avec un entraîneur personnalisé :

    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)

Commentaires