Modèle YOLO-World
Le modèle YOLO-World introduit une approche avancée et en temps réel basée sur Ultralytics YOLOv8 pour les tâches de détection à vocabulaire ouvert. Cette innovation permet la détection de tout objet dans une image basée sur des 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.
Regarder : Flux de travail d'entraînement YOLO World sur un jeu de données personnalisé
Aperçu
YOLO-World s'attaque aux défis posés par les modèles de détection de vocabulaire ouvert traditionnels, qui reposent souvent sur des modèles Transformer complexes nécessitant d'importantes ressources de calcul. La dépendance de ces modèles à l'égard de catégories d'objets prédéfinies limite également leur utilité dans des scénarios dynamiques. YOLO-World revitalise le framework YOLOv8 avec des capacités de détection de vocabulaire ouvert, en utilisant la modélisation vision-langage et le pré-entraînement sur des ensembles de données expansifs pour exceller dans l'identification d'un large éventail d'objets dans des scénarios zéro-shot avec une efficacité inégalée.
Principales caractéristiques
-
Solution en temps réel : En exploitant la vitesse de calcul des CNN, YOLO-World offre une solution de détection de vocabulaire ouvert rapide, répondant aux besoins des industries qui ont besoin de résultats immédiats.
-
Efficacité et performance : YOLO-World réduit considérablement les besoins en calcul et en ressources sans sacrifier les performances, offrant une alternative robuste aux modèles comme SAM, mais à une fraction du coût de calcul, ce qui permet des applications en temps réel.
-
Inférence avec vocabulaire hors ligne : YOLO-World introduit une stratégie "invite-puis-détecte", employant un vocabulaire hors ligne pour améliorer encore l'efficacité. Cette approche permet d'utiliser des invites personnalisées calculées a priori, y compris des légendes ou des catégories, à encoder et à stocker sous forme d'intégrations de vocabulaire hors ligne, rationalisant ainsi le processus de détection.
-
Propulsé par YOLOv8 : Basé 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 inégalées.
-
Excellence en matière de benchmarking : YOLO-World surpasse les détecteurs de vocabulaire ouvert existants, y compris les séries MDETR et GLIP, en termes de vitesse et d'efficacité sur les benchmarks standard, mettant en évidence la capacité supérieure de YOLOv8 sur un seul GPU NVIDIA V100.
-
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 référentiel officiel YOLO-World, soulignant ainsi leurs excellentes contributions.
Type de modèle | Poids pré-entraînés | Tâches prises en charge | Inférence | Validation | Entraînement | Exporter |
---|---|---|---|---|---|---|
YOLOv8s-world | yolov8s-world.pt | Détection d'objets | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | Détection d'objets | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | Détection d'objets | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | Détection d'objets | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
Transfert Zero-shot sur l'ensemble de données COCO
Performance
Type de modèle | 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 |
Exemples d'utilisation
Les modèles YOLO-World sont faciles à intégrer dans vos applications python. Ultralytics fournit une API python et des commandes CLI conviviales pour rationaliser le développement.
Utilisation de l'entraînement
Astuce
Nous vous recommandons fortement d'utiliser yolov8-worldv2
modèle pour l'entraînement personnalisé, car il prend en charge l'entraînement déterministe et est également facile à exporter vers d'autres formats, par exemple ONNX/TensorRT.
Détection d'objets est simple avec le train
méthode, comme illustré ci-dessous :
Exemple
PyTorch pré-entraînés *.pt
ainsi que la configuration des modèles *.yaml
fichiers peuvent être passés aux YOLOWorld()
class 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 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
Utilisation de la prédiction
La détection d'objets est simple avec le predict
méthode, 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()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640
Cet extrait illustre la simplicité du chargement d'un modèle pré-entraîné et de l'exécution d'une prédiction sur une image.
Utilisation de Val
La validation du modèle sur un ensemble 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")
# 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
Suivi de l'utilisation
Le suivi d'objets avec le modèle YOLO-World sur une vidéo/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")
# 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"
Remarque
Les modèles YOLO-World fournis par Ultralytics sont préconfigurés avec les catégories de l'ensemble de données COCO dans le cadre de leur vocabulaire hors ligne, ce qui améliore 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 l'ensemble de données COCO sans nécessiter de configuration ou de personnalisation supplémentaire.
Définir les invites
Le framework YOLO-World permet la spécification dynamique des classes via des invites personnalisées, permettant 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 partie des données d'entraînement à l'origine. En définissant des invites personnalisées, les utilisateurs peuvent 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 votre application nécessite uniquement la détection des objets 'personne' et 'bus', vous pouvez 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()
Vous pouvez également enregistrer un modèle après avoir défini des classes personnalisées. Ce faisant, vous créez une version du modèle YOLO-World spécialisée pour votre cas d'utilisation spécifique. Ce processus intègre vos définitions de classes personnalisées directement dans le fichier du modèle, ce qui le rend prêt à être utilisé avec vos classes spécifiées sans ajustements supplémentaires. Suivez ces étapes pour enregistrer et charger votre modèle YOLOv8 personnalisé :
Exemple
Chargez d'abord un modèle YOLO-World, définissez des classes personnalisées pour celui-ci et enregistrez-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 tout autre modèle YOLOv8 pré-entraîné, mais avec une différence essentielle : il est désormais optimisé pour détecter uniquement les classes que vous avez définies. Cette personnalisation peut améliorer considérablement les performances et l'efficacité de la détection pour vos 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, en réduisant la surcharge de calcul et en accélérant l'inférence.
- Flexibilité : Permet une adaptation facile du modèle à de nouvelles tâches de détection ou à des tâches de niche sans nécessiter un réentraînement ou une collecte de données importants.
- 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 les 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
Ensemble de données | Type | Échantillons | Boîtes | Fichiers d'annotations |
---|---|---|---|---|
Objects365v1 | Détection | 609k | 9621k | objects365_train.json |
GQA | Ancrage sémantique | 621k | 3681k | final_mixed_train_no_coco.json |
Flickr30k | Ancrage sémantique | 149k | 641k | final_flickr_separateGT_train.json |
- Données Val
Ensemble de données | Type | Fichiers d'annotations |
---|---|---|
LVIS minival | Détection | minival.txt |
Lancer l'entraînement à partir de zéro
Remarque
WorldTrainerFromScratch
est hautement personnalisé pour permettre la formation de modèles yolo-world sur des ensembles de données de détection et des ensembles de données de mise à la terre simultanément. Plus de détails, veuillez consulter ultralytics.model.yolo.world.train_world.py.
Exemple
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)
Citations et remerciements
Nous remercions le Tencent AILab Computer Vision Center pour son travail de pionnier dans le domaine de la détection d'objets en temps réel à vocabulaire ouvert avec 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}
}
Pour en savoir plus, le document original de 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écieuses connaissances avec la communauté.
FAQ
Qu'est-ce que le modèle YOLO-World et comment fonctionne-t-il ?
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 dans une image à partir de textes descriptifs. Utilisant la modélisation vision-langage et le pré-entraînement sur de grands ensembles de données, 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 divers secteurs.
Comment YOLO-World gère-t-il l'inférence avec des invites personnalisées ?
YOLO-World prend en charge une stratégie de « prompt-then-detect », qui utilise un vocabulaire hors ligne pour améliorer l'efficacité. Les invites personnalisées telles que les légendes ou les catégories d'objets spécifiques sont pré-encodées et stockées en tant qu'intégrations de vocabulaire hors ligne. Cette approche rationalise le processus de détection sans nécessiter de réentraînement. Vous pouvez définir dynamiquement ces invites dans le modèle pour l'adapter à des tâches de détection spécifiques, comme indiqué 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()
Pourquoi devrais-je choisir YOLO-World plutôt que les modèles traditionnels de détection Open-Vocabulary ?
YOLO-World offre plusieurs avantages par rapport aux modèles de détection de vocabulaire ouvert traditionnels :
- Performance en temps réel : Il exploite la vitesse de calcul des CNN pour offrir une détection rapide et efficace.
- Efficacité et faible besoin en ressources : YOLO-World maintient des performances élevées tout en réduisant considérablement les demandes de calcul et de ressources.
- Invites personnalisables : Le modèle prend en charge le réglage dynamique des invites, ce qui permet aux utilisateurs de spécifier des classes de détection personnalisées sans réentraînement.
- Excellence en matière de benchmarking : Il surpasse les autres détecteurs de vocabulaire ouvert tels que MDETR et GLIP en termes de vitesse et d'efficacité sur les benchmarks standard.
Comment entraîner un modèle YOLO-World sur mon ensemble de données ?
L'entraînement d'un modèle YOLO-World sur votre jeu de données est simple grâce à l'API Python ou aux commandes CLI fournies. Voici comment démarrer 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
Quels sont les modèles YOLO-World pré-entraînés disponibles et leurs tâches prises en charge ?
Ultralytics propose plusieurs modèles YOLO-World pré-entraînés prenant en charge diverses tâches et modes de fonctionnement :
Type de modèle | Poids pré-entraînés | Tâches prises en charge | Inférence | Validation | Entraînement | Exporter |
---|---|---|---|---|---|---|
YOLOv8s-world | yolov8s-world.pt | Détection d'objets | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | Détection d'objets | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | Détection d'objets | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | Détection d'objets | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | Détection d'objets | ✅ | ✅ | ✅ | ✅ |
Comment reproduire les résultats officiels de YOLO-World à partir de zéro ?
Pour reproduire les résultats officiels à partir de zéro, vous devez préparer les ensembles de données et lancer l’entraînement à l’aide du code fourni. La procédure d’entraînement implique la création d’un dictionnaire de données et l’exécution de la train
méthode 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)