Meet YOLO26: next-gen vision AI.

Link to this sectionYOLO-World Modell#

Das YOLO-World Modell führt einen fortschrittlichen, echtzeitfähigen Ansatz auf Basis von Ultralytics YOLOv8 für Open-Vocabulary-Detektionsaufgaben ein. Diese Innovation ermöglicht die Erkennung beliebiger Objekte innerhalb eines Bildes basierend auf beschreibenden Texten. Durch die erhebliche Senkung der Rechenanforderungen bei gleichzeitig wettbewerbsfähiger Leistung erweist sich YOLO-World als vielseitiges Werkzeug für zahlreiche visionbasierte Anwendungen.



Watch: YOLO World training workflow on custom dataset

Übersicht der YOLO-World Modellarchitektur

Link to this sectionÜbersicht#

YOLO-World bewältigt die Herausforderungen herkömmlicher Open-Vocabulary-Detektionsmodelle, die oft auf schwerfällige Transformer-Modelle angewiesen sind, welche umfangreiche 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-Detektionsfähigkeiten, indem es Vision-Sprachmodellierung und Vortraining auf umfangreichen Datensätzen einsetzt, um eine breite Palette von Objekten in Zero-Shot-Szenarien mit unübertroffener Effizienz zu identifizieren.

Link to this sectionHauptfunktionen#

  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. Angetrieben von YOLOv8: Aufbauend auf Ultralytics YOLOv8, nutzt YOLO-World die neuesten Fortschritte der Echtzeit-Objekterkennung, um Open-Vocabulary-Detektion mit beispielloser 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.

Link to this sectionVerfü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 deren hervorragende Beiträge unterstreicht.

ModelltypVortrainierte GewichteUnterstützte AufgabenInferenceValidationTrainingExportieren
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

Link to this sectionZero-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

Link to this sectionAnwendungsbeispiele#

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 🚀

Link to this sectionTraining Nutzung#

Tipp

Wir empfehlen dringend, das yolov8-worldv2 Modell für das benutzerdefinierte Training zu verwenden, da es deterministisches Training unterstützt und zudem einfach in andere Formate, z. B. onnx/tensorrt, exportiert werden kann.

Objekterkennung ist mit der train Methode unkompliziert, wie unten dargestellt:

Beispiel

PyTorch vortrainierte *.pt Modelle sowie Konfigurationsdateien *.yaml 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")

Link to this sectionPredict-Nutzung#

Objekterkennung ist mit der predict Methode unkompliziert, 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()

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

Link to this sectionVal-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")

Link to this sectionTrack-Nutzung#

Objektverfolgung mit dem YOLO-World Modell auf einem Video/Bildern 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

# 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 als Teil ihres Offline-Vokabulars vorkonfiguriert mit den COCO Datensatz Kategorien, was die Effizienz für die sofortige Anwendung 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 Anpassung erforderlich ist.

Link to this sectionPrompts festlegen#

Übersicht der YOLO-World Prompt Klassennamen

Das YOLO-World Framework erlaubt die dynamische Spezifikation von Klassen durch benutzerdefinierte Prompts, was es Benutzern ermöglicht, das Modell an ihre spezifischen Bedürfnisse anzupassen, ohne ein erneutes Training. 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, was die Relevanz und Genauigkeit der Detektionsergebnisse verbessert.

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 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 geklärt:

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

Link to this sectionVorteile 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 Objekterkennungs-Modelle für spezifische Aufgaben, wodurch fortschrittliche KI zugänglicher und auf eine breitere Palette praktischer Anwendungen anwendbar wird.

Link to this sectionReproduziere offizielle Ergebnisse von Grund auf (Experimentell)#

Link to this sectionDatensätze vorbereiten#

  • Trainingsdaten
DatensatzTypStichprobenBboxenAnnotationsdateien
Objects365v1Detektion609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Validierungsdaten
DatensatzTypAnnotationsdateien
LVIS minivalDetektionminival.txt

Link to this sectionTraining von Grund auf starten#

Hinweis

WorldTrainerFromScratch ist stark angepasst, um das Training von yolo-world Modellen auf Erkennungs- und Grounding-Datensätzen gleichzeitig zu ermöglichen. Weitere Details findest du in ultralytics.model.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 = 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,
)

Link to this sectionZitate und Danksagungen#

Wir danken dem Tencent AILab Computer Vision Center für ihre Pionierarbeit bei der Open-Vocabulary Objekterkennung in Echtzeit 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 Informationen ist das ursprüngliche YOLO-World Paper auf arXiv verfügbar. Der Quellcode des Projekts und weitere Ressourcen sind über ihr GitHub Repository zugänglich. Wir schätzen ihr Engagement für den Fortschritt in diesem Bereich und das Teilen ihrer wertvollen Erkenntnisse mit der Community.

Link to this sectionFAQ#

Link to this sectionWas ist das YOLO-World Modell und wie funktioniert es?#

Das YOLO-World Modell ist ein fortschrittlicher Ansatz zur Objekterkennung in Echtzeit, der auf dem Ultralytics YOLOv8 Framework basiert. Es zeichnet sich durch Open-Vocabulary Erkennungsaufgaben aus, indem es Objekte in einem Bild basierend auf 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.

Link to this sectionWie geht YOLO-World mit Inferenz bei benutzerdefinierten Prompts um?#

YOLO-World unterstützt eine "Prompt-then-Detect"-Strategie, die ein Offline-Vokabular zur Effizienzsteigerung nutzt. Benutzerdefinierte Prompts wie Bildunterschriften oder spezifische Objektkategorien werden vorab kodiert und als Offline-Vokabular-Embeddings gespeichert. Dieser Ansatz optimiert den Erkennungsprozess ohne die Notwendigkeit eines erneuten Trainings. Du kannst diese Prompts dynamisch im Modell festlegen, um es an spezifische Erkennungsaufgaben anzupassen, 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()

Link to this sectionWarum sollte ich mich für YOLO-World gegenüber herkömmlichen Open-Vocabulary Erkennungsmodellen entscheiden?#

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.

Link to this sectionWie trainiere ich ein YOLO-World Modell auf meinem 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=640

Link to this sectionWelche 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:

ModelltypVortrainierte GewichteUnterstützte AufgabenInferenceValidationTrainingExportieren
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

Link to this sectionWie 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-Dictionarys 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)

Kommentare