EoMT

Uma rede de segmentação construída sobre um vision transformer simples, sem decoder de pixels dedicado: queries aprendidas extras, adicionadas ao próprio encoder, predizem as máscaras. O LibreYOLO a suporta para segmentação semântica, de instâncias e panóptica.

Tarefas
semantic, instance segmentation, panoptic
Tamanhos
s, b, l at 512 px
Instalação
pip install libreyolo
Nível de suporte
Somente inferência, desde a v. Somente predição, validação e exportação. Os recursos de treinamento não se aplicam.
Origem
EoMT por TU Eindhoven, Mobile Perception Systems Lab, MIT. Artigo, código-fonte
Licenças
Código MIT, pesos MIT. Uso comercial

Instalação

O EoMT não precisa de nenhum extra opcional. Tudo o que ele importa está na instalação base.

bash
pip install libreyolo

Predição

Os pesos são baixados do Hugging Face no primeiro uso e ficam em cache local. O sufixo de tarefa no nome do arquivo (-sem, -seg, -panoptic) seleciona a tarefa, e LibreYOLO() a infere a partir desse nome de arquivo, então nenhum argumento task= é necessário.

Semântica
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 presentes na imagem, ordenados
Segmentação de instâncias
from libreyolo import LibreYOLO, SAMPLE_IMAGE # O sufixo -seg no nome do arquivo seleciona a tarefa de instâncias,# então nenhum argumento de tarefa é necessário aqui.model = LibreYOLO("LibreEoMTl-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.boxes.xyxy)print(result.masks.data.shape)
Panóptica
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 segmentoprint(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

A segmentação semântica preenche result.semantic_mask, um array (H, W) de ids de classe em .data. A segmentação de instâncias preenche result.boxes e result.masks, no mesmo formato que todas as outras famílias de segmentação devolvem. A segmentação panóptica preenche result.panoptic: um mapa (H, W) de ids de segmento em .data, mais .segments_info, uma lista de dicts {"id", "category_id"}, um por segmento. conf filtra a seleção de queries; iou não tem efeito na tarefa semântica, já que ela faz argmax por pixel, sem etapa de NMS. Veja predição para fontes, streaming e tratamento de resultados.

Variantes

Três tamanhos de encoder, s/b/l, todos baseados em DINOv2. O checkpoint semântico é treinado em ADE20K a 512 px; os checkpoints de instâncias e panóptico são treinados em COCO a 640 px, com um segundo checkpoint de instâncias treinado a 1280 px. O upstream publica pesos de segmentação de instâncias com DINOv2 apenas no tamanho l; s e b saem só para as tarefas semântica e panóptica. Variantes do EoMT baseadas em DINOv3 existem no upstream, mas não são distribuídas aqui, porque dependem de pesos DINOv3 restritos e não comerciais.

O LibreYOLO não treina o EoMT: train() levanta NotImplementedError para esta família, que o nível de suporte acima marca como somente inferência.

Validação

val() despacha por tarefa. A semântica devolve metrics/mIoU e metrics/pixel_accuracy. A segmentação de instâncias devolve as mesmas chaves de mAP de máscara e de box que as outras famílias de segmentação. A panóptica devolve o Panoptic Quality como metrics/PQ, dividido em metrics/SQ (qualidade de segmentação) e metrics/RQ (qualidade de reconhecimento), mais metrics/PQ_things e metrics/PQ_stuff.

Semântica
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"])
Segmentação de instâncias
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # máscarasprint(metrics["metrics/mAP50-95(B)"])   # boxes
Panóptica
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

Exportação

TarefaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: compatívelsemantic to TorchScript: compatívelsemantic to ExecuTorch: incompatívelsemantic to TensorRT: compatívelsemantic to OpenVINO: compatívelsemantic to Paddle: incompatívelsemantic to MNN: incompatívelsemantic to RKNN: incompatívelsemantic to ncnn: incompatívelsemantic to TFLite: incompatívelsemantic to CoreML: incompatívelsemantic to Core AI: incompatível
Instance segmentationInstance segmentation to ONNX: incompatívelInstance segmentation to TorchScript: incompatívelInstance segmentation to ExecuTorch: incompatívelInstance segmentation to TensorRT: incompatívelInstance segmentation to OpenVINO: incompatívelInstance segmentation to Paddle: incompatívelInstance segmentation to MNN: incompatívelInstance segmentation to RKNN: incompatívelInstance segmentation to ncnn: incompatívelInstance segmentation to TFLite: incompatívelInstance segmentation to CoreML: incompatívelInstance segmentation to Core AI: incompatível
panopticpanoptic to ONNX: incompatívelpanoptic to TorchScript: incompatívelpanoptic to ExecuTorch: incompatívelpanoptic to TensorRT: incompatívelpanoptic to OpenVINO: incompatívelpanoptic to Paddle: incompatívelpanoptic to MNN: incompatívelpanoptic to RKNN: incompatívelpanoptic to ncnn: incompatívelpanoptic to TFLite: incompatívelpanoptic to CoreML: incompatívelpanoptic to Core AI: incompatível

Hoje só a tarefa semântica exporta: a segmentação de instâncias e a panóptica chamam export() e recebem NotImplementedError, porque a saída de máscaras por query ainda não tem um contrato de exportação de runtime. Um artefato semântico exportado é carregado de volta por LibreYOLO() pelo sufixo do arquivo, então um arquivo .onnx ou .engine se comporta como um checkpoint e devolve o mesmo 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
Usar o arquivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # A factory roteia pelo sufixo do arquivo, então um artefato exportado# carrega como qualquer checkpoint e devolve o mesmo objeto Results.model = LibreYOLO("LibreEoMTl-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Checkpoints

Todos os arquivos de pesos publicados desta família.

ArquivoEntrada (px)Licença dos pesos
semantic
LibreEoMTl-sem.pt512mit
Instance segmentation
LibreEoMTl-seg.pt640mit
LibreEoMTl-seg-1280.ptmit
panoptic
LibreEoMTs-panoptic.ptmit
LibreEoMTb-panoptic.ptmit
LibreEoMTl-panoptic.ptmit

Todos os arquivos acima existem hoje na organização LibreYOLO e são baixados no primeiro uso.

Licenciamento

Confira a licença no repositório do Hugging Face correspondente aos pesos que você baixar. Cada checkpoint na organização LibreYOLO tem uma licença, e ela nem sempre é a mesma em toda a família. Esse repositório é a fonte oficial. O resumo abaixo descreve o que se aplicava na última verificação desta página.

Esta é uma descrição das licenças envolvidas, não uma orientação jurídica. Se a resposta tiver importância comercial, leia as licenças e procure sua própria assessoria.

Trabalho original
EoMT, TU Eindhoven, Mobile Perception Systems Lab
Licença original
MIT
Código-fonte original
github.com/tue-mps/eomt
Código do LibreYOLO
MIT
Pesos
MIT, republicado em huggingface.co/LibreYOLO
Interpretação
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.

Citação

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

Copiado do bloco de citação dos autores em github.com/tue-mps/eomt#bibtex-citation.

Verificado com o LibreYOLO v1.5.0. As tabelas de suporte, os checkpoints e os números de benchmark desta página são gerados a partir da biblioteca lançada e dos pesos publicados, não escritos à mão.