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.
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.

| Modus | Checkpoint | Du stellst bereit | Klassennamen in den Ergebnissen | Verwende es, wenn |
|---|---|---|---|---|
| Text-Prompt | *-seg.pt | Klassennamen als Strings | Genau die Namen, die du übergeben hast | Du das Ziel in Worten beschreiben kannst — die übliche Wahl |
| Visueller Prompt | *-seg.pt | Beispiel-Boxen auf einem Referenzbild | Generisch object0, object1, … | Du das Ziel nicht in Worte fassen kannst: ein spezifisches Teil, Logo oder ein Defekt |
| Prompt-frei | *-seg-pf.pt | Nichts | Namen aus dem integrierten Vokabular mit 4.585 Namen | Du katalogisierst oder erkundest und nicht im Voraus weißt, wonach du suchen sollst |
- Visuelle Prompts übernehmen deine Labels nicht. Die Klassen-IDs in
visual_promptsfassen Beispiele zusammen; das Modell meldet sie alsobject0,object1und 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östAssertionError: 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 ultralyticsDas 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 mitpip(es stellt den Tokenizer bereit) und lädt einen TorchScript-Text-Encoder in das aktuelle Arbeitsverzeichnis herunter. YOLOE-26 lädtmobileclip2_b.ts(ca. 254 MB) herunter; YOLOE-11 und YOLOE-v8 ladenmobileclip_blt.tsherunter. 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 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.
| Modell | Text- / visueller Prompt | Ohne Prompt |
|---|---|---|
| YOLOE-26n | yoloe-26n-seg.pt | yoloe-26n-seg-pf.pt |
| YOLOE-26s | yoloe-26s-seg.pt | yoloe-26s-seg-pf.pt |
| YOLOE-26m | yoloe-26m-seg.pt | yoloe-26m-seg-pf.pt |
| YOLOE-26l | yoloe-26l-seg.pt | yoloe-26l-seg-pf.pt |
| YOLOE-26x | yoloe-26x-seg.pt | yoloe-26x-seg-pf.pt |
| YOLOE-11s | yoloe-11s-seg.pt | yoloe-11s-seg-pf.pt |
| YOLOE-11m | yoloe-11m-seg.pt | yoloe-11m-seg-pf.pt |
| YOLOE-11l | yoloe-11l-seg.pt | yoloe-11l-seg-pf.pt |
| YOLOE-v8s | yoloe-v8s-seg.pt | yoloe-v8s-seg-pf.pt |
| YOLOE-v8m | yoloe-v8m-seg.pt | yoloe-v8m-seg-pf.pt |
| YOLOE-v8l | yoloe-v8l-seg.pt | yoloe-v8l-seg-pf.pt |
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.
| Modell | mAP50-95 | mAPr | mAPc | mAPf | Parameter (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOE-26n | 24.7 / 21.9 | 20.5 / 17.6 | 24.1 / 22.3 | 26.1 / 22.4 | 3.9 / 3.1 | 6.1 |
| YOLOE-26s | 30.8 / 28.6 | 23.9 / 25.1 | 29.6 / 27.8 | 33.0 / 29.9 | 10.7 / 11.0 | 21.9 |
| YOLOE-26m | 35.4 / 33.9 | 31.1 / 33.4 | 34.7 / 34.0 | 36.9 / 33.8 | 21.3 / 25.1 | 70.6 |
| YOLOE-26l | 37.8 / 36.3 | 35.1 / 37.6 | 37.6 / 36.2 | 38.5 / 36.1 | 25.5 / 29.3 | 89.0 |
| YOLOE-26x | 40.6 / 38.5 | 37.4 / 35.3 | 40.9 / 38.8 | 41.0 / 38.8 | 55.2 / 65.2 | 197.7 |
| YOLOE-11s | 27.5 / 26.3 | 21.4 / 22.5 | 26.8 / 27.1 | 29.3 / 26.4 | 10.7 / 10.9 | 22.7 |
| YOLOE-11m | 33.0 / 31.4 | 26.9 / 27.1 | 32.5 / 31.9 | 34.5 / 31.7 | 21.0 / 24.8 | 70.4 |
| YOLOE-11l | 35.2 / 33.7 | 29.1 / 28.1 | 35.0 / 34.6 | 36.5 / 33.8 | 26.0 / 29.8 | 89.5 |
| YOLOE-v8s | 27.9 / 26.2 | 22.3 / 21.3 | 27.8 / 27.7 | 29.0 / 25.7 | 12.3 / 12.6 | 29.8 |
| YOLOE-v8m | 32.6 / 31.0 | 26.9 / 27.0 | 31.9 / 31.7 | 34.4 / 31.1 | 26.4 / 28.4 | 80.7 |
| YOLOE-v8l | 35.9 / 34.2 | 33.2 / 33.2 | 34.8 / 34.6 | 37.3 / 34.1 | 43.5 / 47.3 | 167.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.
| Modell | mAP50-95 | mAPr | mAPc | mAPf | Parameter (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOE-26n-pf | 16.6 / 17.7 | 15.7 / 15.8 | 15.3 / 16.4 | 17.9 / 19.2 | 2.3 | 5.3 |
| YOLOE-26s-pf | 21.4 / 22.6 | 16.2 / 20.2 | 20.1 / 20.9 | 23.5 / 24.5 | 9.0 | 20.8 |
| YOLOE-26m-pf | 25.7 / 26.4 | 26.7 / 24.5 | 24.0 / 25.0 | 26.9 / 27.9 | 19.4 | 68.4 |
| YOLOE-26l-pf | 27.2 / 28.0 | 26.3 / 25.7 | 25.7 / 26.8 | 28.7 / 29.5 | 23.6 | 86.8 |
| YOLOE-26x-pf | 29.9 / 31.1 | 27.5 / 28.9 | 29.1 / 30.7 | 31.1 / 31.7 | 53.1 | 194.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.
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 🚀
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
)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:
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 themWenn 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:
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 Prompts —
model.val(data="coco128-seg.yaml", load_vp=True)extrahiert eine visuelle Einbettung pro Kategorie aus dem Dataset selbst. Fügerefer_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 übergebesingle_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.
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.
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:
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:
| YOLOE | SAM 3 | YOLO-World | |
|---|---|---|---|
| Entwickelt für | Echtzeit-Erkennung und -Segmentierung benannter Klassen | Konzeptsegmentierung und prompt-basiertes Tracking | Echtzeit-Open-Vocabulary-Detektion |
| Masken | Ja, mit den Checkpoints von *-seg.pt | Ja | Nein, nur Bounding Boxes |
| Visuelle Prompts | Ja (SAVPE) | Ja | Nein |
| Prompt-freier Modus | Ja, Vokabular mit 4.585 Namen | Nein | Nein |
| Wähle es, wenn | Du Durchsatz benötigst und die Klassen benennen kannst | Du die stärkste Konzeptsegmentierung benötigst und dir die Rechenleistung leisten kannst | Du 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-Detektion — Robotik 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.ptwä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 meldetnc=80mit numerischen Namen ("0","1", …), rufe alsoset_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
nundslaufen 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. Übergibagnostic_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.
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.
| Datensatz | Typ | Stichproben | Bboxen | Verarbeitete Segment-Annotationen |
|---|---|---|---|---|
| Objects365v1 | Detektion | 609k | 9621k | objects365_train_segm.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco_segm.json |
| Flickr30k | Grounding | 149k | 641k | final_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 checkpointZitate 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:
@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 lehnenset_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 ders-Maßstab ist der kleinste über 30 mAP auf LVIS minival. Gehe zum,loderxü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 zun. Lade stattdessen die*-seg-pf.pt-Datei derselben Größe, wenn du das integrierte Vokabular anstelle deiner eigenen Klassennamen wünschst.Labels wie
object0undobject1bedeuten, 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 invisual_prompts["cls"]übergebenen Klassen-IDs bewirken nur diese Gruppierung. Das Modell gibt sie alsobject0,object1usw. 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 mitAssertionError: 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
pipzu 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 mitsave_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 auchvisual_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 mitYOLO()als auch mitYOLOE()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.