Zum Inhalt springen

YOLO-Weltmodell

Das YOLO-Weltmodell führt ein fortschrittliches Echtzeit Ultralytics YOLOv8-basierten Ansatz für Open-Vocabulary Detection Aufgaben. Diese Innovation ermöglicht die Erkennung beliebiger Objekte in einem Bild auf der Grundlage von beschreibenden Texten. Durch die deutliche Senkung der Rechenanforderungen bei gleichzeitiger Beibehaltung einer wettbewerbsfähigen Leistung wird YOLO-World zu einem vielseitigen Werkzeug für zahlreiche bildverarbeitungsbasierte Anwendungen.



Pass auf: YOLO Weltweiter Trainingsworkflow mit benutzerdefiniertem Datensatz

YOLO-Überblick über die Architektur des Weltmodells

Übersicht

YOLO-World tackles the challenges faced by traditional Open-Vocabulary detection models, which often rely on cumbersome Transformer models requiring extensive computational resources. These models' dependence on pre-defined object categories also restricts their utility in dynamic scenarios. YOLO-World revitalizes the YOLOv8 framework with open-vocabulary detection capabilities, employing vision-language modeling and pre-training on expansive datasets to excel at identifying a broad array of objects in zero-shot scenarios with unmatched efficiency.

Hauptmerkmale

  1. Lösung in Echtzeit: Mit 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 , aber 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, um den Erkennungsprozess zu optimieren.

  4. Powered by YOLOv8: Aufbauend auf Ultralytics YOLOv8YOLO-World nutzt die neuesten Fortschritte bei der Objekterkennung in Echtzeit, um die Erkennung von offenen Vokabeln mit unvergleichlicher Genauigkeit und Geschwindigkeit zu ermöglichen.

  5. Herausragende Benchmarks: YOLO-World übertrifft bestehende Detektoren mit offenem Vokabular, darunter MDETR und die 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-Worlds innovativer Ansatz 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 Vortrainierte 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

Null-Schuss-Ü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

Verwendungsbeispiele

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

Nutzung des Zuges

Tipp

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

Object detection is straightforward with the train Methode, wie unten dargestellt:

Beispiel

PyTorch pretrained *.pt Modelle als auch 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 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 Ausschnitt zeigt, wie einfach es ist, ein trainiertes Modell zu laden und eine Vorhersage für ein Bild zu machen.

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 verfolgen

Die Objektverfolgung mit dem YOLO-Weltmodell auf einem Video/Bild 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/file.mp4"

Hinweis

Die YOLO-World Modelle von Ultralytics sind mit den Kategorien des COCO-Datensatzes als Teil ihres Offline-Vokabulars vorkonfiguriert, was die Effizienz bei der sofortigen 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 Promptklassen

The YOLO-World framework allows for the dynamic specification of classes through custom prompts, empowering users to tailor the model to their specific needs without retraining. This feature is particularly useful for adapting the model to new domains or specific tasks that were not originally part of the training data. By setting custom prompts, users can essentially guide the model's focus towards objects of interest, enhancing the relevance and accuracy of the detection results.

Wenn deine Anwendung zum Beispiel nur die Objekte "Person" und "Bus" erkennen muss, 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()

Du kannst ein Modell auch speichern, nachdem du benutzerdefinierte Klassen festgelegt hast. Auf diese Weise erstellst du eine Version des YOLO-Weltmodells, die auf deinen speziellen Anwendungsfall zugeschnitten ist. Bei diesem Vorgang werden die Definitionen deiner benutzerdefinierten Klassen direkt in die Modelldatei eingebettet, sodass das Modell ohne weitere Anpassungen mit den von dir festgelegten Klassen verwendet werden kann. Befolge diese Schritte, um dein benutzerdefiniertes YOLOv8 Modell zu speichern und zu laden:

Beispiel

Lade zunächst ein YOLO-Weltmodell, 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, allerdings mit einem entscheidenden Unterschied: Es ist jetzt so optimiert, dass es nur die von dir definierten Klassen erkennt. Diese Anpassung kann die Erkennungsleistung 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 Sparens mit benutzerdefiniertem Vokabular

  • Effizienz: Rationalisiert den Erkennungsprozess, indem er sich auf relevante Objekte konzentriert, den Rechenaufwand reduziert und die Inferenz beschleunigt.
  • Flexibilität: Ermöglicht eine einfache Anpassung des Modells an neue oder Nischen-Aufdeckungsaufgaben, ohne dass umfangreiche Nachschulungen oder Datenerhebungen erforderlich sind.
  • Vereinfachung: Vereinfacht die Bereitstellung, da keine benutzerdefinierten Klassen mehr zur Laufzeit angegeben werden müssen und das Modell direkt mit seinem eingebetteten Vokabular verwendet werden kann.
  • Performance: Enhances detection accuracy for specified classes by focusing the model's attention and resources on recognizing the defined objects.

Dieser Ansatz ermöglicht es, hochmoderne Objekterkennungsmodelle für bestimmte Aufgaben anzupassen, wodurch fortschrittliche KI zugänglicher und für ein breiteres Spektrum praktischer Anwendungen einsetzbar wird.

Reproduziere offizielle Ergebnisse von Grund auf (Experimentell)

Datensätze vorbereiten

  • Zugdaten
Datensatz Typ Proben Boxen Anmerkungsdateien
Objekte365v1 Erkennung 609k 9621k objects365_train.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 so angepasst, dass yolo-Weltmodelle gleichzeitig auf Erkennungsdatensätzen und Erdungsdatensätzen trainiert werden können. Weitere Details findest du 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 Objekterkennung mit offenem Vokabular in Echtzeit 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}
}

Die Originalarbeit YOLO-World ist auf arXiv zu finden. Der Quellcode des Projekts und weitere Ressourcen können über das GitHub-Repository abgerufen werden. Wir freuen uns, dass sie sich für den Fortschritt auf diesem Gebiet einsetzen und ihre wertvollen Erkenntnisse mit der Gemeinschaft teilen.

FAQ

Was ist das YOLO-Weltmodell und wie funktioniert es?

Das YOLO-Weltmodell ist ein fortschrittlicher Ansatz zur Objekterkennung in Echtzeit, der auf dem Ultralytics YOLOv8 Framework. Es zeichnet sich durch die Erkennung von Objekten innerhalb eines Bildes auf der Grundlage von beschreibenden Texten aus. 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 und ist damit ideal für Echtzeitanwendungen in verschiedenen Branchen.

Wie geht YOLO-World mit benutzerdefinierten Eingabeaufforderungen um?

YOLO-World supports a "prompt-then-detect" strategy, which utilizes an offline vocabulary to enhance efficiency. Custom prompts like captions or specific object categories are pre-encoded and stored as offline vocabulary embeddings. This approach streamlines the detection process without the need for retraining. You can dynamically set these prompts within the model to tailor it to specific detection tasks, as shown below:

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 Modellen zur Erkennung von offenem Vokabular 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 die Nutzer/innen benutzerdefinierte Erkennungsklassen ohne erneutes Training festlegen können.
  • Hervorragende Benchmarks: Bei Standard-Benchmarks übertrifft er andere offene Vokabeldetektoren wie MDETR und GLIP in puncto Geschwindigkeit und Effizienz.

Wie trainiere ich ein YOLO-Weltmodell auf meinem Datensatz?

Das Trainieren eines YOLO-Weltmodells auf deinem Datensatz ist ganz einfach über die Python API oder CLI Befehle möglich. Hier erfährst du, wie du mit Python trainieren kannst:

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

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 Vortrainierte 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, musst du die Datensätze vorbereiten und das Training mithilfe des mitgelieferten Codes starten. Das Trainingsverfahren umfasst die Erstellung eines Datenwörterbuchs und die Ausführung der train Methode mit einem eigenen 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)

📅 Created 8 months ago ✏️ Updated 17 days ago

Kommentare