Models · Semantic segmentation

EoMT

EoMT: a plain vision transformer that also predicts masks, for ADE20K scene segmentation, with DINOv2 or DINOv3 pre-training. Commercially usable.

Commercial use: yes.

variantinputbackendtime (ms)peak memory (MiB, allocated / reserved)
eomt-l-dinov2-ade20ksynthetic (1024x2048)original (fp32)
original
portable
kernels
portable + torch.compile
TensorRT fp16
178
63.7
50.8
35.0
49.4
54.3
3376 / 3526
3827 / 4086
1515 / 1584
1515 / 1584
1585 / 1624
1798 (engine)
eomt-l-dinov3-ade20ksynthetic (1024x2048)original (fp32)
original
portable
kernels
186
72.1
54.6
38.8
3372 / 3528
3822 / 4086
1514 / 1584
1514 / 1584
Details
  • Original code: https://github.com/huggingface/transformers at c4c4605f9618
  • Code licence: Apache-2.0 (permissive); files:
  • Weights licence: MIT
    • eomt-l-dinov3-ade20k: MIT AND LicenseRef-DINOv3-License
  • Licence evidence: https://huggingface.co/tue-mps/ade20k_semantic_eomt_large_512/blob/aeb262f5a0bc609236d27f1277c3173ce57aeb27/README.md
  • Training data: LVD-142M (DINOv2's curated web-image set, not released), ADE20K (SceneParsing, 150 classes)
    • eomt-l-dinov3-ade20k: ADE20K (SceneParsing, 150 classes) (fine-tuned from Meta's DINOv3 ViT-L/16 (pre-trained on LVD-1689M, not in datasets.toml; the DINOv3 weights are under the DINOv3 License); the EoMT model card says MIT)
  • Licence note: The eomt-l-dinov3-ade20k checkpoint is fine-tuned from DINOv3, so it also carries the DINOv3 License (redistribution must include its text); that licence does not exclude commercial use.
  • Kernel libraries: fastbb, seg_up
  • Variants: eomt-l-dinov2-ade20k, eomt-l-dinov3-ade20k
  • Outputs: logits; label_set: ade20k-150
  • Input size: any H x W >= 1, resized or padded inside the model
  • Tested up to (portable, fp16, RTX 5060 Ti 16 GB): eomt-l-dinov2-ade20k 3000x4000 (14.5 GiB peak allocated, 14.7 reserved); eomt-l-dinov3-ade20k 3000x4000 (14.5 GiB peak allocated, 14.7 reserved)
  • eomt-l-dinov2-ade20k 1024x2048, first call: portable + torch.compile 17 s (cold Inductor cache), TensorRT fp16 53 s (ONNX + engine).
  • eomt-l-dinov2-ade20k original 1024x2048: torch.autocast(fp16) around the forward
  • eomt-l-dinov3-ade20k original 1024x2048: torch.autocast(fp16) around the forward
  • eomt-l-dinov2-ade20k load / first call: original 4.8 s / 0.537 s (512x512), portable 3.13 s / 0.053 s, kernels 3.27† s / 0.036† s
  • eomt-l-dinov3-ade20k load / first call: original 1.83 s / 0.065 s (512x512), portable 3.2 s / 0.078 s, kernels 3.24† s / 0.039† s
  • † measured in the speed sweep after the portable load (or an earlier size) in the same process: file cache and kernels are warm, so the time is lower than a fresh start.
  • Protocol, first call, 3 warm-up, peak reset, median of 3 rounds x median of 5 (tools/speed_check.py), synthetic CUDA input (bench_inputs); peak = max over the first call and the timed calls

Measured

Each image at its own size, argmax of the logits. Original = the original code named under Details, same checkpoint and protocol.

variantdatasetoriginal fp32original fp16portablekernelsnote
eomt-l-dinov2-ade20kADE20K val, every 4th image, mIoU / aAcc %57.31 / 86.4457.31 / 86.4457.34 / 86.4457.37 / 86.43
eomt-l-dinov3-ade20kADE20K val, every 4th image, mIoU / aAcc %57.62 / 86.6057.62 / 86.6057.62 / 86.6057.60 / 86.59

Measured on NVIDIA GeForce RTX 5060 Ti, torch 2.14.1+cu130, fastforks 939adfe8, 2026-11-06.

Parity

CPU, float32: max |diff| <= 0.002 vs the original. GPU, float16 (the default), portable and kernels: mean |diff| <= 0.0002 and p99 <= 0.003 (absolute error of the output logits).

variantkernels error vs original, mean / p99GPU, torchkernels used
eomt-l-dinov2-ade20k2e-05 / 0.00033RTX 5060 Ti, torch 2.14.1+cu130fastbb@7d058322634d:sm_120, seg_up@3e44e71200cd:sm_120
eomt-l-dinov3-ade20k1e-05 / 0.00037RTX 5060 Ti, torch 2.14.1+cu130fastbb@7d058322634d:sm_120, seg_up@3e44e71200cd:sm_120