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 geht die Herausforderungen an, mit denen herkömmliche Modelle zur Erkennung von offenem Vokabular konfrontiert sind, die sich oft auf schwerfĂ€llige Transformer-Modelle stĂŒtzen, die umfangreiche Rechenressourcen benötigen. Die AbhĂ€ngigkeit dieser Modelle von vordefinierten Objektkategorien schrĂ€nkt auch ihren Nutzen in dynamischen Szenarien ein. YOLO-World belebt das YOLOv8 Framework mit Funktionen zur Erkennung von offenem Vokabular, indem es die Modellierung der Bildsprache und das Vortraining auf umfangreichen DatensĂ€tzen einsetzt, um eine breite Palette von Objekten in Zero-Shot-Szenarien mit unĂŒbertroffener Effizienz zu erkennen.

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.

Die Objekterkennung ist einfach mit der train Methode, wie unten dargestellt:

Beispiel

PyTorch vorgebildet *.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

Das YOLO-World Framework ermöglicht die dynamische Spezifikation von Klassen durch benutzerdefinierte Eingabeaufforderungen, so dass die Nutzer 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 Bereiche oder spezielle Aufgaben, die ursprĂŒnglich nicht Teil der Trainingsdaten waren. Durch das Einstellen benutzerdefinierter Eingabeaufforderungen können die Nutzer/innen den Fokus des Modells auf Objekte von Interesse lenken und so die Relevanz und Genauigkeit der Erkennungsergebnisse verbessern.

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.
  • 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 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-Welt unterstĂŒtzt eine "Prompt-then-detect"-Strategie, die ein Offline-Vokabular nutzt, um die Effizienz zu steigern. Benutzerdefinierte Aufforderungen wie Beschriftungen oder bestimmte Objektkategorien werden vorcodiert und als Offline-Vokabular gespeichert. Dieser Ansatz vereinfacht den Erkennungsprozess, ohne dass ein erneutes Training erforderlich ist. Du kannst diese Aufforderungen dynamisch im Modell einstellen, um es an bestimmte Erkennungsaufgaben anzupassen (siehe unten):

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)


Erstellt 2024-02-14, Aktualisiert 2024-07-04
Autoren: glenn-jocher (9), RizwanMunawar (3), Burhan-Q (1), Laughing-q (4)

Kommentare