CoolFace
Modelpublic

tue-mps/eomt-dinov3-ade-semantic-large-512

sourceHugging Facemitupdated 8mo agoView on Hugging Face
1likes6.4kdownloads
Model Card

EoMT-DINOv3 (Large, 512px) for ADE20K Semantic Segmentation

<div class="flex flex-wrap space-x-1"> <img alt="PyTorch" src="https://img.shields.io/badge/PyTorch-DE3412?style=flat&logo=pytorch&logoColor=white"> <img alt="Transformers" src="https://img.shields.io/badge/Transformers-yellow?style=flat&logo=huggingface&logoColor=white"> </div>

Overview

This is the large variant of the EoMT-DINOv3 model trained for semantic segmentation on ADE20K at 512×512 resolution.

EoMT (Encoder-only Mask Transformer) is a Vision Transformer (ViT) architecture designed for high-quality and efficient image segmentation. It was introduced in the CVPR 2025 highlight paper: [Your ViT is Secretly an Image Segmentation Model](https://www.tue-mps.org/eomt)

Key Insight: Given sufficient scale and pretraining, a plain ViT along with a few additional parameters can perform segmentation without the need for task-specific decoders or pixel fusion modules. The same model backbone supports semantic, instance, and panoptic segmentation with different post-processing.

The DINOv3 variants leverage rotary position embeddings and the latest pre-training recipes from Meta AI, yielding measurable performance gains across segmentation tasks.

Usage

python
import requests
import torch
from PIL import Image
from transformers import AutoImageProcessor, EomtDinov3ForUniversalSegmentation

model_id = "nielsr/eomt-dinov3-ade-semantic-large-512"
processor = AutoImageProcessor.from_pretrained(model_id)
model = EomtDinov3ForUniversalSegmentation.from_pretrained(model_id)

device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

inputs = processor(images=image, return_tensors="pt").to(device)

with torch.inference_mode():
    outputs = model(**inputs)

# Semantic Segmentation
result = processor.post_process_semantic_segmentation(outputs, target_sizes=[image.size[::-1]])[0]
print(result.shape)  # Segmentation map with class indices

Model Details

PropertyValue
BackboneDINOv3 ViT-L/16
Input Resolution512×512
TaskSemantic Segmentation
DatasetADE20K

Citation

bibtex
@inproceedings{kerssies2025eomt,
    author    = {Kerssies, Tommie and Cavagnero, Niccolò 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},
}

Acknowledgements