Zum Inhalt springen

YOLO-World Modell

Das YOLO-World Modell stellt einen fortschrittlichen Ultralytics YOLOv8-basierten Echtzeit-Ansatz für Open-Vocabulary-Detection-Aufgaben vor. Diese Innovation ermöglicht die Erkennung jedes Objekts innerhalb eines Bildes basierend auf beschreibenden Texten. Durch die deutliche Reduzierung des Rechenaufwands bei gleichzeitiger Aufrechterhaltung einer wettbewerbsfähigen Leistung erweist sich YOLO-World als vielseitiges Werkzeug für zahlreiche bildbasierte Anwendungen.



Ansehen: YOLO World Trainings-Workflow auf einem benutzerdefinierten Datensatz

YOLO-World Modellarchitektur Übersicht

Ü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

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

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

  3. 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 benutzerdefinierten Prompts, die a priori berechnet wurden, einschließlich Bildunterschriften oder Kategorien, die als Offline-Vokabular-Einbettungen kodiert und gespeichert werden, wodurch der Erkennungsprozess optimiert wird.

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

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

  6. 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 detailliert die verfügbaren Modelle mit ihren spezifischen vortrainierten Gewichten, die von ihnen unterstützten Aufgaben und ihre Kompatibilität mit verschiedenen Betriebsmodi wie Inference, 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.

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 YOLOv8n 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

Dieser Codeausschnitt demonstriert, wie einfach es ist, ein vortrainiertes Modell zu laden und eine Vorhersage auf einem Bild auszuführen.

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 vorkonfiguriert mit COCO-Datensatz-Kategorien als Teil ihres Offline-Vokabulars, was die Effizienz für die sofortige Anwendung erhöht. Diese Integration ermöglicht es den YOLOv8-World-Modellen, die 80 Standardkategorien, die im COCO-Datensatz definiert sind, direkt zu erkennen und vorherzusagen, ohne dass zusätzliche Einrichtung oder Anpassung erforderlich ist.

Eingabeaufforderungen festlegen

YOLO-World Prompt-Klassennamen Übersicht

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

Sie können ein Modell auch speichern, nachdem Sie benutzerdefinierte Klassen festgelegt haben. Auf diese Weise erstellen Sie eine Version des YOLO-World-Modells, die auf Ihren spezifischen Anwendungsfall spezialisiert ist. Dieser Prozess bettet Ihre benutzerdefinierten Klassendefinitionen direkt in die Modelldatei ein, wodurch das Modell mit seinen angegebenen Klassen ohne weitere Anpassungen sofort einsatzbereit ist. Befolgen Sie diese Schritte, um Ihr benutzerdefiniertes YOLOv8-Modell 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 Modell custom_yolov8s.pt wie jedes andere vortrainierte YOLOv8-Modell, jedoch mit einem wesentlichen Unterschied: Es ist jetzt optimiert, um nur die von Ihnen definierten Klassen zu erkennen. Diese Anpassung kann die Erkennungsleistung 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 nutzt, um die Effizienz zu steigern. Benutzerdefinierte Prompts wie Bildunterschriften oder bestimmte Objektkategorien werden vorab kodiert und als Offline-Vokabular-Einbettungen gespeichert. Dieser Ansatz rationalisiert den Erkennungsprozess, ohne dass ein erneutes Training erforderlich ist. Sie können diese Prompts dynamisch innerhalb des Modells festlegen, um es an spezifische 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()

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 unterstützt?

Ultralytics bietet mehrere vortrainierte YOLO-World-Modelle an, 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)


📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 2 Monaten

Kommentare