EoMT

Ein Segmentierungsnetzwerk auf einem einfachen Vision Transformer ohne eigenen Pixel-Decoder: Zusätzliche gelernte Queries im Encoder selbst sagen die Masken vorher. LibreYOLO unterstützt es für semantische Segmentierung, Instanzsegmentierung und panoptische Segmentierung.

Aufgaben
semantic, instance segmentation, panoptic
Größen
s, b, l at 512 px
Installation
pip install libreyolo
Supportstufe
Nur Inferenz, seit v. Nur Vorhersage, Validierung und Export. Trainingsfunktionen sind nicht verfügbar.
Upstream
EoMT von TU Eindhoven, Mobile Perception Systems Lab, MIT. Publikation, Quelle
Lizenzen
Code MIT, Gewichte MIT. Kommerzielle Nutzung

Installation

EoMT benötigt kein optionales Zusatzpaket. Alle Importe sind in der Basisinstallation enthalten.

bash
pip install libreyolo

Vorhersage

Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert. Das Aufgabensuffix im Dateinamen (-sem, -seg, -panoptic) wählt die Aufgabe aus. LibreYOLO() leitet sie aus diesem Namen ab, sodass kein Argument task= erforderlich ist.

Semantisch
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreEoMTl-sem.pt")result = model(SAMPLE_IMAGE, save=True) mask = result.semantic_maskprint(mask.data.shape)   # (H, W) Klassen-IDsprint(mask.classes)      # sortierte Klassen-IDs im Bild
Instanzsegmentierung
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Das Suffix -seg im Dateinamen wählt die Instanzaufgabe aus,# daher ist hier kein task-Argument erforderlich.model = LibreYOLO("LibreEoMTl-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.boxes.xyxy)print(result.masks.data.shape)
Panoptisch
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreEoMTl-panoptic.pt")result = model(SAMPLE_IMAGE, save=True) pan = result.panopticprint(pan.data.shape)       # (H, W) Segment-IDsprint(pan.segments_info)    # [{"id": ..., "category_id": ...}, ...]
CLI
libreyolo predict model=LibreEoMTl-sem.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

Die semantische Segmentierung füllt result.semantic_mask, ein Array der Form (H, W) mit Klassen-IDs in .data. Die Instanzsegmentierung füllt result.boxes und result.masks in derselben Form wie jede andere Segmentierungsfamilie. Die panoptische Segmentierung füllt result.panoptic: eine Segment-ID-Karte der Form (H, W) in .data sowie .segments_info, eine Liste von Dictionaries der Form {"id", "category_id"}, eines pro Segment. conf filtert die Query-Auswahl. iou hat bei der semantischen Aufgabe keine Wirkung, weil sie pro Pixel ein Argmax ohne NMS-Schritt berechnet. Unter Vorhersage findest du Quellen, Streaming und die Verarbeitung von Ergebnissen.

Varianten

Es gibt drei Encoder-Größen s/b/l, alle mit DINOv2-Backbone. Der semantische Checkpoint wurde mit ADE20K bei 512 px trainiert. Die Instanz- und panoptischen Checkpoints wurden mit COCO bei 640 px trainiert. Ein zweiter Instanz-Checkpoint wurde bei 1280 px trainiert. Upstream veröffentlicht DINOv2-Gewichte für die Instanzsegmentierung nur in Größe l. Für die semantische und panoptische Segmentierung werden s und b veröffentlicht. Upstream bietet auch EoMT-Varianten mit DINOv3-Backbone an. Sie werden hier nicht ausgeliefert, weil sie von zugangsbeschränkten, nicht kommerziellen DINOv3-Gewichten abhängen.

LibreYOLO trainiert EoMT nicht: train() löst für diese Familie den Fehler NotImplementedError aus. Der oben verlinkte Support-Tier kennzeichnet sie daher als reine Inferenzfamilie.

Validierung

val() verzweigt nach Aufgabe. Die semantische Segmentierung gibt metrics/mIoU und metrics/pixel_accuracy zurück. Die Instanzsegmentierung gibt dieselben mAP-Schlüssel für Masken und Boxen wie andere Segmentierungsfamilien zurück. Die panoptische Segmentierung gibt Panoptic Quality als metrics/PQ zurück, aufgeteilt in metrics/SQ (Segmentierungsqualität) und metrics/RQ (Erkennungsqualität), sowie metrics/PQ_things und metrics/PQ_stuff.

Semantisch
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-sem.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mIoU"])print(metrics["metrics/pixel_accuracy"])
Instanzsegmentierung
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # Maskenprint(metrics["metrics/mAP50-95(B)"])   # Boxen
Panoptisch
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-panoptic.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/PQ"])print(metrics["metrics/SQ"], metrics["metrics/RQ"])
CLI
libreyolo val model=LibreEoMTl-sem.pt data=my-dataset.yaml

Export

AufgabeONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: unterstütztsemantic to TorchScript: unterstütztsemantic to ExecuTorch: nicht unterstütztsemantic to TensorRT: unterstütztsemantic to OpenVINO: unterstütztsemantic to Paddle: nicht unterstütztsemantic to MNN: nicht unterstütztsemantic to RKNN: nicht unterstütztsemantic to ncnn: nicht unterstütztsemantic to TFLite: nicht unterstütztsemantic to CoreML: nicht unterstütztsemantic to Core AI: nicht unterstützt
Instance segmentationInstance segmentation to ONNX: nicht unterstütztInstance segmentation to TorchScript: nicht unterstütztInstance segmentation to ExecuTorch: nicht unterstütztInstance segmentation to TensorRT: nicht unterstütztInstance segmentation to OpenVINO: nicht unterstütztInstance segmentation to Paddle: nicht unterstütztInstance segmentation to MNN: nicht unterstütztInstance segmentation to RKNN: nicht unterstütztInstance segmentation to ncnn: nicht unterstütztInstance segmentation to TFLite: nicht unterstütztInstance segmentation to CoreML: nicht unterstütztInstance segmentation to Core AI: nicht unterstützt
panopticpanoptic to ONNX: nicht unterstütztpanoptic to TorchScript: nicht unterstütztpanoptic to ExecuTorch: nicht unterstütztpanoptic to TensorRT: nicht unterstütztpanoptic to OpenVINO: nicht unterstütztpanoptic to Paddle: nicht unterstütztpanoptic to MNN: nicht unterstütztpanoptic to RKNN: nicht unterstütztpanoptic to ncnn: nicht unterstütztpanoptic to TFLite: nicht unterstütztpanoptic to CoreML: nicht unterstütztpanoptic to Core AI: nicht unterstützt

Derzeit lässt sich nur die semantische Aufgabe exportieren. Bei Instanz- und panoptischer Segmentierung löst export() den Fehler NotImplementedError aus, weil für ihre Query-Maskenausgabe noch kein Runtime-Exportvertrag besteht. Ein exportiertes semantisches Artefakt wird anhand seiner Dateiendung wieder über LibreYOLO() geladen. Eine .onnx- oder .engine-Datei verhält sich daher wie ein Checkpoint und gibt dasselbe Results-Objekt zurück.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-sem.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibreEoMTl-sem.pt format=onnxlibreyolo export model=LibreEoMTl-sem.pt format=tensorrt half=True
Exportierte Datei verwenden
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Die Factory entscheidet anhand der Dateiendung, daher wird ein Exportartefakt# wie jeder Checkpoint geladen und gibt dasselbe Results-Objekt zurück.model = LibreYOLO("LibreEoMTl-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Checkpoints

Alle veröffentlichten Gewichtsdateien dieser Familie.

DateiEingabe (px)Lizenz der Gewichte
semantic
LibreEoMTl-sem.pt512mit
Instance segmentation
LibreEoMTl-seg.pt640mit
LibreEoMTl-seg-1280.ptmit
panoptic
LibreEoMTs-panoptic.ptmit
LibreEoMTb-panoptic.ptmit
LibreEoMTl-panoptic.ptmit

Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.

Lizenzierung

Prüfe die Lizenz im Hugging-Face-Repository der konkreten Gewichte, die du herunterlädst. Jeder Checkpoint in der LibreYOLO-Organisation hat eine Lizenz, und sie ist innerhalb einer Familie nicht immer gleich. Dieses Repository ist die maßgebliche Quelle. Die Zusammenfassung unten beschreibt den Stand bei der letzten Verifizierung dieser Seite.

Dies ist eine Beschreibung der beteiligten Lizenzen und keine Rechtsberatung. Wenn die Antwort kommerziell relevant ist, lies die Lizenzen selbst und hole eigenen Rechtsrat ein.

Originalarbeit
EoMT, TU Eindhoven, Mobile Perception Systems Lab
Upstream-Lizenz
MIT
LibreYOLO-Code
MIT
Gewichte
MIT, erneut unter huggingface.co/LibreYOLO veröffentlicht
Einordnung
MIT is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks only that you keep the copyright and license notice with any copy you redistribute. LibreYOLO ships only the DINOv2-backed EoMT checkpoints, sizes s/b/l; the DINOv3 EoMT variants are excluded because they depend on gated non-commercial DINOv3 weights. DINOv2 itself is Apache-2.0. The semantic checkpoint is trained on ADE20K and the instance and panoptic checkpoints on COCO; both are research datasets, and users remain responsible for dataset-license compliance when validating or fine-tuning against them.

Zitieren

@inproceedings{kerssies2025eomt,
  author    = {Kerssies, Tommie and Cavagnero, Niccol\`{o} and Hermans, Alexander and Norouzi, Narges and Averta, Giuseppe and Leibe, Bastian and Dubbelman, Gijs and {de Geus}, Daan},
  title     = {{Your ViT is Secretly an Image Segmentation Model}},
  booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  year      = {2025},
}

Aus dem Zitierblock der Autoren unter github.com/tue-mps/eomt#bibtex-citation kopiert.

Mit LibreYOLO v1.5.0 verifiziert. Supporttabellen, Checkpoints und Benchmarkwerte auf dieser Seite werden aus der veröffentlichten Bibliothek und den publizierten Gewichten generiert und nicht von Hand geschrieben.