EoMT

Una rete di segmentazione costruita su un vision transformer semplice, senza un decoder di pixel dedicato: sono delle query apprese aggiuntive, inserite nell'encoder stesso, a predire le maschere. LibreYOLO la supporta per la segmentazione semantica, di istanze e panottica.

Task
semantic, instance segmentation, panoptic
Dimensioni
s, b, l at 512 px
Installa
pip install libreyolo
Livello di supporto
Solo inferenza, dalla v. Solo predizione, validazione ed esportazione. Le funzionalità di addestramento non si applicano.
Origine
EoMT di TU Eindhoven, Mobile Perception Systems Lab, MIT. Articolo, sorgente
Licenze
Codice MIT, pesi MIT. Uso commerciale

Installazione

EoMT non richiede nessun extra opzionale. Tutto ciò che importa è già nell'installazione di base.

bash
pip install libreyolo

Predizione

I pesi vengono scaricati da Hugging Face al primo utilizzo e restano nella cache locale. Il suffisso di task nel nome del file (-sem, -seg, -panoptic) seleziona il task, e LibreYOLO() lo deduce da quel nome, quindi non serve nessun argomento task=.

Semantica
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) id delle classiprint(mask.classes)      # id delle classi presenti nell'immagine, ordinati
Segmentazione di istanze
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Il suffisso -seg nel nome del file seleziona il task di istanze,# quindi qui non serve nessun argomento task.model = LibreYOLO("LibreEoMTl-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.boxes.xyxy)print(result.masks.data.shape)
Panottica
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) id dei segmentiprint(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 segmentazione semantica popola result.semantic_mask, un array (H, W) di id di classe in .data. La segmentazione di istanze popola result.boxes e result.masks, la stessa forma che restituisce ogni altra famiglia di segmentazione. La segmentazione panottica popola result.panoptic: una mappa (H, W) di id di segmento in .data, più .segments_info, una lista di dict {"id", "category_id"}, uno per segmento. conf filtra la selezione delle query; iou non ha alcun effetto sul task semantico, perché assegna una classe a ogni pixel per argmax, senza passo di NMS. Vedi predizione per sorgenti, streaming e gestione dei risultati.

Varianti

Tre dimensioni di encoder, s/b/l, tutte basate su DINOv2. Il checkpoint semantico è addestrato su ADE20K a 512 px; i checkpoint di istanze e panottico sono addestrati su COCO a 640 px, con un secondo checkpoint di istanze addestrato a 1280 px. Upstream distribuisce i pesi DINOv2 per la segmentazione di istanze solo alla dimensione l; s e b sono pubblicati solo per il semantico e il panottico. Le varianti di EoMT basate su DINOv3 esistono upstream ma non sono distribuite qui, perché dipendono da pesi DINOv3 ad accesso limitato e non commerciali.

LibreYOLO non addestra EoMT: train() solleva NotImplementedError per questa famiglia, cosa che il livello di supporto qui sopra segnala come solo inferenza.

Validazione

val() smista in base al task. Il semantico restituisce metrics/mIoU e metrics/pixel_accuracy. La segmentazione di istanze restituisce le stesse chiavi di mAP per maschere e box delle altre famiglie di segmentazione. Il panottico restituisce la Panoptic Quality come metrics/PQ, suddivisa in metrics/SQ (segmentation quality) e metrics/RQ (recognition quality), più metrics/PQ_things e metrics/PQ_stuff.

Semantica
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"])
Segmentazione di istanze
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # maschereprint(metrics["metrics/mAP50-95(B)"])   # box
Panottica
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

Esportazione

TaskONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: supportatosemantic to TorchScript: supportatosemantic to ExecuTorch: non supportatosemantic to TensorRT: supportatosemantic to OpenVINO: supportatosemantic to Paddle: non supportatosemantic to MNN: non supportatosemantic to RKNN: non supportatosemantic to ncnn: non supportatosemantic to TFLite: non supportatosemantic to CoreML: non supportatosemantic to Core AI: non supportato
Instance segmentationInstance segmentation to ONNX: non supportatoInstance segmentation to TorchScript: non supportatoInstance segmentation to ExecuTorch: non supportatoInstance segmentation to TensorRT: non supportatoInstance segmentation to OpenVINO: non supportatoInstance segmentation to Paddle: non supportatoInstance segmentation to MNN: non supportatoInstance segmentation to RKNN: non supportatoInstance segmentation to ncnn: non supportatoInstance segmentation to TFLite: non supportatoInstance segmentation to CoreML: non supportatoInstance segmentation to Core AI: non supportato
panopticpanoptic to ONNX: non supportatopanoptic to TorchScript: non supportatopanoptic to ExecuTorch: non supportatopanoptic to TensorRT: non supportatopanoptic to OpenVINO: non supportatopanoptic to Paddle: non supportatopanoptic to MNN: non supportatopanoptic to RKNN: non supportatopanoptic to ncnn: non supportatopanoptic to TFLite: non supportatopanoptic to CoreML: non supportatopanoptic to Core AI: non supportato

Oggi si esporta solo il task semantico: la segmentazione di istanze e quella panottica chiamano export() e ottengono NotImplementedError, perché il loro output di maschere da query non ha ancora un contratto di esportazione a runtime. Un artefatto semantico esportato si ricarica con LibreYOLO() in base al suffisso del file, quindi un file .onnx o .engine si comporta come un checkpoint e restituisce lo stesso 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
Usare il file esportato
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory smista in base al suffisso del file, quindi un artefatto# esportato si carica come un checkpoint e restituisce lo stesso Results.model = LibreYOLO("LibreEoMTl-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Checkpoint

Tutti i file di pesi pubblicati per questa famiglia.

FileIngresso (px)Licenza dei pesi
semantic
LibreEoMTl-sem.pt512mit
Instance segmentation
LibreEoMTl-seg.pt640mit
LibreEoMTl-seg-1280.ptmit
panoptic
LibreEoMTs-panoptic.ptmit
LibreEoMTb-panoptic.ptmit
LibreEoMTl-panoptic.ptmit

Oggi tutti i file elencati sopra sono presenti nell<link>organizzazione LibreYOLO</link> e vengono scaricati al primo utilizzo.

Licenze

Controlla la licenza nel repository Hugging Face degli specifici pesi che scarichi. Ogni checkpoint nell<link>organizzazione LibreYOLO</link> ne include una e non è sempre la stessa per tutta la famiglia. Quel repository è la fonte autorevole; il riepilogo seguente descrive le condizioni applicabili al momento dellultima verifica di questa pagina.

Questa è una descrizione delle licenze coinvolte, non una consulenza legale. Se la risposta è importante a fini commerciali, leggi personalmente le licenze e chiedi una consulenza indipendente.

Lavoro originale
EoMT, TU Eindhoven, Mobile Perception Systems Lab
Licenza upstream
MIT
Sorgente upstream
github.com/tue-mps/eomt
Codice LibreYOLO
MIT
Pesi
MIT, ripubblicati su huggingface.co/LibreYOLO
Interpretazione
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.

Citazione

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

Copiato dal blocco di citazione degli autori disponibile su github.com/tue-mps/eomt#bibtex-citation.

Verificato con LibreYOLO v1.5.0. Le tabelle di supporto, i checkpoint e i dati dei benchmark in questa pagina vengono generati dalla libreria rilasciata e dai pesi pubblicati, non scritti a mano.