Ultralytics YOLO27 :
Get Started

Modèle YOLO-World#

Le modèle YOLO-World présente 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 à partir de descriptions textuelles. En réduisant considérablement les besoins en calcul tout en maintenant des performances compétitives, YOLO-World devient un outil polyvalent pour de nombreuses applications de vision.



Regarder : Flux de travail d’entraînement de YOLO World sur un jeu de données personnalisé

Présentation de l’architecture du modèle YOLO-World

Présentation#

YOLO-World relève les défis auxquels sont confrontés les modèles traditionnels de détection à vocabulaire ouvert, qui s’appuient souvent sur des modèles Transformer lourds nécessitant d’importantes ressources de calcul. La dépendance de ces modèles à des catégories d’objets prédéfinies limite également leur utilité dans des scénarios dynamiques. YOLO-World donne un nouveau souffle au framework YOLOv8 en lui apportant des capacités de détection à vocabulaire ouvert, en recourant à la vision et à la modélisation du langage ainsi qu’au préentraînement sur de vastes jeux de données, afin d’identifier avec une efficacité inégalée un large éventail d’objets dans des scénarios zero-shot.

Pour les tâches à vocabulaire ouvert qui nécessitent aussi des masques d’instance, des prompts visuels ou un mode sans prompt, consulte YOLOE, qui conserve la même API set_classes().

Fonctionnalités clés#

  1. Solution en temps réel : en tirant parti de la vitesse de calcul des CNN, YOLO-World offre une solution rapide de détection à vocabulaire ouvert, adaptée aux secteurs qui ont besoin de résultats immédiats.

  2. Efficacité et performances : YOLO-World réduit les besoins en calcul et en ressources sans sacrifier les performances. Il offre une alternative robuste à des modèles comme SAM, pour une fraction de leur coût de calcul, et permet ainsi des applications en temps réel.

  3. Inférence avec vocabulaire hors ligne : YOLO-World introduit une stratégie « prompt puis détection » qui utilise un vocabulaire hors ligne pour améliorer encore l’efficacité. Cette approche permet d’utiliser des prompts personnalisés calculés à l’avance, notamment des légendes ou des catégories, de les encoder et de les stocker sous forme d’embeddings de vocabulaire hors ligne, ce qui rationalise le processus de détection.

  4. Propulsé par YOLOv8 : basé sur Ultralytics YOLOv8, YOLO-World tire parti des dernières avancées en matière de détection d’objets en temps réel pour offrir une détection à vocabulaire ouvert avec une précision et une vitesse inégalées.

  5. Excellence en matière de benchmarks : YOLO-World surpasse les détecteurs à vocabulaire ouvert existants, notamment les séries MDETR et GLIP, en termes de vitesse et d’efficacité sur les benchmarks standard, démontrant les capacités supérieures de YOLOv8 sur un seul GPU NVIDIA V100.

  6. Applications polyvalentes : l’approche innovante de YOLO-World ouvre de nouvelles perspectives pour de nombreuses tâches de vision et accélère les traitements 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 et leurs poids préentraînés spécifiques, les tâches qu’ils prennent en charge et leur compatibilité avec différents modes de fonctionnement, tels que Inférence, Validation, Entraînement et Exportation. Les émojis ✅ indiquent les modes pris en charge et les émojis ❌ ceux qui ne le sont pas.

Remarque

Tous les poids YOLOv8-World ont été directement migrés depuis le dépôt officiel YOLO-World, ce qui témoigne de ses excellentes contributions.

Type de modèlePoids préentraînésTâches prises en chargeEntraînementValidationInférenceExport
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#

Performances
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 s’intègrent facilement à tes applications Python. Ultralytics fournit une API Python et des commandes CLI faciles à utiliser pour simplifier le développement.



Regarder : Exemples d’utilisation du modèle YOLO-World avec Ultralytics | Vocabulaire ouvert, sans prompt et plus encore 🚀

Utilisation de l’entraînement#

Conseil

Nous recommandons vivement d’utiliser yolov8-worldv2 pour l’entraînement personnalisé, car il prend en charge l’entraînement déterministe et facilite l’exportation vers des formats tels que ONNX et TensorRT.

La détection d’objets est simple avec la méthode train, comme l’illustre l’exemple ci-dessous :

Exemple

Les modèles *.pt préentraînés PyTorch ainsi que les fichiers de configuration *.yaml peuvent être transmis à la classe YOLOWorld() pour créer une instance de modèle en Python :

from ultralytics import YOLOWorld

# Charger un modèle YOLOv8s-worldv2 préentraîné
model = YOLOWorld("yolov8s-worldv2.pt")

# Entraîner le modèle sur le jeu de données d'exemple COCO8 pendant 100 époques
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Exécuter l’inférence avec le modèle YOLO-World sur l’image 'bus.jpg'
results = model("path/to/bus.jpg")

Utilisation pour la prédiction#

La détection d’objets est simple avec la méthode predict, comme l’illustre l’exemple ci-dessous :

Exemple
from ultralytics import YOLOWorld

# Initialiser un modèle YOLO-World
model = YOLOWorld("yolov8s-world.pt")  # ou sélectionner yolov8m/l-world.pt pour différentes tailles

# Exécuter l’inférence avec le modèle YOLOv8s-world sur l’image spécifiée
results = model.predict("path/to/image.jpg")

# Afficher les résultats
results[0].show()

Cet extrait montre à quel point il est simple de charger un modèle préentraîné et de lancer une prédiction sur une image.

Utilisation pour la validation#

La validation du modèle sur un jeu de données se fait simplement comme suit :

Exemple
from ultralytics import YOLO

# Créer un modèle YOLO-World
model = YOLO("yolov8s-world.pt")  # ou sélectionner yolov8m/l-world.pt pour différentes tailles

# Effectuer la validation du modèle sur le jeu de données d’exemple COCO8
metrics = model.val(data="coco8.yaml")

Suivi d’utilisation#

Le suivi d’objets avec un modèle YOLO-World sur une vidéo ou des images se fait simplement comme suit :

Exemple
from ultralytics import YOLO

# Créer un modèle YOLO-World
model = YOLO("yolov8s-world.pt")  # ou sélectionner yolov8m/l-world.pt pour différentes tailles

# Effectuer le suivi avec un modèle YOLO-World sur une vidéo
results = model.track(source="path/to/video.mp4")
Remarque

Les modèles YOLO-World fournis par Ultralytics sont préconfigurés avec les catégories du jeu de données COCO dans leur vocabulaire hors ligne, ce qui améliore leur efficacité pour une utilisation 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 jeu de données COCO, sans configuration ni personnalisation supplémentaires.

Définir les prompts#

Vue d’ensemble des noms de classes des prompts YOLO-World

Le framework YOLO-World permet de spécifier des classes de façon dynamique à l’aide de prompts personnalisés, afin que tu puisses adapter le modèle à tes 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 partie des données d’entraînement d’origine. En définissant des prompts personnalisés, tu peux orienter le modèle vers les objets qui t’intéressent, ce qui améliore la pertinence et la précision des résultats de détection.

Par exemple, si ton application doit uniquement détecter les objets « personne » et « bus », tu peux spécifier directement ces classes :

Exemple
from ultralytics import YOLO

# Initialiser un modèle YOLO-World
model = YOLO("yolov8s-world.pt")  # ou choisir yolov8m/l-world.pt

# Définir des classes personnalisées
model.set_classes(["person", "bus"])

# Exécuter la prédiction pour les catégories spécifiées sur une image
results = model.predict("path/to/image.jpg")

# Afficher les résultats
results[0].show()
Classe d’arrière-plan

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

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

La chaîne vide reste dans model.names en tant que classe à part entière, y compris dans tout modèle que tu enregistres ; ses détections sont donc renvoyées avec une étiquette vide. Passe classes=[0, 1] au moment de la prédiction pour ne conserver que tes classes réelles.

Tu peux également enregistrer un modèle après avoir défini des classes personnalisées. Tu crées ainsi une version du modèle YOLO-World spécialisée pour ton cas d’utilisation. Ce processus intègre directement tes définitions de classes personnalisées au fichier du modèle, qui est alors prêt à utiliser ces classes sans autre ajustement. Suis ces étapes pour enregistrer et charger ton modèle YOLO-World personnalisé :

Exemple

Commence par charger un modèle YOLO-World, définir ses classes personnalisées, puis l’enregistrer :

from ultralytics import YOLO

# Initialiser un modèle YOLO-World
model = YOLO("yolov8s-world.pt")  # ou sélectionner yolov8m/l-world.pt

# Définir des classes personnalisées
model.set_classes(["person", "bus"])

# Enregistrer le modèle avec le vocabulaire hors ligne défini
model.save("custom_yolov8s.pt")

Après son enregistrement, le modèle custom_yolov8s.pt se comporte comme n’importe quel modèle YOLOv8 préentraîné, à une différence près : 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 et l’efficacité de la détection dans tes scénarios d’application spécifiques.

from ultralytics import YOLO

# Charger ton modèle personnalisé
model = YOLO("custom_yolov8s.pt")

# Exécuter l’inférence pour détecter tes classes personnalisées
results = model.predict("path/to/image.jpg")

# Afficher les résultats
results[0].show()

Avantages de l’enregistrement avec un vocabulaire personnalisé#

  • Efficacité : simplifie le processus de détection en se concentrant sur les objets pertinents, ce qui réduit la charge de calcul et accélère l’inférence.
  • Flexibilité : permet d’adapter facilement le modèle à de nouvelles tâches ou à des tâches de détection spécialisées, sans nécessiter de réentraînement poussé ni de collecte de données.
  • Simplicité : facilite le déploiement en éliminant le besoin de spécifier à nouveau les classes personnalisées à l’exécution ; le modèle peut être utilisé directement avec son vocabulaire intégré.
  • Performances : améliore la précision de détection des 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 éventail plus large d’applications pratiques.

Reproduire les résultats officiels depuis zéro (expérimental)#

Préparer les jeux de données#

  • Données d’entraînement
Jeu de donnéesTypeÉchantillonsBoîtesFichiers d’annotations
Objects365v1Détection609k9621kobjects365_train.json
GQAAncrage621k3681kfinal_mixed_train_no_coco.json
Flickr30kAncrage149k641kfinal_flickr_separateGT_train.json
  • Données de validation
Jeu de donnéesTypeFichiers d’annotations
LVIS minivalDétectionminival.txt

Lancer l’entraînement depuis zéro#

Remarque

WorldTrainerFromScratch est fortement personnalisé pour permettre d’entraîner simultanément des modèles yolo-world sur des jeux de données de détection et d’ancrage. Pour en savoir plus, consulte ultralytics.models.yolo.world.train_world.py.

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

# Option 1 : utiliser un dictionnaire Python
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 : utiliser un fichier YAML (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,  # ou data="yolo_world_data.yaml" si tu utilises un fichier YAML
    batch=128,
    epochs=100,
    trainer=WorldTrainerFromScratch,
)

Citations et remerciements#

Nous remercions chaleureusement le Centre de vision par ordinateur de Tencent AILab pour ses travaux novateurs sur la détection d’objets en temps réel à vocabulaire ouvert 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 en savoir plus, l’article original sur YOLO-World est disponible sur arXiv. Le code source du projet et des ressources supplémentaires sont accessibles dans leur dépôt GitHub. Nous saluons leur engagement à faire progresser le domaine et à partager leurs précieuses connaissances 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 framework Ultralytics YOLOv8. Il excelle dans les tâches de détection à vocabulaire ouvert en identifiant les objets d’une image à partir de descriptions textuelles. Grâce à la modélisation vision-langage et au préentraînement sur de grands jeux de données, YOLO-World offre une grande efficacité et de hautes performances tout en réduisant considérablement les besoins de calcul, ce qui le rend idéal pour les applications en temps réel dans divers secteurs.

  • YOLO-World prend en charge une stratégie « prompt puis détection », qui utilise un vocabulaire hors ligne pour améliorer l’efficacité. Les prompts personnalisés, tels que des légendes ou des catégories d’objets spécifiques, sont préencodés et stockés sous forme d’incorporations dans le 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 dans le modèle pour l’adapter à des tâches de détection spécifiques, comme indiqué ci-dessous :

    from ultralytics import YOLOWorld
    
    # Initialiser un modèle YOLO-World
    model = YOLOWorld("yolov8s-world.pt")
    
    # Définir des classes personnalisées
    model.set_classes(["person", "bus"])
    
    # Exécuter la prédiction sur une image
    results = model.predict("path/to/image.jpg")
    
    # Afficher les résultats
    results[0].show()
  • YOLO-World présente plusieurs avantages par rapport aux modèles traditionnels de détection à vocabulaire ouvert :

    • Performances en temps réel : il tire parti de la vitesse de calcul des CNN pour offrir une détection rapide et efficace.
    • Efficacité et faibles besoins en ressources : YOLO-World maintient des performances élevées tout en réduisant considérablement les besoins en calcul et en ressources.
    • Prompts personnalisables : le modèle prend en charge la définition dynamique des prompts, ce qui permet de spécifier des classes de détection personnalisées sans réentraînement.
    • Excellence aux tests de référence : il surpasse d’autres détecteurs à vocabulaire ouvert comme MDETR et GLIP en vitesse et en efficacité sur les tests de référence standard.
  • L’entraînement d’un modèle YOLO-World sur ton jeu de données est simple grâce à l’API Python ou aux commandes CLI fournies. Voici comment démarrer l’entraînement avec Python :

    from ultralytics import YOLOWorld
    
    # Charger un modèle YOLOv8s-worldv2 préentraîné
    model = YOLOWorld("yolov8s-worldv2.pt")
    
    # Entraîner le modèle sur le jeu de données COCO8 pendant 100 époques
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

    Ou avec la CLI :

    yolo train model=yolov8s-worldv2.pt 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 différents modes de fonctionnement :

    Type de modèlePoids préentraînésTâches prises en chargeEntraînementValidationInférenceExport
    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 jeux de données et lancer l’entraînement à l’aide du code fourni. La procédure d’entraînement consiste à créer un dictionnaire de données et à exécuter 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