YOLO-World Modell
Das YOLO-World-Modell führt einen fortschrittlichen, echtzeitfähigen, auf UltralyticsYOLOv8 basierenden Ansatz für Open-Vocabulary-Detection-Aufgaben ein. Diese Innovation ermöglicht die Erkennung beliebiger Objekte in einem Bild basierend auf beschreibenden Texten. Durch die signifikante Senkung des Rechenaufwands bei gleichzeitiger Beibehaltung einer wettbewerbsfähigen Leistung entwickelt sich YOLO-World zu einem vielseitigen Werkzeug für zahlreiche bildbasierte Anwendungen.
Ansehen: YOLO World Trainings-Workflow auf einem benutzerdefinierten Datensatz

Überblick
YOLO-World begegnet den Herausforderungen traditioneller Open-Vocabulary-Detection-Modelle, die oft auf umständliche Transformer-Modelle angewiesen sind, welche umfangreiche Rechenressourcen benötigen. Die Abhängigkeit dieser Modelle von vordefinierten Objektkategorien schränkt zudem ihren Nutzen in dynamischen Szenarien ein. YOLO-World revitalisiert das YOLOv8-Framework mit Open-Vocabulary-Detection-Funktionen und setzt Vision-Language Modeling sowie Pre-Training auf umfangreichen Datensätzen ein, um eine breite Palette von Objekten in Zero-Shot-Szenarien mit unübertroffener Effizienz zu identifizieren.
Hauptmerkmale
Echtzeitlösung: Durch die Nutzung der Rechengeschwindigkeit von CNNs bietet YOLO-World eine schnelle Open-Vocabulary-Detection-Lösung, die auf Branchen zugeschnitten ist, die sofortige Ergebnisse benötigen.
Effizienz und Leistung: YOLO-World reduziert den Rechen- und Ressourcenbedarf, ohne die Leistung zu beeinträchtigen, und bietet eine robuste Alternative zu Modellen wie SAM, jedoch zu einem Bruchteil der Rechenkosten, was Echtzeitanwendungen ermöglicht.
Inferenz mit Offline-Vokabular: YOLO-World führt eine „Prompt-then-detect“-Strategie ein, die ein Offline-Vokabular verwendet, um die Effizienz weiter zu steigern. Dieser Ansatz ermöglicht die Verwendung von im Voraus berechneten benutzerdefinierten Prompts, einschließlich Bildunterschriften oder Kategorien, die als Offline-Vokabular-Embeddings kodiert und gespeichert werden können, wodurch der Detektionsprozess optimiert wird.
Powered by YOLOv8: Aufbauend auf Ultralytics YOLOv8 nutzt YOLO-World die neuesten Fortschritte in der Echtzeit-Objekterkennung, um Open-Vocabulary-Detection mit beispielloser Genauigkeit und Geschwindigkeit zu ermöglichen.
Benchmark-Exzellenz: YOLO-World übertrifft bestehende Open-Vocabulary-Detektoren, einschließlich der MDETR- und GLIP-Serie, in Bezug auf Geschwindigkeit und Effizienz auf Standard-Benchmarks und demonstriert die überlegene Leistungsfähigkeit von YOLOv8 auf einer einzelnen NVIDIA V100 GPU.
Vielseitige Anwendungen: Der innovative Ansatz von YOLO-World eröffnet neue Möglichkeiten für eine Vielzahl von Bildverarbeitungsaufgaben und bietet 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.
Hinweis
Alle YOLOv8-World-Gewichte wurden direkt aus dem offiziellen YOLO-World Repository migriert, was ihre exzellenten Beiträge hervorhebt.
| Modelltyp | Vortrainierte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Training | Export |
|---|---|---|---|---|---|---|
| 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
Performance
| 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 Ihre Python-Anwendungen integrieren. Ultralytics bietet benutzerfreundliche Python APIs und CLI-Befehle, um die Entwicklung zu optimieren.
Ansehen: YOLO-World Modell-Anwendungsbeispiele mit Ultralytics | Offenes Vokabular, Prompt-frei & weitere 🚀
Trainingsanwendung
Tipp
Wir empfehlen dringend, Folgendes zu verwenden: yolov8-worldv2 Modell für benutzerdefiniertes Training, da es deterministisches Training unterstützt und auch einfach in andere Formate exportiert werden kann, z. B. ONNX/TensorRT.
Objekterkennung ist unkompliziert mit der train Methode, wie unten dargestellt:
Beispiel
PyTorch vorab trainierte *.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")
# 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
Vorhersageanwendung
Objekterkennung ist unkompliziert mit der predict Methode, wie unten dargestellt:
Beispiel
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
Dieses Snippet demonstriert die Einfachheit des Ladens eines vortrainierten Modells und der Ausführung einer Vorhersage auf einem Bild.
Val-Anwendung
Die Modellvalidierung auf einem Datensatz wird wie folgt optimiert:
Beispiel
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
Tracking-Anwendung
Die Objektverfolgung mit dem YOLO-World-Modell auf einem Video/Bildern wird wie folgt vereinfacht:
Beispiel
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"
Hinweis
Die von Ultralytics bereitgestellten YOLO-World-Modelle sind mit COCO-Dataset-Kategorien als Teil ihres Offline-Vokabulars vorkonfiguriert, was die Effizienz für die sofortige Anwendung erhöht. Diese Integration ermöglicht es den YOLOv8-World-Modellen, die 80 im COCO-Dataset definierten Standardkategorien direkt zu erkennen und vorherzusagen, ohne zusätzliche Einrichtung oder Anpassung zu erfordern.
Eingabeaufforderungen festlegen

Das YOLO-World-Framework ermöglicht die dynamische Spezifizierung von Klassen durch benutzerdefinierte Prompts, wodurch Benutzer das Modell an ihre spezifischen Bedürfnisse anpassen können, ohne es neu zu trainieren. Diese Funktion ist besonders nützlich, um das Modell an neue Domänen 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 und so die Relevanz und Genauigkeit der Erkennungsergebnisse verbessern.
Wenn Ihre Anwendung beispielsweise nur die Erkennung von Objekten des Typs 'Person' und 'Bus' erfordert, können Sie diese Klassen direkt angeben:
Beispiel
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()
Hintergrundklasse
Einige Benutzer haben festgestellt, dass das Anhängen einer leeren Zeichenfolge "" als Hintergrundklasse kann die Erkennungsleistung in bestimmten Szenarien verbessern. Dieses Verhalten scheint szenarioabhängig zu sein, und der genaue Mechanismus ist noch nicht vollständig verstanden:
model.set_classes(["person", "bus", ""])
Sie können ein Modell auch nach dem Festlegen benutzerdefinierter Klassen speichern. Auf diese Weise erstellen Sie eine Version des YOLO, die speziell auf Ihren Anwendungsfall zugeschnitten ist. Bei diesem Vorgang werden Ihre benutzerdefinierten Klassendefinitionen direkt in die Modelldatei eingebettet, sodass das Modell ohne weitere Anpassungen mit Ihren angegebenen Klassen verwendet werden kann. Befolgen Sie diese Schritte, um Ihr benutzerdefiniertes YOLO zu speichern und zu laden:
Beispiel
Laden Sie zuerst ein YOLO-World-Modell, legen Sie benutzerdefinierte Klassen dafür fest und speichern Sie 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 custom_yolov8s.pt-Modell wie jedes andere vortrainierte YOLOv8-Modell, jedoch mit einem entscheidenden Unterschied: Es ist nun optimiert, um nur die von Ihnen definierten Klassen zu detect. Diese Anpassung kann die detect-Leistung und Effizienz für Ihre 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 Erkennungsprozess, indem es sich auf relevante Objekte konzentriert, den Rechenaufwand reduziert und die Inferenz beschleunigt.
- Flexibilität: Ermöglicht die einfache Anpassung des Modells an neue oder Nischen-Erkennungsaufgaben, ohne dass ein umfangreiches erneutes Training oder eine Datenerfassung erforderlich ist.
- Einfachheit: Vereinfacht die Bereitstellung, da benutzerdefinierte Klassen nicht wiederholt zur Laufzeit angegeben werden müssen, wodurch das Modell mit seinem eingebetteten Vokabular direkt verwendbar ist.
- Leistung: Verbessert die Erkennungsgenauigkeit für bestimmte 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 bestimmte Aufgaben anzupassen, wodurch fortschrittliche KI zugänglicher und auf ein breiteres Spektrum praktischer Anwendungen anwendbar wird.
Offizielle Ergebnisse von Grund auf reproduzieren (Experimentell)
Datensätze vorbereiten
- Trainingsdaten
| Datensatz | Typ | Stichproben | Boxen | Anmerkungsdateien |
|---|---|---|---|---|
| Objects365v1 | Erkennung | 609k | 9621k | objects365_train.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json |
- Val-Daten
| Datensatz | Typ | Anmerkungsdateien |
|---|---|---|
| LVIS minival | Erkennung | minival.txt |
Training von Grund auf starten
Hinweis
WorldTrainerFromScratch ist hochgradig angepasst, um das gleichzeitige Trainieren von YOLO-World-Modellen sowohl auf Erkennungs- als auch auf Grounding-Datensätzen zu ermöglichen. Weitere Details finden Sie unter ultralytics.model.yolo.world.train_world.py.
Beispiel
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)
Zitate und Danksagungen
Wir bedanken uns beim Tencent AILab Computer Vision Center für seine Pionierarbeit im Bereich der Echtzeit-Objekterkennung mit offenem Vokabular 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 weitere Informationen ist das Original-Paper zu YOLO-World auf arXiv verfügbar. Der Quellcode des Projekts und zusätzliche Ressourcen sind über das GitHub-Repository zugänglich. Wir schätzen ihr Engagement für die Weiterentwicklung des Feldes und die Weitergabe ihrer wertvollen Erkenntnisse an die Community.
FAQ
Was ist das YOLO-World-Modell und wie funktioniert es?
Das YOLO-World-Modell ist ein fortschrittlicher Ansatz zur Echtzeit-Objekterkennung, der auf dem Ultralytics YOLOv8-Framework basiert. Es zeichnet sich bei Open-Vocabulary-Detection-Aufgaben aus, indem es Objekte innerhalb eines Bildes anhand von beschreibenden Texten identifiziert. Durch die Verwendung von Vision-Language-Modellierung und Pre-Training auf großen Datensätzen erreicht YOLO-World eine hohe Effizienz und Leistung bei deutlich reduziertem Rechenaufwand, was es ideal für Echtzeit-Anwendungen in verschiedenen Branchen macht.
Wie verarbeitet YOLO-World Inferenz mit benutzerdefinierten Prompts?
YOLO-World unterstützt eine „Prompt-then-detect“-Strategie, die ein Offline-Vokabular zur Effizienzsteigerung nutzt. Benutzerdefinierte Prompts wie Bildunterschriften oder spezifische Objektkategorien werden vorkodiert und als Offline-Vokabular- Embeddings gespeichert. Dieser Ansatz optimiert den Detektionsprozess, ohne dass ein erneutes Training erforderlich ist. Sie können diese Prompts dynamisch im Modell festlegen, um es an spezifische Detektionsaufgaben anzupassen, wie unten gezeigt:
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 YOLO-World gegenüber traditionellen Open-Vocabulary-Erkennungsmodellen wählen?
YOLO-World bietet mehrere Vorteile gegenüber traditionellen Open-Vocabulary-Detection-Modellen:
- Echtzeit-Performance: Es nutzt die Rechengeschwindigkeit von CNNs, um eine schnelle und effiziente Erkennung zu ermöglichen.
- Effizienz und geringer Ressourcenbedarf: YOLO-World bietet weiterhin eine hohe Leistung bei gleichzeitiger deutlicher Reduzierung des Rechen- und Ressourcenbedarfs.
- Anpassbare Prompts: Das Modell unterstützt die dynamische Prompt-Einstellung, wodurch Benutzer benutzerdefinierte Erkennungsklassen ohne erneutes Training festlegen können.
- Benchmark-Exzellenz: Es übertrifft andere Open-Vocabulary-Detektoren wie MDETR und GLIP in Bezug auf Geschwindigkeit und Effizienz bei Standard-Benchmarks.
Wie trainiere ich ein YOLO-World-Modell auf meinem Datensatz?
Das Trainieren eines YOLO-World-Modells auf Ihrem Datensatz ist unkompliziert über die bereitgestellte Python-API oder CLI-Befehle. Hier erfahren Sie, wie Sie das Training mit Python starten:
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 der CLI:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640
Welche vortrainierten YOLO-World-Modelle sind verfügbar und welche Aufgaben werden von ihnen unterstützt?
Ultralytics bietet mehrere vortrainierte YOLO-World Modelle, die verschiedene Aufgaben und Betriebsmodi unterstützen:
| Modelltyp | Vortrainierte Gewichte | Unterstützte Aufgaben | Inferenz | Validierung | Training | Export |
|---|---|---|---|---|---|---|
| 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, müssen Sie die Datensätze vorbereiten und das Training mit dem bereitgestellten Code starten. Das Trainingsverfahren umfasst das Erstellen eines Datenwö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)