Ultralytics YOLO27:
Get Started

YOLO-World-Modell#

Das YOLO-World-Modell stellt einen fortschrittlichen Echtzeitansatz auf Basis von Ultralytics YOLOv8 für Aufgaben der Erkennung mit offenem Vokabular vor. Diese Innovation ermöglicht die Erkennung beliebiger Objekte in einem Bild anhand beschreibender Texte. Da der Rechenaufwand deutlich gesenkt wird, während die Wettbewerbsfähigkeit erhalten bleibt, ist YOLO-World ein vielseitiges Werkzeug für zahlreiche bildverarbeitungsbasierte Anwendungen.



Ansehen: YOLO-World-Trainingsablauf mit eigenem Datensatz

Übersicht der YOLO-World-Modellarchitektur

Übersicht#

YOLO-World begegnet den Herausforderungen herkömmlicher Modelle zur Erkennung mit offenem Vokabular, die häufig auf aufwendige Transformer-Modelle mit hohem Rechenbedarf angewiesen sind. Die Abhängigkeit dieser Modelle von vordefinierten Objektkategorien schränkt ihren Nutzen in dynamischen Szenarien ebenfalls ein. YOLO-World erweitert das YOLOv8-Framework um Funktionen zur Erkennung mit offenem Vokabular und nutzt dafür die Bild-Sprachmodellierung sowie das Vortraining auf umfangreichen Datensätzen. So kann es in Zero-Shot-Szenarien mit unübertroffener Effizienz eine große Bandbreite von Objekten erkennen.

Für Aufgaben mit offenem Vokabular, bei denen auch Instanzmasken, visuelle Prompts oder ein Modus ohne Prompts benötigt werden, findest du unter YOLOE eine Lösung mit derselben set_classes()-API.

Wichtige Funktionen#

  1. Echtzeitlösung: YOLO-World nutzt die Rechengeschwindigkeit von CNNs und bietet eine schnelle Erkennung mit offenem Vokabular für Branchen, die unmittelbare Ergebnisse benötigen.

  2. Effizienz und Leistung: YOLO-World verringert den Rechen- und Ressourcenbedarf, ohne Abstriche bei der Leistung zu machen. Es bietet eine leistungsfähige Alternative zu Modellen wie SAM, benötigt aber nur einen Bruchteil der Rechenleistung und ermöglicht so Echtzeitanwendungen.

  3. Inferenz mit Offline-Vokabular: YOLO-World führt eine Strategie nach dem Prinzip „Prompt, dann Erkennung“ ein, bei der ein Offline-Vokabular die Effizienz weiter steigert. Mit diesem Ansatz lassen sich zuvor berechnete benutzerdefinierte Prompts, darunter Bildbeschreibungen oder Kategorien, als Einbettungen des Offline-Vokabulars kodieren und speichern, wodurch der Erkennungsprozess optimiert wird.

  4. Auf YOLOv8 aufgebaut: YOLO-World basiert auf Ultralytics YOLOv8 und nutzt die neuesten Fortschritte bei der Echtzeit-Objekterkennung, um die Erkennung mit offenem Vokabular mit beispielloser Genauigkeit und Geschwindigkeit zu ermöglichen.

  5. Hervorragende Benchmark-Ergebnisse: YOLO-World übertrifft bestehende Detektoren mit offenem Vokabular, darunter MDETR und die GLIP-Reihe, bei Geschwindigkeit und Effizienz in Standard-Benchmarks. Das demonstriert die überlegene Leistungsfähigkeit von YOLOv8 auf einer einzelnen NVIDIA V100-GPU.

  6. Vielseitige Anwendungen: Der innovative Ansatz von YOLO-World eröffnet neue Möglichkeiten für zahlreiche Bildverarbeitungsaufgaben und sorgt im Vergleich zu bestehenden Methoden für eine um Größenordnungen höhere Geschwindigkeit.

Verfügbare Modelle, unterstützte Aufgaben und Betriebsmodi#

In diesem Abschnitt werden die verfügbaren Modelle und ihre jeweiligen vortrainierten Gewichte, die unterstützten Aufgaben und ihre Kompatibilität mit verschiedenen Betriebsmodi wie Inferenz, Validierung, Training und Export beschrieben. Unterstützte Modi sind mit ✅ und nicht unterstützte Modi mit ❌ gekennzeichnet.

Hinweis

Alle YOLOv8-World-Gewichte wurden direkt aus dem offiziellen YOLO-World-Repository übernommen, was dessen hervorragende Beiträge hervorhebt.

ModelltypVortrainierte GewichteUnterstützte AufgabenTrainingValidierungInferenzExportieren
YOLOv8s-worldyolov8s-world.ptObjekterkennung✅✅✅❌
YOLOv8s-worldv2yolov8s-worldv2.ptObjekterkennung✅✅✅✅
YOLOv8m-worldyolov8m-world.ptObjekterkennung✅✅✅❌
YOLOv8m-worldv2yolov8m-worldv2.ptObjekterkennung✅✅✅✅
YOLOv8l-worldyolov8l-world.ptObjekterkennung✅✅✅❌
YOLOv8l-worldv2yolov8l-worldv2.ptObjekterkennung✅✅✅✅
YOLOv8x-worldyolov8x-world.ptObjekterkennung✅✅✅❌
YOLOv8x-worldv2yolov8x-worldv2.ptObjekterkennung✅✅✅✅

Zero-Shot-Transfer auf dem COCO-Datensatz#

Leistung
ModelltypmAPmAP50mAP75
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

Anwendungsbeispiele#

Die YOLO-World-Modelle lassen sich leicht in deine Python-Anwendungen integrieren. Ultralytics stellt eine benutzerfreundliche Python-API und CLI-Befehle bereit, um die Entwicklung zu vereinfachen.



Ansehen: Beispiele zur Verwendung des YOLO-World-Modells mit Ultralytics | Offenes Vokabular, ohne Vorgaben und mehr 🚀

Training verwenden#

Tipp

Wir empfehlen dringend, für benutzerdefiniertes Training yolov8-worldv2 zu verwenden, da es deterministisches Training unterstützt und den Export in Formate wie ONNX und TensorRT erleichtert.

Die Objekterkennung ist mit der Methode train unkompliziert, wie unten gezeigt:

Beispiel

Vortrainierte PyTorch-Modelle *.pt sowie Konfigurationsdateien *.yaml kannst du an die Klasse YOLOWorld() übergeben, um eine Modellinstanz in Python zu erstellen:

from ultralytics import YOLOWorld

# Ein vortrainiertes YOLOv8s-worldv2-Modell laden
model = YOLOWorld("yolov8s-worldv2.pt")

# Das Modell 100 Epochen lang mit dem COCO8-Beispieldatensatz trainieren
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Mit dem YOLO-World-Modell eine Inferenz auf dem Bild „bus.jpg“ ausführen
results = model("path/to/bus.jpg")

Verwendung für Vorhersagen#

Die Objekterkennung ist mit der Methode predict unkompliziert, wie unten gezeigt:

Beispiel
from ultralytics import YOLOWorld

# Ein YOLO-World-Modell initialisieren
model = YOLOWorld("yolov8s-world.pt")  # oder yolov8m/l-world.pt für andere Größen auswählen

# Mit dem YOLOv8s-world-Modell eine Inferenz für das angegebene Bild ausführen
results = model.predict("path/to/image.jpg")

# Ergebnisse anzeigen
results[0].show()

Dieses Codebeispiel zeigt, wie einfach es ist, ein vortrainiertes Modell zu laden und eine Vorhersage für ein Bild auszuführen.

Verwendung zur Validierung#

Die Modellvalidierung auf einem Datensatz lässt sich wie folgt vereinfachen:

Beispiel
from ultralytics import YOLO

# Ein YOLO-World-Modell erstellen
model = YOLO("yolov8s-world.pt")  # oder yolov8m/l-world.pt für andere Größen auswählen

# Die Modellvalidierung auf dem COCO8-Beispieldatensatz durchführen
metrics = model.val(data="coco8.yaml")

Tracking-Nutzung#

Objektverfolgung mit dem YOLO-World-Modell in einem Video oder mit Bildern lässt sich wie folgt vereinfachen:

Beispiel
from ultralytics import YOLO

# Ein YOLO-World-Modell erstellen
model = YOLO("yolov8s-world.pt")  # oder yolov8m/l-world.pt für andere Größen auswählen

# Mit einem YOLO-World-Modell ein Video verfolgen
results = model.track(source="path/to/video.mp4")
Hinweis

Die von Ultralytics bereitgestellten YOLO-World-Modelle sind bereits mit Kategorien aus dem COCO-Datensatz als Offline-Vokabular vorkonfiguriert, was eine sofortige und effiziente Nutzung ermöglicht. Dank dieser Integration können die YOLOv8-World-Modelle die 80 im COCO-Datensatz definierten Standardkategorien direkt erkennen und vorhersagen, ohne dass eine zusätzliche Einrichtung oder Anpassung erforderlich ist.

Prompts festlegen#

Übersicht über YOLO-World-Prompt-Klassennamen

Das YOLO-World-Framework ermöglicht die dynamische Festlegung von Klassen über benutzerdefinierte Prompts. So kannst du das Modell ohne erneutes Training an deine spezifischen Anforderungen anpassen. Diese Funktion ist besonders nützlich, um das Modell auf neue Bereiche oder bestimmte Aufgaben auszurichten, die ursprünglich nicht Teil der Trainingsdaten waren. Mit benutzerdefinierten Prompts kannst du das Modell gezielt auf relevante Objekte lenken und so die Relevanz und Genauigkeit der Erkennungsergebnisse verbessern.

Wenn deine Anwendung beispielsweise nur die Objekte „person“ und „bus“ erkennen muss, kannst du diese Klassen direkt angeben:

Beispiel
from ultralytics import YOLO

# Ein YOLO-World-Modell initialisieren
model = YOLO("yolov8s-world.pt")  # oder yolov8m/l-world.pt auswählen

# Benutzerdefinierte Klassen definieren
model.set_classes(["person", "bus"])

# Vorhersage für die angegebenen Kategorien in einem Bild ausführen
results = model.predict("path/to/image.jpg")

# Ergebnisse anzeigen
results[0].show()
Hintergrundklasse

Einige Nutzer haben festgestellt, dass das Anhängen einer leeren Zeichenfolge "" als Hintergrundklasse die Erkennungsleistung in bestimmten Szenarien verbessern kann. Dieses Verhalten scheint vom jeweiligen Szenario abzuhängen; der genaue Mechanismus ist nicht vollständig verstanden:

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

Die leere Zeichenfolge bleibt in model.names eine eigene Klasse, auch in jedem gespeicherten Modell. Daher werden ihre Erkennungen mit einer leeren Bezeichnung ausgegeben. Übergib bei der Vorhersage classes=[0, 1], damit nur deine tatsächlichen Klassen berücksichtigt werden.

Du kannst ein Modell auch speichern, nachdem du benutzerdefinierte Klassen festgelegt hast. Dadurch erstellst du eine Version des YOLO-World-Modells, die auf deinen konkreten Anwendungsfall spezialisiert ist. Dabei werden deine benutzerdefinierten Klassendefinitionen direkt in die Modelldatei eingebettet. Das Modell ist dadurch sofort mit den angegebenen Klassen einsatzbereit und muss nicht weiter angepasst werden. So speicherst und lädst du dein benutzerdefiniertes YOLO-World-Modell:

Beispiel

Lade zunächst ein YOLO-World-Modell, lege benutzerdefinierte Klassen dafür fest und speichere es:

from ultralytics import YOLO

# Ein YOLO-World-Modell initialisieren
model = YOLO("yolov8s-world.pt")  # oder yolov8m/l-world.pt auswählen

# Benutzerdefinierte Klassen definieren
model.set_classes(["person", "bus"])

# Das Modell mit dem festgelegten Offline-Vokabular speichern
model.save("custom_yolov8s.pt")

Nach dem Speichern verhält sich das Modell custom_yolov8s.pt wie jedes andere vortrainierte YOLOv8-Modell, mit einem entscheidenden Unterschied: Es ist jetzt darauf optimiert, nur die von dir festgelegten Klassen zu erkennen. Diese Anpassung kann die Erkennungsleistung und Effizienz für deine spezifischen Anwendungsszenarien deutlich verbessern.

from ultralytics import YOLO

# Dein benutzerdefiniertes Modell laden
model = YOLO("custom_yolov8s.pt")

# Eine Inferenz ausführen, um deine benutzerdefinierten Klassen zu erkennen
results = model.predict("path/to/image.jpg")

# Ergebnisse anzeigen
results[0].show()

Vorteile des Speicherns mit benutzerdefiniertem Vokabular#

  • Effizienz: Der Erkennungsprozess konzentriert sich auf relevante Objekte, wodurch der Rechenaufwand sinkt und die Inferenz schneller wird.
  • Flexibilität: Das Modell lässt sich leicht an neue oder spezielle Erkennungsaufgaben anpassen, ohne dass umfangreiches erneutes Training oder die Erfassung weiterer Daten erforderlich ist.
  • Einfachheit: Die Bereitstellung wird vereinfacht, da benutzerdefinierte Klassen nicht bei jeder Ausführung erneut angegeben werden müssen. Das Modell kann direkt mit seinem eingebetteten Vokabular verwendet werden.
  • Leistung: Die Erkennungsgenauigkeit für festgelegte Klassen steigt, da die Aufmerksamkeit und Ressourcen des Modells auf die Erkennung der definierten Objekte ausgerichtet werden.

Dieser Ansatz ermöglicht es, hochmoderne Objekterkennungsmodelle gezielt für bestimmte Aufgaben anzupassen und fortschrittliche KI für ein breiteres Spektrum praktischer Anwendungen zugänglicher und nutzbarer zu machen.

Offizielle Ergebnisse von Grund auf reproduzieren (experimentell)#

Datensätze vorbereiten#

  • Trainingsdaten
DatensatzTypBeispieleBoxenAnnotationsdateien
Objects365v1Erkennung609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Validierungsdaten
DatensatzTypAnnotationsdateien
LVIS minivalErkennungminival.txt

Training von Grund auf starten#

Hinweis

WorldTrainerFromScratch ist umfassend angepasst, damit YOLO-World-Modelle gleichzeitig auf Erkennungsdatensätzen und Grounding-Datensätzen trainiert werden können. Weitere Informationen findest du unter ultralytics.models.yolo.world.train_world.py.

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

# Option 1: Python-Wörterbuch verwenden
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: YAML-Datei verwenden (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,  # oder data="yolo_world_data.yaml" verwenden, wenn du eine YAML-Datei nutzt
    batch=128,
    epochs=100,
    trainer=WorldTrainerFromScratch,
)

Zitate und Danksagungen#

Wir danken dem Tencent AILab Computer Vision Center herzlich für seine Pionierarbeit bei der echtzeitfähigen Objekterkennung mit offenem Vokabular und YOLO-World:

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

Das Originalpapier zu YOLO-World findest du auf arXiv. Der Quellcode und weitere Ressourcen des Projekts sind über das GitHub-Repository verfügbar. Wir schätzen das Engagement des Teams, dieses Fachgebiet voranzubringen und wertvolle Erkenntnisse mit der Community zu teilen.

Häufig gestellte Fragen#

  • Das YOLO-World-Modell ist ein fortschrittlicher Ansatz zur echtzeitfähigen Objekterkennung, der auf dem Framework Ultralytics YOLOv8 basiert. Es eignet sich besonders für Aufgaben der Erkennung mit offenem Vokabular: Anhand beschreibender Texte identifiziert es Objekte in einem Bild. Durch den Einsatz von Bild-Sprach-Modellierung und das Vortraining auf großen Datensätzen erreicht YOLO-World eine hohe Effizienz und Leistung bei deutlich geringerem Rechenaufwand und eignet sich damit ideal für Echtzeitanwendungen in verschiedensten Branchen.

  • YOLO-World unterstützt die Strategie „Prompt eingeben, dann erkennen“ und nutzt dafür ein Offline-Vokabular, um die Effizienz zu steigern. Benutzerdefinierte Prompts wie Bildbeschreibungen oder bestimmte Objektkategorien werden vorab kodiert und als Offline-Vokabular-Einbettungen gespeichert. So wird der Erkennungsprozess vereinfacht, ohne dass erneutes Training erforderlich ist. Du kannst diese Prompts direkt im Modell dynamisch festlegen und es so auf bestimmte Erkennungsaufgaben ausrichten, wie unten gezeigt:

    from ultralytics import YOLOWorld
    
    # Ein YOLO-World-Modell initialisieren
    model = YOLOWorld("yolov8s-world.pt")
    
    # Benutzerdefinierte Klassen definieren
    model.set_classes(["person", "bus"])
    
    # Eine Vorhersage für ein Bild ausführen
    results = model.predict("path/to/image.jpg")
    
    # Ergebnisse anzeigen
    results[0].show()
  • YOLO-World bietet gegenüber herkömmlichen Erkennungsmodellen mit offenem Vokabular mehrere Vorteile:

    • Echtzeitleistung: Das Modell nutzt die Rechengeschwindigkeit von CNNs für eine schnelle und effiziente Erkennung.
    • Effizienz und geringer Ressourcenbedarf: YOLO-World bietet weiterhin eine hohe Leistung und reduziert zugleich den Rechen- und Ressourcenbedarf erheblich.
    • Anpassbare Prompts: Das Modell ermöglicht die dynamische Festlegung von Prompts, sodass du benutzerdefinierte Erkennungsklassen ohne erneutes Training angeben kannst.
    • Hervorragende Benchmark-Ergebnisse: Bei standardisierten Benchmarks übertrifft das Modell andere Detektoren mit offenem Vokabular wie MDETR und GLIP sowohl bei der Geschwindigkeit als auch bei der Effizienz.
  • Mit der bereitgestellten Python-API oder den CLI-Befehlen kannst du ein YOLO-World-Modell ganz einfach auf deinem Datensatz trainieren. So startest du das Training mit Python:

    from ultralytics import YOLOWorld
    
    # Ein vortrainiertes YOLOv8s-worldv2-Modell laden
    model = YOLOWorld("yolov8s-worldv2.pt")
    
    # Das Modell 100 Epochen lang mit dem COCO8-Datensatz trainieren
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

    Oder über die CLI:

    yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640
  • Ultralytics bietet mehrere vortrainierte YOLO-World-Modelle, die verschiedene Aufgaben und Betriebsmodi unterstützen:

    ModelltypVortrainierte GewichteUnterstützte AufgabenTrainingValidierungInferenzExportieren
    YOLOv8s-worldyolov8s-world.ptObjekterkennung✅✅✅❌
    YOLOv8s-worldv2yolov8s-worldv2.ptObjekterkennung✅✅✅✅
    YOLOv8m-worldyolov8m-world.ptObjekterkennung✅✅✅❌
    YOLOv8m-worldv2yolov8m-worldv2.ptObjekterkennung✅✅✅✅
    YOLOv8l-worldyolov8l-world.ptObjekterkennung✅✅✅❌
    YOLOv8l-worldv2yolov8l-worldv2.ptObjekterkennung✅✅✅✅
    YOLOv8x-worldyolov8x-world.ptObjekterkennung✅✅✅❌
    YOLOv8x-worldv2yolov8x-worldv2.ptObjekterkennung✅✅✅✅
  • Um die offiziellen Ergebnisse von Grund auf zu reproduzieren, musst du die Datensätze vorbereiten und das Training mit dem bereitgestellten Code starten. Dazu musst du ein Datenverzeichnis erstellen und die Methode train mit einem benutzerdefinierten Trainer ausführen:

    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)

Kommentare