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.
| variant | input | backend | time (ms) | peak memory (MiB, allocated / reserved) |
|---|---|---|---|---|
eomt-l-dinov2-ade20k | synthetic (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-ade20k | synthetic (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-ade20k3000x4000 (14.5 GiB peak allocated, 14.7 reserved);eomt-l-dinov3-ade20k3000x4000 (14.5 GiB peak allocated, 14.7 reserved) eomt-l-dinov2-ade20k1024x2048, first call: portable + torch.compile 17 s (cold Inductor cache), TensorRT fp16 53 s (ONNX + engine).eomt-l-dinov2-ade20koriginal 1024x2048: torch.autocast(fp16) around the forwardeomt-l-dinov3-ade20koriginal 1024x2048: torch.autocast(fp16) around the forwardeomt-l-dinov2-ade20kload / first call: original 4.8 s / 0.537 s (512x512), portable 3.13 s / 0.053 s, kernels 3.27† s / 0.036† seomt-l-dinov3-ade20kload / 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.
| variant | dataset | original fp32 | original fp16 | portable | kernels | note |
|---|---|---|---|---|---|---|
eomt-l-dinov2-ade20k | ADE20K val, every 4th image, mIoU / aAcc % | 57.31 / 86.44 | 57.31 / 86.44 | 57.34 / 86.44 | 57.37 / 86.43 | |
eomt-l-dinov3-ade20k | ADE20K val, every 4th image, mIoU / aAcc % | 57.62 / 86.60 | 57.62 / 86.60 | 57.62 / 86.60 | 57.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).
| variant | kernels error vs original, mean / p99 | GPU, torch | kernels used |
|---|---|---|---|
eomt-l-dinov2-ade20k | 2e-05 / 0.00033 | RTX 5060 Ti, torch 2.14.1+cu130 | fastbb@7d058322634d:sm_120, seg_up@3e44e71200cd:sm_120 |
eomt-l-dinov3-ade20k | 1e-05 / 0.00037 | RTX 5060 Ti, torch 2.14.1+cu130 | fastbb@7d058322634d:sm_120, seg_up@3e44e71200cd:sm_120 |