YOLO-World Modell
Das YOLO-World Modell führt einen fortschrittlichen, echtzeitfähigen, auf Ultralytics YOLOv8 basierenden Ansatz für Open-Vocabulary-Detection-Aufgaben ein. Diese Innovation ermöglicht die Erkennung beliebiger Objekte in einem Bild auf der Grundlage beschreibender Texte. Durch die deutliche Senkung des Rechenaufwands bei gleichzeitiger Wahrung wettbewerbsfähiger Leistung erweist sich YOLO-World als vielseitiges Werkzeug für zahlreiche sichtbasierte Anwendungen.
Watch: YOLO World training workflow on custom dataset

Übersicht
YOLO-World bewältigt die Herausforderungen herkömmlicher Open-Vocabulary-Detektionsmodelle, die oft auf schwerfälligen Transformer-Modellen basieren, welche enorme Rechenressourcen erfordern. Die Abhängigkeit dieser Modelle von vordefinierten Objektkategorien schränkt zudem ihren Nutzen in dynamischen Szenarien ein. YOLO-World belebt das YOLOv8-Framework mit Open-Vocabulary-Detektionsfähigkeiten neu, indem es Vision-Sprachmodellierung und Vortraining auf umfangreichen Datensätzen nutzt, um eine breite Palette von Objekten in Zero-Shot-Szenarien mit unübertroffener Effizienz zu identifizieren.
Hauptmerkmale
-
Echtzeit-Lösung: Durch die Nutzung der Rechengeschwindigkeit von CNNs liefert YOLO-World eine schnelle Open-Vocabulary-Detektionslösung, die Branchen bedient, die sofortige Ergebnisse benötigen.
-
Effizienz und Leistung: YOLO-World senkt den Rechen- und Ressourcenbedarf drastisch, ohne die Leistung zu beeinträchtigen. Es bietet eine robuste Alternative zu Modellen wie SAM, jedoch bei einem Bruchteil der Rechenkosten, was Echtzeitanwendungen ermöglicht.
-
Inferenz mit Offline-Vokabular: YOLO-World führt eine „Prompt-dann-Detektieren“-Strategie ein, bei der ein Offline-Vokabular verwendet wird, um die Effizienz weiter zu steigern. Dieser Ansatz ermöglicht die Verwendung benutzerdefinierter Prompts, die im Voraus berechnet werden – einschließlich Bildunterschriften oder Kategorien –, um diese zu kodieren und als Offline-Vokabular-Einbettungen zu speichern, was den Detektionsprozess rationalisiert.
-
Angetrieben von YOLOv8: Aufgebaut auf Ultralytics YOLOv8, nutzt YOLO-World die neuesten Fortschritte bei der Echtzeit-Objekterkennung, um eine Open-Vocabulary-Detektion mit beispielloser Genauigkeit und Geschwindigkeit zu ermöglichen.
-
Exzellente Benchmarks: YOLO-World übertrifft bestehende Open-Vocabulary-Detektoren, einschließlich der MDETR- und GLIP-Serien, hinsichtlich Geschwindigkeit und Effizienz bei Standard-Benchmarks und demonstriert die überlegene Leistungsfähigkeit von YOLOv8 auf einer einzigen NVIDIA V100 GPU.
-
Vielseitige Anwendungen: Der innovative Ansatz von YOLO-World eröffnet neue Möglichkeiten für eine Vielzahl von Bildverarbeitungsaufgaben und liefert Geschwindigkeitsverbesserungen um Größenordnungen gegenüber bestehenden Methoden.
Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi
Dieser Abschnitt beschreibt die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, die von ihnen unterstützten Aufgaben und ihre Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export, gekennzeichnet durch ✅ für unterstützte Modi und ❌ für nicht unterstützte Modi.
Alle YOLOv8-World-Gewichte wurden direkt aus dem offiziellen YOLO-World Repository migriert, was ihre hervorragenden Beiträge unterstreicht.
| Modelltyp | Vortrainierte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Training | Exportieren |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Objekterkennung | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Objekterkennung | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Objekterkennung | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Objekterkennung | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Objekterkennung | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Objekterkennung | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Objekterkennung | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Objekterkennung | ✅ | ✅ | ✅ | ✅ |
Zero-Shot-Transfer auf dem COCO-Datensatz
| Modelltyp | 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 |
Anwendungsbeispiele
Die YOLO-World-Modelle lassen sich einfach in deine Python-Anwendungen integrieren. Ultralytics bietet eine benutzerfreundliche Python API und CLI-Befehle, um die Entwicklung zu rationalisieren.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Trainingsnutzung
Wir empfehlen dringend, das Modell yolov8-worldv2 für benutzerdefiniertes Training zu verwenden, da es deterministisches Training unterstützt und auch einfach in andere Formate, z. B. onnx/tensorrt, exportiert werden kann.
Objekterkennung ist mit der train-Methode unkompliziert, wie unten dargestellt:
PyTorch vortrainierte *.pt-Modelle sowie Konfigurations-*.yaml-Dateien können an die YOLOWorld()-Klasse übergeben werden, um eine Modellinstanz in Python zu erstellen:
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")Vorhersage-Nutzung
Objekterkennung ist mit der predict-Methode unkompliziert, wie unten dargestellt:
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()Dieser Schnipsel demonstriert die Einfachheit des Ladens eines vortrainierten Modells und des Ausführens einer Vorhersage auf einem Bild.
Validierungs-Nutzung
Die Modellvalidierung auf einem Datensatz wird wie folgt optimiert:
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")Tracking-Nutzung
Objektverfolgung mit dem YOLO-World-Modell auf einem Video/Bildern wird wie folgt optimiert:
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")Die von Ultralytics bereitgestellten YOLO-World-Modelle sind bereits mit den Kategorien des COCO-Datensatzes als Teil ihres Offline-Vokabulars vorkonfiguriert, was die Effizienz für den sofortigen Einsatz erhöht. Diese Integration ermöglicht es den YOLOv8-World-Modellen, die 80 Standardkategorien des COCO-Datensatzes direkt zu erkennen und vorherzusagen, ohne dass zusätzliche Einrichtung oder Anpassungen erforderlich sind.
Prompts festlegen

Das YOLO-World-Framework ermöglicht die dynamische Spezifikation von Klassen durch benutzerdefinierte Prompts und befähigt Benutzer, das Modell ohne Nachtraining an ihre spezifischen Bedürfnisse anzupassen. Diese Funktion ist besonders nützlich, um das Modell an neue Bereiche oder spezifische Aufgaben anzupassen, die ursprünglich nicht Teil der Trainingsdaten waren. Durch das Festlegen benutzerdefinierter Prompts können Benutzer den Fokus des Modells im Wesentlichen auf Objekte von Interesse lenken, was die Relevanz und Genauigkeit der Erkennungsergebnisse verbessert.
Wenn deine Anwendung beispielsweise nur die Erkennung von 'Person' und 'Bus' erfordert, kannst du diese Klassen direkt angeben:
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()Einige Benutzer haben festgestellt, dass das Anhängen eines leeren Strings "" als Hintergrundklasse die Detektionsleistung in bestimmten Szenarien verbessern kann. Dieses Verhalten scheint szenarioabhängig zu sein, und der genaue Mechanismus ist nicht vollständig verstanden:
model.set_classes(["person", "bus", ""])Du kannst ein Modell auch speichern, nachdem du benutzerdefinierte Klassen festgelegt hast. Dadurch erstellst du eine Version des YOLO-World-Modells, die auf deinen spezifischen Anwendungsfall spezialisiert ist. Dieser Prozess bettet deine benutzerdefinierten Klassendefinitionen direkt in die Modelldatei ein, wodurch das Modell sofort einsatzbereit mit deinen spezifizierten Klassen ist, ohne dass weitere Anpassungen erforderlich sind. Befolge diese Schritte, um dein benutzerdefiniertes YOLO-World-Modell zu speichern und zu laden:
Lade zuerst ein YOLO-World-Modell, lege benutzerdefinierte Klassen dafür fest und speichere es:
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")Nach dem Speichern verhält sich das benutzerdefinierte _yolov8s.pt-Modell wie jedes andere vortrainierte YOLOv8-Modell, jedoch mit einem entscheidenden Unterschied: Es ist jetzt darauf optimiert, nur die von dir definierten Klassen zu erkennen. Diese Anpassung kann die Erkennungsleistung und Effizienz für deine spezifischen Anwendungsszenarien erheblich verbessern.
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()Vorteile des Speicherns mit benutzerdefiniertem Vokabular
- Effizienz: Optimiert den Detektionsprozess, indem der Fokus auf relevante Objekte gelegt wird, was den Rechenaufwand reduziert und die Inferenz beschleunigt.
- Flexibilität: Ermöglicht eine einfache Anpassung des Modells an neue oder spezielle Erkennungsaufgaben, ohne dass umfangreiches Nachtraining oder Datensammlung erforderlich sind.
- Einfachheit: Vereinfacht die Bereitstellung, da benutzerdefinierte Klassen nicht wiederholt zur Laufzeit angegeben werden müssen, was das Modell direkt mit seinem eingebetteten Vokabular nutzbar macht.
- Leistung: Verbessert die Detektionsgenauigkeit für spezifizierte Klassen, indem die Aufmerksamkeit und die Ressourcen des Modells auf die Erkennung der definierten Objekte konzentriert werden.
Dieser Ansatz bietet eine leistungsstarke Möglichkeit, modernste Objekterkennungsmodelle für spezifische Aufgaben anzupassen, wodurch fortschrittliche KI zugänglicher und für eine breitere Palette praktischer Anwendungen nutzbar wird.
Reproduktion der offiziellen Ergebnisse von Grund auf (Experimentell)
Datensätze vorbereiten
- Trainingsdaten
| Datensatz | Typ | Beispiele | Boxes | Annotierungsdateien |
|---|---|---|---|---|
| Objects365v1 | Detektion | 609k | 9621k | objects365_train.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json |
- Validierungsdaten
| Datensatz | Typ | Annotierungsdateien |
|---|---|---|
| LVIS minival | Detektion | minival.txt |
Training von Grund auf starten
WorldTrainerFromScratch ist speziell angepasst, um das Training von YOLO-World-Modellen sowohl auf Erkennungs- als auch auf Grounding-Datensätzen gleichzeitig zu ermöglichen. Weitere Details findest du in ultralytics.model.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
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"]),
)
# 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,
)Zitate und Danksagungen
Wir danken dem Tencent AILab Computer Vision Center für ihre Pionierarbeit bei der Open-Vocabulary-Objekterkennung in Echtzeit mit 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}
}Für weiterführende Informationen ist das originale YOLO-World-Paper auf arXiv verfügbar. Der Quellcode des Projekts sowie zusätzliche Ressourcen sind über das GitHub-Repository abrufbar. Wir schätzen ihren Einsatz für den Fortschritt auf diesem Gebiet und das Teilen ihrer wertvollen Erkenntnisse mit der Community.
FAQ
Was ist das YOLO-World-Modell und wie funktioniert es?
Das YOLO-World-Modell ist ein fortschrittlicher Echtzeit-Objekterkennungsansatz, der auf dem Ultralytics YOLOv8-Framework basiert. Es überzeugt bei Open-Vocabulary-Erkennungsaufgaben, indem es Objekte innerhalb eines Bildes anhand von beschreibenden Texten identifiziert. Durch den Einsatz von Vision-Language-Modellierung und Pre-Training auf großen Datensätzen erreicht YOLO-World eine hohe Effizienz und Leistung bei deutlich reduzierten Rechenanforderungen, was es ideal für Echtzeitanwendungen in verschiedenen Branchen macht.
Wie handhabt YOLO-World die Inferenz mit benutzerdefinierten Prompts?
YOLO-World unterstützt eine "Prompt-then-Detect"-Strategie, die ein Offline-Vokabular nutzt, um die Effizienz zu steigern. Benutzerdefinierte Prompts wie Bildunterschriften oder spezifische Objektkategorien werden vorab kodiert und als Offline-Vokabular-Embeddings gespeichert. Dieser Ansatz optimiert den Erkennungsprozess, ohne dass ein erneutes Training erforderlich ist. Du kannst diese Prompts dynamisch innerhalb des Modells setzen, um es auf spezifische Erkennungsaufgaben zuzuschneiden, wie unten dargestellt:
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()Warum sollte ich mich für YOLO-World gegenüber herkömmlichen Open-Vocabulary-Erkennungsmodellen entscheiden?
YOLO-World bietet mehrere Vorteile gegenüber traditionellen Open-Vocabulary-Erkennungsmodellen:
- Echtzeit-Leistung: Es nutzt die Rechengeschwindigkeit von CNNs, um eine schnelle und effiziente Erkennung zu bieten.
- Effizienz und geringe Ressourcenanforderungen: YOLO-World behält eine hohe Leistung bei, während es den Rechen- und Ressourcenbedarf signifikant senkt.
- Anpassbare Prompts: Das Modell unterstützt die dynamische Einstellung von Prompts, was Benutzern ermöglicht, benutzerdefinierte Erkennungsklassen ohne erneutes Training festzulegen.
- Benchmark-Exzellenz: Es übertrifft andere Open-Vocabulary-Detektoren wie MDETR und GLIP in Geschwindigkeit und Effizienz bei Standard-Benchmarks.
Wie trainiere ich ein YOLO-World-Modell auf meinem eigenen Datensatz?
Das Training eines YOLO-World-Modells auf deinem Datensatz ist über die bereitgestellte Python API oder CLI-Befehle unkompliziert. So startest du das Training mit 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)Oder mit CLI:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640Welche vortrainierten YOLO-World-Modelle gibt es und welche Aufgaben unterstützen sie?
Ultralytics bietet mehrere vortrainierte YOLO-World-Modelle an, die verschiedene Aufgaben und Betriebsmodi unterstützen:
| Modelltyp | Vortrainierte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Training | Exportieren |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Objekterkennung | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Objekterkennung | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Objekterkennung | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Objekterkennung | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Objekterkennung | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Objekterkennung | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Objekterkennung | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Objekterkennung | ✅ | ✅ | ✅ | ✅ |
Wie kann ich die offiziellen Ergebnisse von YOLO-World von Grund auf reproduzieren?
Um die offiziellen Ergebnisse von Grund auf zu reproduzieren, musst du die Datensätze vorbereiten und das Training mit dem bereitgestellten Code starten. Das Trainingsverfahren umfasst das Erstellen eines Daten-Wörterbuchs und das Ausführen der train-Methode mit einem benutzerdefinierten Trainer:
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)