YOLO Vision 2026:

YOLOE: Echtzeit-Erkennung und -Segmentierung mit offenem Vokabular#

Ultralytics YOLOE (Real-Time Seeing Anything) ist ein Erkennungs- und Instanzsegmentierungsmodell mit offenem Vokabular: Anstatt einer zum Trainingszeitpunkt festgelegten Klassenliste übernimmt es die gewünschten Kategorien zur Inferenzzeit als Text-Prompt, visuelles Beispiel oder integriertes Vokabular mit 4.585 Namen. Basierend auf den Ultralytics YOLO-Architekturen — YOLOv8, YOLO11 und YOLO26 — und inspiriert von YOLO-World, erreicht YOLOE modernste Zero-Shot-Genauigkeit bei nahezu geschlossener YOLO-Geschwindigkeit.



Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀

Kurzanleitung#

Benenne die gewünschten Klassen und starte den Prozess. YOLOE-26 liefert Bounding-Boxen und Instanzsegmentierungsmasken für Kategorien, auf die es nie trainiert wurde.

Erkenne alles, was du benennen kannst
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")

# "double-decker bus" is not a COCO class; YOLOE resolves it from the words alone
model.set_classes(["double-decker bus", "person"])

results = model.predict("https://ultralytics.com/images/bus.jpg")
results[0].show()

Der erste set_classes()-Aufruf lädt einen Text-Encoder herunter; siehe Installation und Anforderungen vor der Bereitstellung auf einer Maschine ohne Netzwerkzugriff.

Auswahl eines Prompt-Modus#

YOLOE unterstützt drei Prompt-Modi, und die Auswahl bestimmt, welchen Checkpoint du lädst und wie deine Klassenlabels aussehen. Wähle die Zeile, die zu dem passt, was du zur Inferenzzeit bereitstellen kannst.

YOLOE erkennt und segmentiert Objekte aus Text-Prompts, visuellen Prompts und dem prompt-freien Vokabular

ModusCheckpointDu stellst bereitKlassennamen in den ErgebnissenVerwende es, wenn
Text-Prompt*-seg.ptKlassennamen als StringsGenau die Namen, die du übergeben hastDu das Ziel in Worten beschreiben kannst — die übliche Wahl
Visueller Prompt*-seg.ptBeispiel-Boxen auf einem ReferenzbildGenerisch object0, object1, …Du das Ziel nicht in Worte fassen kannst: ein spezifisches Teil, Logo oder ein Defekt
Prompt-frei*-seg-pf.ptNichtsNamen aus dem integrierten Vokabular mit 4.585 NamenDu katalogisierst oder erkundest und nicht im Voraus weißt, wonach du suchen sollst
Zwei häufige Überraschungen
  • Visuelle Prompts übernehmen deine Labels nicht. Die Klassen-IDs in visual_prompts fassen Beispiele zusammen; das Modell meldet sie als object0, object1 und so weiter. Ordne sie selbst deinen eigenen Namen zu.
  • Prompt-freie Checkpoints lehnen set_classes() ab. Ein Aufruf bei einem *-seg-pf.pt-Modell löst AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models. aus. Lade stattdessen einen *-seg.pt-Checkpoint, wenn du deine eigenen Klassen benötigst.

Installation und Anforderungen#

YOLOE ist im Hauptpaket von Ultralytics enthalten:

pip install -U ultralytics

Das Text-Prompting erfordert zusätzlich einen Text-Encoder, der bei der ersten Verwendung statt bei der Installation abgerufen wird:

  • Der erste set_classes()-Aufruf installiert ultralytics/CLIP von GitHub mit pip (es stellt den Tokenizer bereit) und lädt einen TorchScript-Text-Encoder in das aktuelle Arbeitsverzeichnis herunter. YOLOE-26 lädt mobileclip2_b.ts (ca. 254 MB) herunter; YOLOE-11 und YOLOE-v8 laden mobileclip_blt.ts herunter. Führe den Download einmal aus dem Verzeichnis aus, von dem aus du den Betrieb startest, oder kopiere die Datei dorthin, da sie andernfalls erneut abgerufen wird.
  • Beide Schritte erfordern einen Netzwerkzugriff. Führe daher eine geprompte Vorhersage aus, bevor du das System auf einer Offline- oder Air-Gapped-Maschine bereitstellst.
  • Visuelle Prompts und prompt-freie Checkpoints benötigen überhaupt keinen Text-Encoder.

Die YOLOE-26-Checkpoints erfordern ultralytics 8.4.0 oder neuer; die YOLOE-11- und YOLOE-v8-Familien sind in früheren Versionen verfügbar. Eine durch Text geprompte Vorhersage durchläuft den gesamten Pfad — Checkpoint-Download, CLIP-Installation, Text-Encoder, Inferenz:

yolo predict model=yoloe-26s-seg.pt source="https://ultralytics.com/images/bus.jpg" classes="person"

Um den Download des Text-Encoders zur Inferenzzeit komplett zu überspringen, kannst du die Prompts einmalig in die Gewichtungen einbetten und wiederverwenden — siehe Prompt-Einbettungen wiederverwenden.

Architektur-Übersicht#

YOLOE Architecture

YOLOE behält die Standard-YOLO-Struktur bei — ein konvolutionales Backbone zur Merkmalsxtraktion, ein Neck für die multiskalige Fusion und einen ankerfreien, entkoppelten Head zur Vorhersage von Klassen und Boxen — und fügt drei Module hinzu, eines pro Prompt-Modus:

  • Re-parameterizable Region-Text Alignment (RepRTA) verfeinert Text-Einbettungen von CLIP über ein kleines Hilfsnetzwerk. Dieses Netzwerk läuft einmal pro set_classes()-Aufruf und wird beim Export herausgefiltert, sodass es pro Frame keine Rechenleistung kostet. Was bei jedem Forward-Pass tatsächlich ausgeführt wird, ist der Vergleich der gespeicherten Prompt-Einbettungen mit Regionsmerkmalen; siehe Einschränkungen bezüglich der Kosten bei einem großen Prompt-Set.
  • Semantic-Activated Visual Prompt Encoder (SAVPE) kodiert semantische und Aktivierungsmerkmale aus einer Beispiel-Box und konditioniert das Modell auf Objekte, die ähnlich aussehen. Dies ist der One-Shot-Pfad für Ziele, die schwer zu benennen sind, wie etwa ein Logo oder ein spezifisches Bauteil.
  • Lazy Region-Prompt Contrast (LRPC) gleicht Regions-Einbettungen mit einem integrierten Vokabular aus 4.585 Namen ab, sodass prompt-freie Checkpoints Objekte ohne externen Prompt und ohne Text-Encoder erkennen.

Die Instanzsegmentierung stammt von einem Masken-Zweig am Erkennungskopf wie bei YOLOv8-Seg, und jede Vorhersage liefert eine Maske auf results[0].masks. Sobald das Modell exportiert ist, werden die Open-World-Module in einen Standard-YOLO-Kopf reparameterisiert, sodass die exportierte Datei den gewöhnlichen Erkennungs-/Segmentierungspfad ausführt.

Verfügbare Modelle#

Jeder Checkpoint unten ist ein Instanzsegmentierungsmodell und unterstützt val, predict, export und track. Lade eine *-seg.pt-Datei für Text- oder visuelle Prompts und eine *-seg-pf.pt-Datei für die prompt-freie Inferenz; sie sind nicht austauschbar, siehe Auswahl eines Prompt-Modus. Nur die *-seg.pt-Dateien unterstützen train; ein prompt-freier Checkpoint wird aus einem trainierten Text-Prompt-Modell generiert, siehe Training der offiziellen Modelle von Grund auf.

YOLOE-Leistung auf LVIS#

Zero-Shot-Ergebnisse auf LVIS Minival bei 640 Pixeln aus dem Ultralytics YOLO26-Paper.

Text- und visuelle Prompts#

Jede Genauigkeits- und Parameterzelle zeigt Text-Prompt / visueller Prompt; FLOPs werden einmal angegeben. Parameter und FLOPs gelten für die im Paper evaluierte Erkennungskonfiguration. Die Genauigkeit entspricht dem Non-E2E-Wert aus dem Paper, dem einzigen Protokoll, das für jedes Modell im Vergleich angegeben wird; der End-to-End-Kopf von YOLOE-26 bleibt bei Text-Prompts um maximal 1,1 AP und bei visuellen Prompts um maximal 2,6 AP dahinter zurück.

ModellmAP50-95mAPrmAPcmAPfParameter
(M)
FLOPs
(B)
YOLOE-26n24.7 / 21.920.5 / 17.624.1 / 22.326.1 / 22.43.9 / 3.16.1
YOLOE-26s30.8 / 28.623.9 / 25.129.6 / 27.833.0 / 29.910.7 / 11.021.9
YOLOE-26m35.4 / 33.931.1 / 33.434.7 / 34.036.9 / 33.821.3 / 25.170.6
YOLOE-26l37.8 / 36.335.1 / 37.637.6 / 36.238.5 / 36.125.5 / 29.389.0
YOLOE-26x40.6 / 38.537.4 / 35.340.9 / 38.841.0 / 38.855.2 / 65.2197.7
YOLOE-11s27.5 / 26.321.4 / 22.526.8 / 27.129.3 / 26.410.7 / 10.922.7
YOLOE-11m33.0 / 31.426.9 / 27.132.5 / 31.934.5 / 31.721.0 / 24.870.4
YOLOE-11l35.2 / 33.729.1 / 28.135.0 / 34.636.5 / 33.826.0 / 29.889.5
YOLOE-v8s27.9 / 26.222.3 / 21.327.8 / 27.729.0 / 25.712.3 / 12.629.8
YOLOE-v8m32.6 / 31.026.9 / 27.031.9 / 31.734.4 / 31.126.4 / 28.480.7
YOLOE-v8l35.9 / 34.233.2 / 33.234.8 / 34.637.3 / 34.143.5 / 47.3167.6

Ohne Prompt#

Die prompt-freien Checkpoints antworten aus ihrem integrierten Vokabular heraus ohne bereitgestellten Prompt. Jede Genauigkeitszelle zeigt End-to-End / Non-E2E, die beiden Protokolle, unter denen YOLOE-26 im Paper bewertet wird; die YOLO26-Seite zitiert die Non-E2E-Spalte.

ModellmAP50-95mAPrmAPcmAPfParameter
(M)
FLOPs
(B)
YOLOE-26n-pf16.6 / 17.715.7 / 15.815.3 / 16.417.9 / 19.22.35.3
YOLOE-26s-pf21.4 / 22.616.2 / 20.220.1 / 20.923.5 / 24.59.020.8
YOLOE-26m-pf25.7 / 26.426.7 / 24.524.0 / 25.026.9 / 27.919.468.4
YOLOE-26l-pf27.2 / 28.026.3 / 25.725.7 / 26.828.7 / 29.523.686.8
YOLOE-26x-pf29.9 / 31.127.5 / 28.929.1 / 30.731.1 / 31.753.1194.4

Unter Text- und visuellen Prompts übertreffen die YOLOE-26-Modelle ihre Pendants YOLOE-11 und YOLOE-v8 bei jeder passenden Skalierung bezüglich mAP50-95, während sie bei Parametern und FLOPs unter der v8-Linie bleiben. Auf demselben Split berichtet das Paper YOLO-Worldv2 mit 24,4 (S), 32,4 (M) und 35,5 (L) sowie die Transformer-basierten Detektoren GLIP-T mit 26,0, GDINO-T mit 27,4 und DetCLIP-T mit 34,4, jeweils mit 155 bis 232 Mio. Parametern. Das ursprüngliche YOLOE-Paper fügt zwei Ergebnisse für die von ihm eingeführten Modelle im v8-Maßstab hinzu. Auf LVIS schlägt YOLOE-v8s YOLO-Worldv2-S um 3,5 AP bei einem Drittel der Trainingskosten und der 1,4-fachen Inferenzgeschwindigkeit. Auf COCO übertragen erzielt YOLOE-v8l einen Gewinn von 0,6 Box-AP und 0,4 Masken-AP gegenüber dem geschlossenen YOLOv8-L bei fast 4-fach kürzerer Trainingszeit.

Paper-Zahlen im Vergleich zu veröffentlichten Checkpoints

Das YOLO26-Paper evaluiert eine Erkennungskonfiguration. Die veröffentlichten Gewichtungen sind Segmentierungs-Checkpoints und enthalten einen Maskenzweig, SAVPE sowie die Textprojektion oben drauf, sodass ein geladenes yoloe-26l-seg.pt 35,4 Mio. und 142,0 Mrd. anstelle der oben genannten 25,5 Mio. und 89,0 Mrd. ausgibt. In beiden Fällen schließt der FLOPs-Wert die Region-Text-Ähnlichkeit aus, sodass die tatsächlichen Kosten mit der Größe des Prompt-Sets steigen, selbst wenn sich die Spalte nicht ändert; siehe Einschränkungen.

Anwendungsbeispiele#

Jedes YOLOE-Beispiel unten läuft über die Python-API. Text-Prompt-Vorhersage, Validierung, Export, Tracking und einfaches Training funktionieren auch über die CLI; die Fine-Tuning-Rezepte und visuellen Prompts übergeben eine Trainer- oder Predictor-Klasse als Argument, was nur die Python-API akzeptiert.

Training Nutzung#

Führe Fine-Tuning für jeden veröffentlichten *-seg.pt-Checkpoint auf deinem eigenen YOLO-Dataset durch. Dies folgt größtenteils dem standardmäßigen YOLO-Trainingsverfahren; der Unterschied liegt darin, welchen Trainer du übergibst. YOLOEPESegTrainer integriert deine Klassennamen in den Kopf und führt von dort aus ein Fine-Tuning durch, was bei deinen eigenen Labels erwünscht ist; der Standard-Trainer trainiert nicht gegen deine Klassennamen.



Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
Beispiel
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer

model = YOLOE("yoloe-26s-seg.pt")

results = model.train(
    data="coco128-seg.yaml",
    epochs=80,
    patience=10,
    trainer=YOLOEPESegTrainer,  # <- Important: the fine-tuning trainer, not the default
)
Stattdessen ein Erkennungsmodell trainieren

Jeder veröffentlichte Checkpoint ist ein Segmentierungsmodell. Um einen Detektor zu trainieren, baue das Modell aus dem passenden YAML auf, lade die Segmentierungsgewichtungen desselben Maßstabs und tausche den Erkennungstrainer ein. Alles andere bleibt unverändert.

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPETrainer

model = YOLOE("yoloe-26s.yaml").load("yoloe-26s-seg.pt")

results = model.train(data="coco128.yaml", epochs=80, patience=10, trainer=YOLOEPETrainer)

Predict-Nutzung#

Der Text-Prompt-Aufruf entspricht dem in Schnellstart gezeigten. Die verbleibenden beiden Modi erfordern jeweils ein zusätzliches Argument:

Beispiel

Visuelle Prompts zeigen dem Modell ein Beispiel anstelle einer Beschreibung. visual_prompts akzeptiert ein bboxes-Array von Beispiel-Boxen und ein cls-Array von Klassen-IDs, eine pro Box. Die IDs sind temporäre Gruppierungen, keine Labels – sie müssen fortlaufend ab 0 sein, und die Ergebnisse werden als object0, object1, … anstelle von dir gewählter Namen zurückgegeben.

Die Beispiel-Boxen können sich auf dem Bild befinden, für das du eine Vorhersage triffst:

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

# One example box per target, each with its own class ID
visual_prompts = {
    "bboxes": np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # person, glasses
    "cls": np.array([0, 1]),
}

results = model.predict(
    "ultralytics/assets/bus.jpg",
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

Oder auf einem separaten Referenzbild, das als refer_image übergeben wird; in diesem Fall beschreiben bboxes und cls Objekte in dieser Referenz und nicht im Ziel:

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {"bboxes": np.array([[221.52, 405.8, 344.98, 857.54]]), "cls": np.array([0])}  # person

results = model.predict(
    "ultralytics/assets/zidane.jpg",  # Target image
    refer_image="ultralytics/assets/bus.jpg",  # Where the example boxes live
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

# refer_image also sets the classes permanently, so later calls need no prompts at all
results = model("ultralytics/assets/bus.jpg")
model.export(format="onnx")  # And the export keeps them
Hinweis

Wenn es sich bei source um ein Video oder einen Stream handelt, wird das erste Frame automatisch zum refer_image, sodass die von dir übergebenen Prompts auf dieses Frame angewendet und durch den Rest des Videos getragen werden. Übergeben Sie refer_image explizit, um ein anderes Frame auszuwählen.

Sowohl source als auch refer_image akzeptieren torch-Tensoren direkt, was nützlich ist, wenn die Bilder bereits von einer bestehenden Pipeline stammen. Gib die Boxen in den eigenen Pixelkoordinaten des Tensors an:

import numpy as np
import torch

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-11l-seg.pt")

img_tensor = torch.rand(1, 3, 480, 480)  # (1, 3, H, W) float tensor in [0, 1]
visual_prompts = {"bboxes": np.array([[10, 10, 50, 50]]), "cls": np.array([0])}

results = model.predict(
    img_tensor,
    refer_image=img_tensor,
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
    imgsz=640,
)

Um Vorhersagen für mehrere Bilder gleichzeitig zu treffen, verschachtle die Prompts eine Ebene tiefer: ein bboxes-Array und ein cls-Array pro Quellbild in derselben Reihenfolge wie die Quellen.

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {
    "bboxes": [
        np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # bus.jpg: person, glasses
        np.array([[150, 200, 1150, 700]]),  # zidane.jpg: person
    ],
    "cls": [np.array([0, 1]), np.array([0])],
}

results = model.predict(
    ["ultralytics/assets/bus.jpg", "ultralytics/assets/zidane.jpg"],
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

Val-Nutzung#

Die Validierung läuft wie bei jedem anderen Modell auf einem Segmentierungsdataset ab:

Beispiel
from ultralytics import YOLOE

model = YOLOE("yoloe-26l-seg.pt")  # or yoloe-26s/m-seg.pt for other sizes

metrics = model.val(data="coco128-seg.yaml")

Zwei Varianten desselben Aufrufs decken die anderen Prompt-Modi ab:

  • Visuelle Promptsmodel.val(data="coco128-seg.yaml", load_vp=True) extrahiert eine visuelle Einbettung pro Kategorie aus dem Dataset selbst. Füge refer_data="coco.yaml" hinzu, um die Einbettungen aus einem anderen Dataset zu beziehen, das exakt dieselben Kategorien enthalten muss.
  • Prompt-frei — lade einen *-seg-pf.pt-Checkpoint und übergebe single_cls=True.

Export-Nutzung#

Prompt-Embeddings können einmal gespeichert und bei der Erstellung statischer Exporte wie ONNX, OpenVINO, TensorRT, CoreML, LiteRT und RKNN wiederverwendet werden. Das NPZ-Profil wird vor dem Export vom originalen PyTorch-Modell geladen; es ist kein zusätzlicher Laufzeiteingang, und das exportierte Modell benötigt die NPZ-Datei nicht.

Exportierte Modelle sind statisch

Mit set_classes() (oder über refer_image für visuelle Prompts) konfigurierte Klassen sind fest in die exportierten Gewichtungen eingebettet. Nach dem Export kann das Modell keine neuen Prompts mehr annehmen: Der Aufruf von set_classes() oder das Übergeben von visual_prompts=... an predict() bei einem geladenen Export schlägt fehl. Um die erkannten Klassen zu ändern, exportiere das Modell aus dem originalen .pt-Checkpoint mit den neu konfigurierten Prompts erneut. Die exportierte Datei verhält sich wie ein Standard-YOLO-Modell und kann auch mit YOLO() anstelle von YOLOE() geladen werden.

Prompt-Embeddings wiederverwenden
from ultralytics import YOLOE

model = YOLOE("yoloe-26n-seg.pt")
model.set_classes(["person", "bus"])
model.save_prompt_embeddings("person-bus.npz")

# The profile is bound to the source checkpoint and can be reused for later exports.
model = YOLOE("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="onnx")

Dasselbe Prompt-Profil kann auch ein reines Erfassungsmodell konfigurieren, das auf der passenden YOLOE-Architektur basiert. Dadurch wird der Masken-Zweig entfernt, während die vorgegebenen Klassen erhalten bleiben:

from ultralytics import YOLOE

model = YOLOE("yoloe-26n.yaml").load("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="rknn", name="rk3588", quantize=16)

Track-Nutzung#

Geprompte Klassen werden direkt in das Tracking übernommen, sodass du Objekte verfolgen kannst, auf die der Tracker nie trainiert wurde:

Beispiel
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")
model.set_classes(["forklift", "pallet"])

# persist=True keeps track IDs stable across frames
for result in model.track("path/to/video.mp4", stream=True, persist=True):
    print(result.boxes.id)

Wie sich YOLOE im Vergleich schlägt#

YOLOE positioniert sich zwischen einem Detektor mit geschlossenem Vokabular und einem schwergewichtigen Open-Vocabulary-Modell. Drei Vergleiche entscheiden, ob es die richtige Wahl ist:

  • Gegenüber einem YOLO mit geschlossenem Vokabular. Sobald die Prompts festgelegt sind, sagt YOLOE über den gewöhnlichen Erkennungs-/Segmentierungspfad voraus und exportiert wie jedes andere Modell. Der Vorteil ist die Möglichkeit, die Klassenliste zur Inferenzzeit zu ändern anstatt ein Retraining durchzuführen; der Nachteil ist eine Zero-Shot-Genauigkeit, die deutlich unter der eines Modells liegt, das auf deine eigenen Klassen trainiert wurde.
  • Gegenüber den früheren YOLOE-Familien. YOLOE-26 übernimmt den NMS-freien End-to-End-Kopf von YOLO26, deckt fünf Skalierungen (n/s/m/l/x) im Vergleich zu den früheren drei (s/m/l) ab und führt bei jeder passenden Skalierung in der Leistung.
  • Gegenüber Transformer-basierten Open-Vocabulary-Detektoren. GLIP und OWL-ViT führen zur Inferenzzeit einen Vision-Language-Transformer aus. YOLOE kodiert die Prompts einmalig und gleicht sie dann innerhalb eines konvolutionalen Kopfes mit Regionsmerkmalen ab.

Die nächstliegenden Alternativen verwenden alle einen Text-Prompt, aber nur YOLOE und SAM 3 liefern Masken, und die drei beantworten unterschiedliche Fragen:

YOLOESAM 3YOLO-World
Entwickelt fürEchtzeit-Erkennung und -Segmentierung benannter KlassenKonzeptsegmentierung und prompt-basiertes TrackingEchtzeit-Open-Vocabulary-Detektion
MaskenJa, mit den Checkpoints von *-seg.ptJaNein, nur Bounding Boxes
Visuelle PromptsJa (SAVPE)JaNein
Prompt-freier ModusJa, Vokabular mit 4.585 NamenNeinNein
Wähle es, wennDu Durchsatz benötigst und die Klassen benennen kannstDu die stärkste Konzeptsegmentierung benötigst und dir die Rechenleistung leisten kannstDu dich bereits darauf befindest — siehe den Migrationshinweis unten

Kommst du von YOLO-World? Die API hat dieselbe Form: Ersetze YOLOWorld durch YOLOE, lade einen *-seg.pt-Checkpoint und behalte deinen set_classes()-Aufruf bei. Du erhältst Masken und visuelle Prompts; der Export-Hinweis zu eingefrorenen Klassen gilt für beide.

Anwendungsfälle und Einsatzgebiete#

Open-Vocabulary-Detektion macht den Schritt des Neutrainierens pro Klasse überflüssig, was besonders dort wichtig ist, wo die Zielliste nicht im Voraus bekannt ist:

  • Open-World-DetektionRobotik und Sicherheitssysteme, die auf Objekte treffen, die zum Zeitpunkt des Trainings niemand aufgelistet hat.
  • One-Shot-Detektion aus einem Beispiel — visuelle Prompts erkennen ein spezifisches Teil, Logo oder einen Defekt anhand einer einzelnen Referenzbox, nützlich in der industriellen Inspektion.
  • Long-Tail-Katalogisierung — das integrierte Vokabular mit 4.585 Namen ist breit genug für das Überwachen der Biodiversität oder Einzelhandelsbestandsaufnahmen.
  • Dataset Bootstrapping — Bilder vor dem menschlichen Review mit Boxen und Masken vorlabeln, um dann ein schnelles Modell für feste Klassen auf dem Ergebnis zu trainieren.
  • Segmentierung beliebiger Ziele — die veröffentlichten *-seg.pt-Checkpoints liefern bei jeder Vorhersage eine Maske zurück, sodass medizinische Bildgebung und Satellitenanalyse pixelgenaue Ergebnisse ohne ein zweites Modell erhalten.

Ein gängiges Muster kombiniert zwei Modi: Führe den prompt-freien Modus einmal aus, um zu entdecken, was vorhanden ist, und schalte dann für die relevanten Kategorien auf Text-Prompts um.

Einschränkungen#

YOLOE tauscht Genauigkeit gegen die Fähigkeit ein, Klassen zur Inferenzzeit zu ändern. Die Konsequenzen, die du kennen solltest, bevor du dich festlegst:

  • Die Zero-Shot-Genauigkeit liegt deutlich unter der eines Modells, das auf deinen Klassen trainiert wurde. Die mit Prompts versehenen Checkpoints landen grob im Bereich von 22-40 mAP auf LVIS minival; ein auf deine eigenen Daten trainiertes YOLO mit festen Klassen wird das bei diesen Klassen übertreffen. Greife zu YOLOE, um Klassen abzudecken, für die du nicht trainieren kannst, nicht um das Training zu ersetzen.
  • Seltene Kategorien sind der Schwachpunkt. Die mAPr-Spalte in Performance berichtet speziell über die Genauigkeit bei den seltenen Klassen von LVIS, und bei Text-Prompts liegt sie in jeder Zeile unter den Spalten für häufige und sehr häufige Klassen. Überprüfe diese anstelle des allgemeinen mAP, wenn deine Ziele ungewöhnlich sind.
  • Ein Prompt beschreibt das Aussehen, keine Beziehungen. Die Detektion funktioniert, indem Regionsmerkmale mit dem Prompt-Embedding verglichen werden. Prompts, die von Zustand, Kontext oder Vergleich abhängen – „beschädigt“, „ganz links“, „das getragene Objekt“ – haben keinen verlässlichen Anhaltspunkt für den Abgleich. Bevorzuge Formulierungen, die alltäglichen Klassennamen nahekommen.
  • Große Prompt-Mengen kosten Latenz. Die Prompt-Embeddings werden einmal berechnet, aber bei jedem Forward-Pass mit Regionsmerkmalen verglichen. Gemessen auf der CPU mit yoloe-26s-seg.pt wächst ein Forward-Pass beim Übergang von 80 auf 1.203 Klassen um etwa 19 % und beim vollständigen Vokabular mit 4.585 Namen um etwa 89 %. Die gemeldeten FLOPs verändern sich überhaupt nicht, da die Region-Text-Ähnlichkeit nicht mitgezählt wird, sodass das Profil dich nicht davor warnen wird.
  • Klassennamen sind Platzhalter, bis du einen Prompt eingibst. Ein frisch geladener *-seg.pt-Checkpoint meldet nc=80 mit numerischen Namen ("0", "1", …), rufe also set_classes() auf, bevor du Labels liest. Prompt-freie Checkpoints liefern das vollständige Vokabular bereits ausgefüllt mit.

Bereitstellungshinweise#

  • Hardware. Die Inferenz benötigt eine NVIDIA-GPU mit 4-8 GB VRAM; die Skalierungen n und s laufen auf Edge-GPUs wie Jetson oder auf der CPU bei reduzierter Auflösung. Das Fine-Tuning erfordert eine einzelne GPU.
  • NMS ist standardmäßig klassenagnostisch. YOLOE prognostiziert mit agnostic_nms=True. Bei YOLOE-11 und YOLOE-v8 werden überlappende Boxen mit niedrigerem Score über verschiedene Klassen hinweg unterdrückt, anstatt nur innerhalb derselben Klasse, was Duplikate verhindert, wenn ein Objekt mehreren Kategorien entspricht. End-to-End YOLOE-26-Modelle wenden überhaupt keine IoU-Unterdrückung an; dort behält der agnostische Modus nur die jeweils beste Klasse pro Anker bei, anstatt zuzulassen, dass ein Anker mehrere Klassennamen ausgibt. Übergib agnostic_nms=False, um dies zu überschreiben.
  • Batching. Batch-Inferenz funktioniert direkt, und visuelle Prompts können pro Bild im selben Aufruf variieren.

Training der offiziellen Modelle von Grund auf#

Die meisten Leser benötigen dies nie. Es reproduziert die veröffentlichten Open-Vocabulary-Checkpoints von Objects365, GQA und Flickr30k – etwa 1,4 Millionen Trainingsdaten auf 8× RTX 4090 – und steht in keinem Zusammenhang mit dem Fine-Tuning auf deinen eigenen Daten, das oben unter Train Usage behandelt wird.

Warnung

Jeder Trainer, der von YOLOETrainer erbt, lehnt compile=True ab, einschließlich des Standard-Trainers YOLOESegTrainer und aller Trainer von Grund auf unten. Übergib compile=False (den Standard). Die beiden oben verwendeten Fine-Tuning-Trainer, YOLOEPESegTrainer und YOLOEPETrainer, haben diese Einschränkung nicht.

Das Training erfordert Segment-Annotationen. Entweder lädst du die verarbeiteten Dateien unten herunter oder generierst deine eigenen mit dem vom offiziellen Team bereitgestellten Skript, das von SAM 2.1 unterstützt wird. Für die Validierung wird LVIS minival verwendet.

DatensatzTypStichprobenBboxenVerarbeitete Segment-Annotationen
Objects365v1Detektion609k9621kobjects365_train_segm.json
GQAGrounding621k3681kfinal_mixed_train_no_coco_segm.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train_segm.json

Das Text-Prompt-Modell wird zuerst trainiert, und die beiden anderen Prompting-Modi sind Verfeinerungen davon:

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOESegTrainerFromScratch

data = {
    "train": {
        "yolo_data": ["Objects365.yaml"],
        "grounding_data": [
            {
                "img_path": "flickr/full_images/",
                "json_file": "flickr/annotations/final_flickr_separateGT_train_segm.json",
            },
            {
                "img_path": "mixed_grounding/gqa/images",
                "json_file": "mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            },
        ],
    },
    "val": {"yolo_data": ["lvis.yaml"]},
}

model = YOLOE("yoloe-26l-seg.yaml")
model.train(
    data=data,  # or the path to a YAML file holding the same structure
    batch=128,
    epochs=30,
    close_mosaic=2,
    optimizer="AdamW",
    lr0=2e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOESegTrainerFromScratch,
    device="0,1,2,3,4,5,6,7",
)

Die Checkpoints für visuelle Prompts und den prompt-freien Modus basieren auf diesem trainierten Text-Prompt-Modell und aktualisieren jeweils ein Modul. YOLOESegVPTrainer ist das Rezept für visuelle Prompts und YOLOEPEFreeTrainer das für den prompt-freien Modus, aber keine Klasse friert von sich aus etwas ein: Das selektive Training erfolgt über die Liste freeze, die du zusammen damit übergibst und die jedes Head-Kind außer savpe (bzw. jeden Klassifikationsturm) benennt, und der prompt-freie Lauf benötigt zusätzlich single_cls=True. Das upstream YOLOE repository enthält die vollständigen Rezepte für die Modelle im v8-Maßstab.

Ein abgeschlossener prompt-freier Lauf wird in einen Checkpoint reparameterisiert, der seine Namen bei der Inferenz ohne Prompt ausgibt, unter Verwendung von get_vocab und set_vocab:

from ultralytics import YOLOE

# Weights written by the prompt-free run and by the text-prompt run it started from. Each
# rerun creates a new directory (train-2, train-3, ...), so take the paths the runs printed.
model = YOLOE("runs/segment/train-2/weights/best.pt")  # prompt-free run, its head is already fused
text_model = YOLOE("runs/segment/train/weights/best.pt")  # text-prompt run, its head is still unfused

names = list(YOLOE("yoloe-26l-seg-pf.pt").model.names.values())  # the 4,585-name vocabulary, or your own list
vocab = text_model.get_vocab(names)

model.set_vocab(vocab, names)
model.save("yoloe-26l-seg-pf-custom.pt")  # never overwrite the released checkpoint

Zitate und Danksagungen#

Falls YOLOE zu deiner Forschung oder deinem Projekt beigetragen hat, zitiere bitte das Originalpaper von Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han und Guiguang Ding der Tsinghua University:

Zitat
@misc{wang2025yoloerealtimeseeing,
      title={YOLOE: Real-Time Seeing Anything},
      author={Ao Wang and Lihao Liu and Hui Chen and Zijia Lin and Jungong Han and Guiguang Ding},
      year={2025},
      eprint={2503.07465},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2503.07465},
}

Für weitere Lektüre ist das originale YOLOE-Papier auf arXiv verfügbar. Auf den Quellcode des Projekts und zusätzliche Ressourcen kann über das GitHub-Repository zugegriffen werden.

FAQ#

  • Ultralytics YOLOE fügt zwei Funktionen hinzu, die YOLO-World nicht hat: visuelle Prompts, bei denen eine Beispielbox den Klassennamen ersetzt, und prompt-freie Checkpoints, die aus einem integrierten Vokabular mit 4.585 Namen ganz ohne Prompt antworten. Jede Vorhersage der veröffentlichten *-seg.pt-Checkpoints enthält zudem eine Maske für die Instanzsegmentierung. Was die Genauigkeit betrifft, platziert das ursprüngliche YOLOE-Paper YOLOE-v8s bei einem Drittel der Trainingskosten und dem 1,4-fachen der Inferenzgeschwindigkeit um 3,5 AP vor YOLO-Worldv2-S auf LVIS. Die Migration ist eine Änderung um eine Zeile – siehe How YOLOE Compares.

  • Ultralytics YOLOE unterstützt drei Prompting-Modi. Ein Text-Prompt besteht aus Klassennamen als Strings auf einem *-seg.pt-Checkpoint und ist die übliche Wahl. Ein visueller Prompt besteht aus einer oder mehreren Beispielboxen auf einem Referenzbild für Ziele, die sich nur schwer in Worte fassen lassen. Die prompt-freie Inferenz verwendet einen separaten *-seg-pf.pt-Checkpoint, der ohne jegliche Vorgaben aus einem integrierten Vokabular mit 4.585 Namen antwortet. Text- und visuelle Prompts teilen sich dieselben Checkpoints; prompt-freie sind andere Dateien und lehnen set_classes() ab. Siehe Choosing a Prompting Mode für den vollständigen Vergleich.

  • Beginne mit yoloe-26s-seg.pt: Die YOLOE-26-Familie führt YOLOE-11 und YOLOE-v8 in jeder entsprechenden Größenordnung an, und der s-Maßstab ist der kleinste über 30 mAP auf LVIS minival. Gehe zu m, l oder x über, wenn die Genauigkeit bei seltenen Kategorien wichtiger ist als die Latenz – die mAPr-Spalte in Performance ist diejenige, die du vergleichen solltest. Wechsle nur für Edge-Bereitstellungen zu n. Lade stattdessen die *-seg-pf.pt-Datei derselben Größe, wenn du das integrierte Vokabular anstelle deiner eigenen Klassennamen wünschst.

  • Labels wie object0 und object1 bedeuten, dass die Vorhersage von einem visuellen Prompt stammt, der die Beispielboxen zu temporären nummerierten Klassen gruppiert, anstatt deine Namen zu übernehmen. Die von dir in visual_prompts["cls"] übergebenen Klassen-IDs bewirken nur diese Gruppierung. Das Modell gibt sie als object0, object1 usw. in der Reihenfolge der von dir zugewiesenen IDs aus. Ordne sie daher im Ergebnis deinen eigenen Labels zu. Wenn du deine Namen im Output haben möchtest, verwende stattdessen einen Text-Prompt.

  • Prompt-freie Checkpoints (*-seg-pf.pt) lösen Klassen über ihr eigenes integriertes Vokabular auf und lehnen externe Prompts mit AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models. ab. Lade einen *-seg.pt-Checkpoint, wenn du deine eigene Klassenliste benötigst. Siehe Choosing a Prompting Mode.

  • Der erste Text-Prompt veranlasst Ultralytics YOLOE dazu, ultralytics/CLIP von GitHub mit pip zu installieren und einen TorchScript-Text-Encoder in das aktuelle Arbeitsverzeichnis herunterzuladen – etwa 254 MB für YOLOE-26; siehe Installation and Requirements für das exakte Asset pro Modellfamilie. Visuelle Prompts und prompt-freie Checkpoints benötigen keines von beiden. Um den Download auf dem Zielgerät zu vermeiden, lege die Prompts einmal fest und speichere sie mit save_prompt_embeddings() oder exportiere das Modell mit bereits konfigurierten Klassen.

  • Nein – YOLOE backt die per Prompt übergebenen Klassen zum Exportzeitpunkt fest in die Gewichte ein, sodass ein geladener Export sowohl set_classes() als auch visual_prompts= ablehnt. Exportiere das Modell mit den neu konfigurierten Prompts erneut aus dem originalen .pt-Checkpoint. Die exportierte Datei verhält sich wie ein Standard-YOLO-Modell und kann sowohl mit YOLO() als auch mit YOLOE() geladen werden.

  • Verwende YOLOE, wenn du Echtzeit-Durchsatz benötigst und die Klassen benennen kannst, und SAM 3, wenn die Segmentierungsqualität eines Konzepts wichtiger ist als die Geschwindigkeit. Beide akzeptieren visuelle Beispiele; nur YOLOE verfügt über einen prompt-freien Modus. Der vollständige Vergleich befindet sich in How YOLOE Compares.

Kommentare