Zum Inhalt springen

YOLO-Weltmodell

Mit dem YOLO-Weltmodell wird ein fortschrittliches Echtzeit Ultralytics YOLOv8-basierten Ansatz für Open-Vocabulary Detection Aufgaben. Diese Innovation ermöglicht die Erkennung beliebiger Objekte innerhalb eines Bildes auf der Grundlage von beschreibenden Texten. Durch die signifikante Senkung der Rechenanforderungen bei gleichzeitiger Beibehaltung einer wettbewerbsfähigen Leistung erweist sich YOLO-World als vielseitiges Werkzeug für zahlreiche bildverarbeitungsbasierte Anwendungen.



Beobachten: YOLO Weltweiter Trainingsworkflow mit benutzerdefiniertem Datensatz

YOLO-Überblick über die Architektur des Weltmodells

Übersicht

YOLO-World geht die Herausforderungen an, mit denen herkömmliche Modelle zur Erkennung von offenem Vokabular konfrontiert sind, die sich häufig auf schwerfällige Transformer-Modelle stützen, die umfangreiche Rechenressourcen erfordern. Die Abhängigkeit dieser Modelle von vordefinierten Objektkategorien schränkt auch ihren Nutzen in dynamischen Szenarien ein. YOLO-World revitalisiert das YOLOv8 Framework mit Open-Vocabulary-Erkennungsfähigkeiten, indem esVision-Language-Modelling und Pre-Training auf umfangreichen Datensätzen einsetzt, um eine breite Palette von Objekten in Zero-Shot-Szenarien mit unübertroffener Effizienz zu identifizieren.

Wesentliche Merkmale

  1. Lösung in Echtzeit: Durch die Nutzung der Rechengeschwindigkeit von CNNs liefert YOLO-World eine schnelle Lösung zur Erkennung von offenem Vokabular für Branchen, die sofortige Ergebnisse benötigen.

  2. Effizienz und Leistung: YOLO-World senkt den Rechen- und Ressourcenbedarf ohne Leistungseinbußen 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, bei der ein Offline-Vokabular verwendet wird, um die Effizienz weiter zu steigern. Dieser Ansatz ermöglicht die Verwendung benutzerdefinierter, im Vorfeld berechneter Prompts, einschließlich Beschriftungen oder Kategorien, die als Offline-Vokabular-Einbettungen kodiert und gespeichert werden, wodurch der Erkennungsprozess rationalisiert wird.

  4. Angetrieben von YOLOv8: Aufbauend auf Ultralytics YOLOv8YOLO-World nutzt die neuesten Fortschritte in der Echtzeit-Objekterkennung, um die Erkennung von offenem Vokabular mit unvergleichlicher Genauigkeit und Geschwindigkeit zu ermöglichen.

  5. Hervorragende Benchmarks: YOLO-World übertrifft bestehende Detektoren mit offenem Vokabular, einschließlich MDETR und der GLIP-Serie, in Bezug auf Geschwindigkeit und Effizienz bei Standard-Benchmarks und zeigt die überlegene Leistungsfähigkeit von YOLOv8 auf einem einzigen NVIDIA V100 GPU.

  6. Vielseitige Anwendungen: YOLO-Der innovative Ansatz von 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

In diesem Abschnitt werden 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 beschrieben, 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 hervorhebt.

Modell Typ Vorgefertigte Gewichte Unterstützte Aufgaben Inferenz Validierung Ausbildung Exportieren
YOLOv8s-Welt yolov8s-welt.pt Objekt-Erkennung
YOLOv8s-worldv2 yolov8s-worldv2.pt Objekt-Erkennung
YOLOv8m-Welt yolov8m-welt.pt Objekt-Erkennung
YOLOv8m-worldv2 yolov8m-worldv2.pt Objekt-Erkennung
YOLOv8l-Welt yolov8l-welt.pt Objekt-Erkennung
YOLOv8l-worldv2 yolov8l-worldv2.pt Objekt-Erkennung
YOLOv8x-Welt yolov8x-welt.pt Objekt-Erkennung
YOLOv8x-worldv2 yolov8x-worldv2.pt Objekt-Erkennung

Zero-Shot-Übertragung auf den COCO-Datensatz

Modell Typ mAP mAP50 mAP75
yolov8s-Welt 37.4 52.0 40.6
yolov8s-worldv2 37.7 52.2 41.0
yolov8m-Welt 42.0 57.0 45.6
yolov8m-worldv2 43.0 58.4 46.8
yolov8l-Welt 45.7 61.3 49.8
yolov8l-worldv2 45.8 61.3 49.8
yolov8x-Welt 47.0 63.0 51.2
yolov8x-worldv2 47.1 62.8 51.4

Beispiele für die Verwendung

Die YOLO-Weltmodelle lassen sich leicht in Ihre Python Anwendungen integrieren. Ultralytics bietet eine benutzerfreundliche Python API und CLI Befehle, um die Entwicklung zu optimieren.

Zugbenutzung

Tipp

Wir empfehlen dringend die Verwendung von yolov8-worldv2 Modell für benutzerdefiniertes Training, da es deterministisches Training unterstützt und auch leicht in andere Formate exportiert werden kann, z.B. onnx/tensorrt.

Erkennung von Objekten ist einfach mit dem train Methode, wie unten dargestellt:

Beispiel

PyTorch vorgebildet *.pt Modelle sowie die Konfiguration *.yaml Dateien können an den YOLOWorld() Klasse, 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

Nutzung vorhersagen

Die Objekterkennung ist einfach mit dem 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 Ausschnitt zeigt, wie einfach es ist, ein vorab trainiertes Modell zu laden und eine Vorhersage für ein Bild durchzuführen.

Val-Verwendung

Die Modellvalidierung für einen Datensatz 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

# 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

Verwendung der Spur

Die Objektverfolgung mit dem YOLO-Weltmodell auf einem Video/Bild wird wie folgt rationalisiert:

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/file.mp4"

Hinweis

Die YOLO-World Modelle, die von Ultralytics bereitgestellt werden, sind mit den Kategorien des COCO-Datensatzes als Teil ihres Offline-Vokabulars vorkonfiguriert, was die Effizienz für eine sofortige Anwendung erhöht. Dank dieser Integration können die Modelle von YOLOv8-World die 80 Standardkategorien des COCO-Datensatzes direkt erkennen und vorhersagen, ohne dass zusätzliche Einstellungen oder Anpassungen erforderlich sind.

Eingabeaufforderungen einstellen

YOLO-Übersicht über die Namen der Welteingabeaufforderungsklassen

Das YOLO-World-Framework ermöglicht die dynamische Spezifikation von Klassen durch benutzerdefinierte Eingabeaufforderungen, so dass die Benutzer das Modell ohne erneutes Training an ihre spezifischen Bedürfnisse anpassen können. Diese Funktion ist besonders nützlich für die Anpassung des Modells an neue Domänen oder spezifische Aufgaben, die ursprünglich nicht Teil der Trainingsdaten waren. Durch die Einstellung von benutzerdefinierten Aufforderungen können die Benutzer den Fokus des Modells auf Objekte von Interesse lenken und so die Relevanz und Genauigkeit der Erkennungsergebnisse verbessern.

Wenn Ihre Anwendung z. B. nur die Erkennung der Objekte "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 Modells YOLO-World, die für Ihren spezifischen Anwendungsfall spezialisiert ist. Bei diesem Vorgang werden Ihre benutzerdefinierten Klassendefinitionen direkt in die Modelldatei eingebettet, so dass das Modell ohne weitere Anpassungen mit den von Ihnen festgelegten Klassen verwendet werden kann. Folgen Sie diesen Schritten, um Ihr benutzerdefiniertes YOLOv8 -Modell zu speichern und zu laden:

Beispiel

Laden Sie zunächst ein YOLO-Weltmodell, 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 Modell von YOLOv8 , allerdings mit einem entscheidenden Unterschied: Es ist jetzt so optimiert, dass es nur die von Ihnen definierten Klassen erkennt. 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 Sparens mit benutzerdefiniertem Vokabular

  • Effizienz: Rationalisierung des Erkennungsprozesses durch Konzentration auf relevante Objekte, Verringerung des Rechenaufwands und Beschleunigung der Inferenz.
  • Flexibel: Ermöglicht die einfache Anpassung des Modells an neue oder Nischenerkennungsaufgaben, ohne dass umfangreiche Nachschulungen oder Datenerhebungen erforderlich sind.
  • Vereinfachung: Vereinfacht die Bereitstellung, da die wiederholte Angabe von benutzerdefinierten Klassen zur Laufzeit entfällt und das Modell direkt mit seinem eingebetteten Vokabular verwendet werden kann.
  • 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 ein leistungsfähiges Mittel zur Anpassung von hochmodernen Objekterkennungsmodellen an spezifische Aufgaben, wodurch fortgeschrittene KI zugänglicher und für eine breitere Palette praktischer Anwendungen einsetzbar wird.

Offizielle Ergebnisse von Grund auf reproduzieren (experimentell)

Datensätze vorbereiten

  • Zugdaten
Datensatz Typ Proben Boxen Anmerkungsdateien
Objekte365v1 Erkennung 609k 9621k objekte365_schulung.json
GQA Erdung 621k 3681k final_mixed_train_no_coco.json
Flickr30k Erdung 149k 641k final_flickr_separateGT_train.json
  • Val-Daten
Datensatz Typ Anmerkungsdateien
LVIS minival Erkennung minival.txt

Ausbildung von Grund auf neu beginnen

Hinweis

WorldTrainerFromScratch ist hochgradig angepasst, um das Training von yolo-world-Modellen sowohl auf Erkennungsdatensätzen als auch auf Erdungsdatensätzen gleichzeitig zu ermöglichen. Mehr 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="../datasets/flickr30k/images",
                json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="../datasets/GQA/images",
                json_file="../datasets/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 danken dem Tencent AILab Computer Vision Center für seine Pionierarbeit bei der Echtzeit-Erkennung von Objekten 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 YOLO-World Paper auf arXiv verfügbar. Der Quellcode des Projekts und weitere Ressourcen können über das GitHub-Repository abgerufen werden. Wir schätzen ihr Engagement, das Feld voranzubringen und ihre wertvollen Erkenntnisse mit der Gemeinschaft zu teilen.

FAQ

Was ist das YOLO-Weltmodell und wie funktioniert es?

Das Modell YOLO-World ist ein fortschrittlicher Ansatz zur Objekterkennung in Echtzeit, der auf dem Ultralytics YOLOv8 Rahmenwerk. Es zeichnet sich durch die Erkennung von Objekten innerhalb eines Bildes auf der Grundlage von beschreibenden Texten aus, die mit einem offenen Wortschatz arbeiten. Durch die Modellierung der Bildsprache und das Vortraining auf großen Datensätzen erreicht YOLO-World eine hohe Effizienz und Leistung bei deutlich reduziertem Rechenaufwand, was es ideal für Echtzeitanwendungen in verschiedenen Branchen macht.

Wie geht YOLO-World mit benutzerdefinierten Eingabeaufforderungen um?

YOLO-World unterstützt eine "Prompt-then-detect"-Strategie, die ein Offline-Vokabular verwendet, um die Effizienz zu steigern. Benutzerdefinierte Prompts wie Beschriftungen oder bestimmte Objektkategorien werden vorcodiert und als Offline-Vokabular-Einbettungen gespeichert. Dieser Ansatz rationalisiert den Erkennungsprozess, ohne dass ein erneutes Training erforderlich ist. Sie können diese Aufforderungen innerhalb des Modells dynamisch einstellen, um es auf bestimmte Erkennungsaufgaben zuzuschneiden, 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 den traditionellen Open-Vocabulary-Erkennungsmodellen vorziehen?

YOLO-World bietet mehrere Vorteile gegenüber herkömmlichen Modellen zur Erkennung von offenem Vokabular:

  • Leistung in Echtzeit: Es nutzt die Rechengeschwindigkeit von CNNs, um eine schnelle und effiziente Erkennung zu ermöglichen.
  • Effizienz und geringer Ressourcenbedarf: YOLO-World bietet eine hohe Leistung und reduziert gleichzeitig den Bedarf an Rechenleistung und Ressourcen erheblich.
  • Anpassbare Prompts: Das Modell unterstützt die dynamische Einstellung von Prompts, so dass Benutzer benutzerdefinierte Erkennungsklassen ohne erneutes Training festlegen können.
  • Hervorragende Benchmarks: Es übertrifft andere Detektoren für offenes Vokabular 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-Weltmodells auf Ihrem Datensatz ist über die bereitgestellte Python API oder CLI Befehle ganz einfach. Hier erfahren Sie, wie Sie das Training mit Python beginnen:

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 über CLI:

yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

Welche vortrainierten YOLO-Weltmodelle gibt es und welche Aufgaben unterstützen sie?

Ultralytics bietet mehrere vortrainierte YOLO-Weltmodelle, die verschiedene Aufgaben und Betriebsarten unterstützen:

Modell Typ Vorgefertigte Gewichte Unterstützte Aufgaben Inferenz Validierung Ausbildung Exportieren
YOLOv8s-Welt yolov8s-welt.pt Objekt-Erkennung
YOLOv8s-worldv2 yolov8s-worldv2.pt Objekt-Erkennung
YOLOv8m-Welt yolov8m-welt.pt Objekt-Erkennung
YOLOv8m-worldv2 yolov8m-worldv2.pt Objekt-Erkennung
YOLOv8l-Welt yolov8l-welt.pt Objekt-Erkennung
YOLOv8l-worldv2 yolov8l-worldv2.pt Objekt-Erkennung
YOLOv8x-Welt yolov8x-welt.pt Objekt-Erkennung
YOLOv8x-worldv2 yolov8x-worldv2.pt Objekt-Erkennung

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 Hilfe des mitgelieferten Codes starten. Das Trainingsverfahren umfasst die Erstellung eines Datenwörterbuchs und die Ausführung 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": "../datasets/flickr30k/images",
                "json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
            },
            {
                "img_path": "../datasets/GQA/images",
                "json_file": "../datasets/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 10 Monaten ✏️ Aktualisiert vor 1 Monat

Kommentare