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.
- Licenze
- Codice MIT, pesi MIT. Uso commerciale
Installazione
EoMT non richiede nessun extra opzionale. Tutto ciò che importa è già nell'installazione di base.
pip install libreyoloPredizione
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=.
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, ordinatifrom 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)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": ...}, ...]libreyolo predict model=LibreEoMTl-sem.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueLa 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.
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)"]) # maschereprint(metrics["metrics/mAP50-95(B)"]) # boxfrom 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.yamlEsportazione
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| semantic | semantic to ONNX: supportato | semantic to TorchScript: supportato | semantic to ExecuTorch: non supportato | semantic to TensorRT: supportato | semantic to OpenVINO: supportato | semantic to Paddle: non supportato | semantic to MNN: non supportato | semantic to RKNN: non supportato | semantic to ncnn: non supportato | semantic to TFLite: non supportato | semantic to CoreML: non supportato | semantic to Core AI: non supportato |
| Instance segmentation | Instance segmentation to ONNX: non supportato | Instance segmentation to TorchScript: non supportato | Instance segmentation to ExecuTorch: non supportato | Instance segmentation to TensorRT: non supportato | Instance segmentation to OpenVINO: non supportato | Instance segmentation to Paddle: non supportato | Instance segmentation to MNN: non supportato | Instance segmentation to RKNN: non supportato | Instance segmentation to ncnn: non supportato | Instance segmentation to TFLite: non supportato | Instance segmentation to CoreML: non supportato | Instance segmentation to Core AI: non supportato |
| panoptic | panoptic to ONNX: non supportato | panoptic to TorchScript: non supportato | panoptic to ExecuTorch: non supportato | panoptic to TensorRT: non supportato | panoptic to OpenVINO: non supportato | panoptic to Paddle: non supportato | panoptic to MNN: non supportato | panoptic to RKNN: non supportato | panoptic to ncnn: non supportato | panoptic to TFLite: non supportato | panoptic to CoreML: non supportato | panoptic 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.
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 # 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.
| File | Ingresso (px) | Licenza dei pesi |
|---|---|---|
| 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 | |
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.