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.

YOLO-Überblick über die Architektur des Weltmodells



Pass auf: YOLO Weltweiter Trainingsworkflow mit benutzerdefiniertem Datensatz

Ü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 Open-Vocabulary-Detektoren wie MDETR und die GLIP-Reihe in Bezug auf Geschwindigkeit und Effizienz bei Standard-Benchmarks und zeigt damit die überlegene Leistungsfähigkeit von YOLOv8 auf einer 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.models.yolo.world.train_world import WorldTrainerFromScratch
from ultralytics import YOLOWorld

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.



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

Kommentare