EoMT

Un réseau de segmentation bâti sur un vision transformer standard, sans pixel decoder dédié : ce sont des queries apprises ajoutées à l'encodeur lui-même qui prédisent les masques. LibreYOLO le prend en charge pour la segmentation sémantique, d'instances et panoptique.

Tâches
semantic segmentation, instance segmentation, panoptic segmentation
Tailles
s, b, l at 512 px
Installer
pip install "libreyolo[eomt]"
Niveau de support
Inférence uniquement, depuis v1.3.1. Prédiction, validation et export uniquement. Les fonctionnalités d'entraînement ne s'appliquent pas.
Origine
EoMT par TU Eindhoven, Mobile Perception Systems Lab, MIT. Article, source
Licences
Code MIT, poids MIT. Usage commercial

Installation

EoMT ne demande aucun extra optionnel. Tout ce qu'il importe fait partie de l'installation de base.

bash
pip install libreyolo

Prédire

Les poids sont téléchargés depuis Hugging Face au premier usage, puis mis en cache localement. Le suffixe de tâche dans le nom de fichier (-sem, -seg, -panoptic) sélectionne la tâche, et LibreYOLO() la déduit de ce nom de fichier, donc aucun argument task= n'est nécessaire.

Sémantique
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) ids de classeprint(mask.classes)      # ids de classe présents dans l'image, triés
Segmentation d'instances
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Le suffixe -seg dans le nom de fichier sélectionne la tâche instance,# donc aucun argument task n'est nécessaire ici.model = LibreYOLO("LibreEoMTl-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.boxes.xyxy)print(result.masks.data.shape)
Panoptique
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) ids de segmentprint(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

La segmentation sémantique remplit result.semantic_mask, un tableau (H, W) d'ids de classe sur .data. La segmentation d'instances remplit result.boxes et result.masks, la même forme que renvoie toute autre famille de segmentation. La segmentation panoptique remplit result.panoptic : une carte d'ids de segment (H, W) sur .data, plus .segments_info, une liste de dicts {"id", "category_id"}, un par segment. conf filtre la sélection des queries ; iou n'a aucun effet sur la tâche sémantique, puisqu'elle fait un argmax par pixel sans étape de NMS. Voir la prédiction pour les sources, le streaming et le traitement des résultats.

Variantes

Trois tailles d'encodeur, s/b/l, toutes adossées à DINOv2. Le checkpoint sémantique est entraîné sur ADE20K en 512 px ; les checkpoints instance et panoptique sont entraînés sur COCO en 640 px, avec un second checkpoint instance entraîné en 1280 px. En amont, les poids de segmentation d'instances DINOv2 ne sont fournis qu'en taille l ; s et b ne sont publiés que pour le sémantique et le panoptique. Des variantes d'EoMT adossées à DINOv3 existent en amont mais ne sont pas fournies ici, car elles dépendent de poids DINOv3 non commerciaux à accès restreint.

LibreYOLO n'entraîne pas EoMT : train() lève NotImplementedError pour cette famille, ce que le niveau de support ci-dessus signale comme inférence seule.

Valider

val() aiguille selon la tâche. Le sémantique renvoie metrics/mIoU et metrics/pixel_accuracy. La segmentation d'instances renvoie les mêmes clés de mAP masques et boîtes que les autres familles de segmentation. Le panoptique renvoie la Panoptic Quality sous metrics/PQ, décomposée en metrics/SQ (qualité de segmentation) et metrics/RQ (qualité de reconnaissance), plus metrics/PQ_things et metrics/PQ_stuff.

Sémantique
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"])
Segmentation d'instances
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # masquesprint(metrics["metrics/mAP50-95(B)"])   # boîtes
Panoptique
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

Exporter

TâcheONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
Semantic segmentationSemantic segmentation to ONNX : pris en chargeSemantic segmentation to TorchScript : pris en chargeSemantic segmentation to ExecuTorch : non pris en chargeSemantic segmentation to TensorRT : pris en chargeSemantic segmentation to OpenVINO : pris en chargeSemantic segmentation to Paddle : non pris en chargeSemantic segmentation to MNN : non pris en chargeSemantic segmentation to RKNN : non pris en chargeSemantic segmentation to ncnn : non pris en chargeSemantic segmentation to TFLite : non pris en chargeSemantic segmentation to CoreML : non pris en chargeSemantic segmentation to Core AI : non pris en charge
Instance segmentationInstance segmentation to ONNX : non pris en chargeInstance segmentation to TorchScript : non pris en chargeInstance segmentation to ExecuTorch : non pris en chargeInstance segmentation to TensorRT : non pris en chargeInstance segmentation to OpenVINO : non pris en chargeInstance segmentation to Paddle : non pris en chargeInstance segmentation to MNN : non pris en chargeInstance segmentation to RKNN : non pris en chargeInstance segmentation to ncnn : non pris en chargeInstance segmentation to TFLite : non pris en chargeInstance segmentation to CoreML : non pris en chargeInstance segmentation to Core AI : non pris en charge
Panoptic segmentationPanoptic segmentation to ONNX : non pris en chargePanoptic segmentation to TorchScript : non pris en chargePanoptic segmentation to ExecuTorch : non pris en chargePanoptic segmentation to TensorRT : non pris en chargePanoptic segmentation to OpenVINO : non pris en chargePanoptic segmentation to Paddle : non pris en chargePanoptic segmentation to MNN : non pris en chargePanoptic segmentation to RKNN : non pris en chargePanoptic segmentation to ncnn : non pris en chargePanoptic segmentation to TFLite : non pris en chargePanoptic segmentation to CoreML : non pris en chargePanoptic segmentation to Core AI : non pris en charge

Seule la tâche sémantique s'exporte aujourd'hui : la segmentation d'instances et la segmentation panoptique appellent export() et obtiennent NotImplementedError, parce que leur sortie de masques par query n'a pas encore de contrat d'export runtime. Un artefact sémantique exporté se recharge via LibreYOLO() selon son extension de fichier, si bien qu'un fichier .onnx ou .engine se comporte comme un checkpoint et renvoie le même Results.

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
Utiliser le fichier exporté
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory s'appuie sur l'extension du fichier, donc un artefact# exporté se charge comme un checkpoint et renvoie le même Results.model = LibreYOLO("LibreEoMTl-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Checkpoints

Tous les fichiers de poids publiés de cette famille.

FichierLicence des poids
Semantic segmentation
LibreEoMTl-sem.ptmit
Instance segmentation
LibreEoMTl-seg.ptmit
LibreEoMTl-seg-1280.ptmit
Panoptic segmentation
LibreEoMTs-panoptic.ptmit
LibreEoMTb-panoptic.ptmit
LibreEoMTl-panoptic.ptmit

Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.

Licence

Vérifiez la licence dans le dépôt Hugging Face des poids précis que vous téléchargez. Chaque checkpoint de l<link>organisation LibreYOLO</link> en possède une, et elles ne sont pas toujours identiques au sein dune même famille. Ce dépôt fait autorité ; le résumé ci-dessous décrit les conditions applicables lors de la dernière vérification de cette page.

Ceci décrit les licences concernées et ne constitue pas un conseil juridique. Si la réponse a une importance commerciale, lisez vous-même les licences et consultez votre propre avocat.

Travail d'origine
EoMT, TU Eindhoven, Mobile Perception Systems Lab
Licence du projet d'origine
MIT
Source du projet d'origine
github.com/tue-mps/eomt
Code de LibreYOLO
MIT
Poids
MIT, republiés sur huggingface.co/LibreYOLO
Interprétation
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.

Citation

@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},
}

Copié depuis le bloc de citation des auteurs sur github.com/tue-mps/eomt#bibtex-citation.

Vérifié avec LibreYOLO v1.5.0. Les tableaux de support, les checkpoints et les chiffres de benchmark de cette page sont générés à partir de la bibliothèque publiée et des poids publiés, et non rédigés à la main.

Architecture de EoMT

Choisissez une variante ou la vue de la famille, puis un bloc pour les détails. Ouvrez le schéma complet pour zoomer ou télécharger SVG et PNG. Les schémas sont en anglais.