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.
pip install libreyoloVorhersage
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.
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 Bildfrom 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)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": ...}, ...]libreyolo predict model=LibreEoMTl-sem.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueDie 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.
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"])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)"]) # Boxenfrom 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"])libreyolo val model=LibreEoMTl-sem.pt data=my-dataset.yamlExport
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| semantic | semantic to ONNX: unterstützt | semantic to TorchScript: unterstützt | semantic to ExecuTorch: nicht unterstützt | semantic to TensorRT: unterstützt | semantic to OpenVINO: unterstützt | semantic to Paddle: nicht unterstützt | semantic to MNN: nicht unterstützt | semantic to RKNN: nicht unterstützt | semantic to ncnn: nicht unterstützt | semantic to TFLite: nicht unterstützt | semantic to CoreML: nicht unterstützt | semantic to Core AI: nicht unterstützt |
| Instance segmentation | Instance segmentation to ONNX: nicht unterstützt | Instance segmentation to TorchScript: nicht unterstützt | Instance segmentation to ExecuTorch: nicht unterstützt | Instance segmentation to TensorRT: nicht unterstützt | Instance segmentation to OpenVINO: nicht unterstützt | Instance segmentation to Paddle: nicht unterstützt | Instance segmentation to MNN: nicht unterstützt | Instance segmentation to RKNN: nicht unterstützt | Instance segmentation to ncnn: nicht unterstützt | Instance segmentation to TFLite: nicht unterstützt | Instance segmentation to CoreML: nicht unterstützt | Instance segmentation to Core AI: nicht unterstützt |
| panoptic | panoptic to ONNX: nicht unterstützt | panoptic to TorchScript: nicht unterstützt | panoptic to ExecuTorch: nicht unterstützt | panoptic to TensorRT: nicht unterstützt | panoptic to OpenVINO: nicht unterstützt | panoptic to Paddle: nicht unterstützt | panoptic to MNN: nicht unterstützt | panoptic to RKNN: nicht unterstützt | panoptic to ncnn: nicht unterstützt | panoptic to TFLite: nicht unterstützt | panoptic to CoreML: nicht unterstützt | panoptic 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-sem.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreEoMTl-sem.pt format=onnxlibreyolo export model=LibreEoMTl-sem.pt format=tensorrt half=Truefrom 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.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| semantic | ||
| LibreEoMTl-sem.pt | 512 | mit |
| Instance segmentation | ||
| LibreEoMTl-seg.pt | 640 | mit |
| LibreEoMTl-seg-1280.pt | mit | |
| panoptic | ||
| LibreEoMTs-panoptic.pt | mit | |
| LibreEoMTb-panoptic.pt | mit | |
| LibreEoMTl-panoptic.pt | mit | |
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
- Upstream-Quelle
- github.com/tue-mps/eomt
- 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.