YOLO Vision 2026:

YOLO-World Modell#

Das YOLO-World Model führt einen fortschrittlichen, auf Ultralytics YOLOv8 basierenden Echtzeit-Ansatz für Open-Vocabulary-Erkennungsaufgaben ein. Diese Innovation ermöglicht die Erkennung beliebiger Objekte in einem Bild basierend auf beschreibenden Texten. Durch die drastische Senkung des Rechenbedarfs bei gleichzeitiger Beibehaltung einer wettbewerbsfähigen Leistung erweist sich YOLO-World als vielseitiges Werkzeug für zahlreiche vision-basierte Anwendungen.



Watch: YOLO World training workflow on custom dataset

YOLO-World Model architecture overview

Übersicht#

YOLO-World geht die Herausforderungen an, mit denen traditionelle Open-Vocabulary-Erkennungsmodelle konfrontiert sind, die häufig auf umständliche Transformer-Modelle angewiesen sind, die erhebliche Rechenressourcen erfordern. 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-Erkennungsfunktionen, indem es Vision-Language Modeling und Vortraining auf umfangreichen Datensätzen einsetzt, um sich bei der Identifizierung einer breiten Palette von Objekten in Zero-Shot-Szenarien mit unübertroffener Effizienz auszuzeichnen.

Für Open-Vocabulary-Arbeiten, die außerdem Instanzmasken, visuelle Prompts oder einen promptfreien Modus benötigen, siehe YOLOE, das dieselbe set_classes() API beibehält.

Hauptfunktionen#

  1. 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.

  2. Effizienz und Leistung: YOLO-World senkt die Rechen- und Ressourcenanforderungen, ohne die Leistung zu beeinträchtigen. Es bietet eine robuste Alternative zu Modellen wie SAM, jedoch zu einem Bruchteil der Rechenkosten, was Echtzeitanwendungen ermöglicht.

  3. Inferenz mit Offline-Vokabular: YOLO-World führt eine „Prompt-then-Detect“-Strategie ein, bei der ein Offline-Vokabular verwendet wird, um die Effizienz weiter zu steigern. Dieser Ansatz ermöglicht die Verwendung von benutzerdefinierten Prompts, die vorab berechnet, kodiert und als Offline-Vokabular-Embeddings gespeichert werden, was den Detektionsprozess rationalisiert.

  4. Powered by YOLOv8: Aufbauend auf Ultralytics YOLOv8 nutzt YOLO-World die neuesten Fortschritte in der Echtzeit-Objekterkennung, um Open-Vocabulary-Erkennung mit unvergleichlicher Genauigkeit und Geschwindigkeit zu ermöglichen.

  5. 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 einzelnen NVIDIA V100 GPU.

  6. Vielseitige Anwendungen: Der innovative Ansatz von YOLO-World eröffnet neue Möglichkeiten für eine Vielzahl von Vision-Aufgaben 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 Inference, Validation, 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 hervorragenden Beiträge unterstreicht.

ModelltypVortrainierte GewichteUnterstützte AufgabenTrainingValidationInferenceExportieren
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 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 einfach in deine Python-Anwendungen integrieren. Ultralytics bietet benutzerfreundliche Python API und CLI commands zur Optimierung der Entwicklung.



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

Training Nutzung#

Tipp

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

Object detection ist mit der Methode train unkompliziert, wie unten veranschaulicht:

Beispiel

Vorrainierte PyTorch-Modelle *.pt sowie Konfigurationsdateien *.yaml können an die Klasse YOLOWorld() ü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")

Predict-Nutzung#

Object detection ist mit der Methode predict unkompliziert, wie unten veranschaulicht:

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()

Dieser Ausschnitt demonstriert die Einfachheit des Ladens eines vortrainierten Modells und des Ausführens einer Vorhersage auf einem Bild.

Val-Nutzung#

Die Modellvalidierung auf einem Datensatz ist 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")

Track-Nutzung#

Object tracking 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")
Hinweis

Die von Ultralytics bereitgestellten YOLO-World-Modelle sind standardmäßig mit Kategorien des COCO dataset 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 Standardkategorien des COCO dataset direkt zu erkennen und vorherzusagen, ohne zusätzliches Setup oder Anpassungen.

Prompts festlegen#

YOLO-World prompt class names overview

Das YOLO-World-Framework ermöglicht die dynamische Spezifikation von Klassen durch benutzerdefinierte Prompts, sodass du das Modell ohne Neutraining an deine spezifischen Bedürfnisse anpassen kannst. Diese Funktion ist besonders nützlich, um das Modell an neue Domains oder bestimmte Aufgaben anzupassen, die ursprünglich nicht Teil der training data waren. Durch das Festlegen benutzerdefinierter Prompts kannst du den Fokus des Modells im Wesentlichen auf relevante Objekte lenken und so die Relevanz und accuracy der Erkennungsergebnisse verbessern.

Wenn deine Anwendung beispielsweise nur die Erkennung von 'Person' und 'Bus' Objekten erfordert, kannst du 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 die Erkennungsleistung 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 mit deinen spezifizierten Klassen ohne weitere Anpassungen einsatzbereit ist. Befolge diese Schritte, um dein benutzerdefiniertes YOLO-World Modell zu speichern und zu laden:

Beispiel

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 Modell custom_yolov8s.pt wie jedes andere vortrainierte YOLOv8 Modell, jedoch mit einem entscheidenden Unterschied: Es ist nun darauf optimiert, nur die von dir definierten Klassen zu erkennen. Diese Anpassung kann die Detektionsleistung 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: Rationalisiert 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 Nischen-Detektionsaufgaben, ohne dass umfangreiche Nachtrainings oder Datensammlungen 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 ein leistungsstarkes Mittel zur Anpassung modernster object detection-Modelle für spezifische Aufgaben, wodurch fortschrittliche KI zugänglicher und für ein breiteres Spektrum praktischer Anwendungen nutzbar wird.

Reproduziere offizielle Ergebnisse von Grund auf (Experimentell)#

Datensätze vorbereiten#

  • Trainingsdaten
DatensatzTypStichprobenBboxenAnnotationsdateien
Objects365v1Detektion609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Val-Daten
DatensatzTypAnnotationsdateien
LVIS minivalDetektionminival.txt

Training von Grund auf starten#

Hinweis

WorldTrainerFromScratch ist hochgradig angepasst, um das Training von yolo-world-Modellen auf Erkennungs- und Grounding-Datensätzen gleichzeitig zu ermöglichen. Weitere Details 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: Use Python dictionary
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: 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 seine wegweisende Arbeit im Bereich der Echtzeit-Open-Vocabulary-Objekterkennung mit 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}
}

Für weitere Lektüre ist das ursprüngliche YOLO-World-Paper auf arXiv verfügbar. Der Quellcode des Projekts und weitere Ressourcen sind über das GitHub repository zugänglich. Wir schätzen ihr Engagement, das Fachgebiet voranzutreiben und ihre wertvollen Erkenntnisse mit der Community zu teilen.

FAQ#

  • Das YOLO-World-Modell ist ein fortschrittlicher Echtzeit-Objekterkennungsansatz auf Basis des Ultralytics YOLOv8-Frameworks. Es zeichnet sich bei Open-Vocabulary-Erkennungsaufgaben aus, indem es Objekte in einem Bild basierend auf beschreibenden Texten identifiziert. Durch den Einsatz von Vision-Language-Modeling und Vortraining auf großen Datensätzen erreicht YOLO-World eine hohe Effizienz und Leistung bei deutlich reduziertem Rechenbedarf, wodurch es ideal für Echtzeitanwendungen in verschiedenen Branchen ist.

  • YOLO-World unterstützt eine „Prompt-then-Detect“-Strategie, die ein Offline-Vokabular nutzt, um die Effizienz zu steigern. Benutzerdefinierte Prompts wie Untertitel oder spezifische Objektkategorien werden vorab kodiert und als Offline-Vokabular-embeddings gespeichert. Dieser Ansatz optimiert den Erkennungsprozess ohne die Notwendigkeit eines Neutrainings. Du kannst diese Prompts dynamisch im Modell festlegen, um es an bestimmte Erkennungsaufgaben 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()
  • YOLO-World bietet mehrere Vorteile gegenüber herkömmlichen Open-Vocabulary Erkennungsmodellen:

    • Echtzeit-Leistung: Es nutzt die Rechengeschwindigkeit von CNNs, um eine schnelle und effiziente Erkennung zu bieten.
    • Effizienz und geringer Ressourcenbedarf: YOLO-World behält eine hohe Leistung bei und reduziert gleichzeitig die Anforderungen an Rechenleistung und Ressourcen erheblich.
    • Anpassbare Prompts: Das Modell unterstützt das dynamische Festlegen von Prompts, wodurch Benutzer benutzerdefinierte Erkennungsklassen ohne erneutes Training angeben können.
    • Benchmark-Exzellenz: Es übertrifft andere Open-Vocabulary Detektoren wie MDETR und GLIP in Geschwindigkeit und Effizienz bei Standard-Benchmarks.
  • 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=640
  • Ultralytics bietet mehrere vortrainierte YOLO-World Modelle an, die verschiedene Aufgaben und Betriebsmodi unterstützen:

    ModelltypVortrainierte GewichteUnterstützte AufgabenTrainingValidationInferenceExportieren
    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. Das Trainingsverfahren umfasst das Erstellen eines Datenwörterbuchs und das Ausführen der Methode train 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)

Kommentare