EoMT

Сеть сегментации на обычном vision-трансформере без выделенного пиксельного декодера: маски предсказывают дополнительные обучаемые запросы (queries), добавленные прямо в энкодер. В LibreYOLO она поддержана для семантической, паноптической сегментации и сегментации экземпляров.

Задачи
semantic, instance segmentation, panoptic
Размеры
s, b, l at 512 px
Установка
pip install libreyolo
Уровень поддержки
Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
Исходный проект
EoMT от TU Eindhoven, Mobile Perception Systems Lab, MIT. Статья, исходный код
Лицензии
Код: MIT, веса: MIT. Коммерческое использование

Установка

EoMT не требует установки дополнительных extra-пакетов. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

Предсказание

Веса скачиваются с Hugging Face при первом запуске и кэшируются локально. Задачу выбирает суффикс в имени файла (-sem, -seg, -panoptic), а LibreYOLO() определяет её по этому имени, поэтому аргумент 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) идентификаторы классовprint(mask.classes)      # отсортированные id классов, найденных на изображении
Сегментация экземпляров
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Суффикс -seg в имени файла выбирает задачу сегментации экземпляров,# поэтому аргумент 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) идентификаторы сегментовprint(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

Семантическая сегментация заполняет result.semantic_mask — массив (H, W) с идентификаторами классов в .data. Сегментация экземпляров заполняет result.boxes и result.masks — ровно в той же форме, что возвращают остальные семейства сегментации. Паноптическая сегментация заполняет result.panoptic: карту идентификаторов сегментов (H, W) в .data и .segments_info — список словарей {"id", "category_id"}, по одному на сегмент. conf фильтрует отбор запросов, а iou на семантическую задачу не влияет, потому что она берёт argmax по каждому пикселю и шага NMS в ней нет. Об источниках, стриминге и обработке результатов — в разделе предсказание.

Варианты

Три размера энкодера — s/b/l, все на DINOv2. Семантический чекпойнт обучен на ADE20K при 512 px; чекпойнты для экземпляров и паноптики обучены на COCO при 640 px, плюс второй чекпойнт для экземпляров обучен при 1280 px. В исходном проекте веса на DINOv2 для сегментации экземпляров есть только в размере l; s и b опубликованы только для семантической и паноптической задач. Варианты EoMT на DINOv3 в исходном проекте есть, но здесь не поставляются, потому что они зависят от весов DINOv3 с ограниченным доступом и некоммерческой лицензией.

LibreYOLO не обучает EoMT: train() для этого семейства вызывает NotImplementedError, и уровень поддержки выше отмечает это семейство как «только инференс».

Валидация

val() выбирает ветку по задаче. Семантическая возвращает metrics/mIoU и metrics/pixel_accuracy. Сегментация экземпляров возвращает те же ключи mAP по маскам и рамкам, что и другие семейства сегментации. Паноптическая возвращает Panoptic Quality как metrics/PQ, разложенную на metrics/SQ (качество сегментации) и metrics/RQ (качество распознавания), а также metrics/PQ_things и 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)"])   # маскиprint(metrics["metrics/mAP50-95(B)"])   # рамки
Паноптическая сегментация
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

Экспорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: поддерживаетсяsemantic to TorchScript: поддерживаетсяsemantic to ExecuTorch: не поддерживаетсяsemantic to TensorRT: поддерживаетсяsemantic to OpenVINO: поддерживаетсяsemantic to Paddle: не поддерживаетсяsemantic to MNN: не поддерживаетсяsemantic to RKNN: не поддерживаетсяsemantic to ncnn: не поддерживаетсяsemantic to TFLite: не поддерживаетсяsemantic to CoreML: не поддерживаетсяsemantic to Core AI: не поддерживается
Instance segmentationInstance segmentation to ONNX: не поддерживаетсяInstance segmentation to TorchScript: не поддерживаетсяInstance segmentation to ExecuTorch: не поддерживаетсяInstance segmentation to TensorRT: не поддерживаетсяInstance segmentation to OpenVINO: не поддерживаетсяInstance segmentation to Paddle: не поддерживаетсяInstance segmentation to MNN: не поддерживаетсяInstance segmentation to RKNN: не поддерживаетсяInstance segmentation to ncnn: не поддерживаетсяInstance segmentation to TFLite: не поддерживаетсяInstance segmentation to CoreML: не поддерживаетсяInstance segmentation to Core AI: не поддерживается
panopticpanoptic to ONNX: не поддерживаетсяpanoptic to TorchScript: не поддерживаетсяpanoptic to ExecuTorch: не поддерживаетсяpanoptic to TensorRT: не поддерживаетсяpanoptic to OpenVINO: не поддерживаетсяpanoptic to Paddle: не поддерживаетсяpanoptic to MNN: не поддерживаетсяpanoptic to RKNN: не поддерживаетсяpanoptic to ncnn: не поддерживаетсяpanoptic to TFLite: не поддерживаетсяpanoptic to CoreML: не поддерживаетсяpanoptic to Core AI: не поддерживается

Сейчас экспортируется только семантическая задача: сегментация экземпляров и паноптическая сегментация на вызове export() получают NotImplementedError, потому что для их вывода из масок-запросов пока нет контракта экспорта в среды выполнения. Экспортированный семантический артефакт загружается обратно через LibreYOLO() по суффиксу файла, поэтому файл .onnx или .engine ведёт себя как чекпойнт и возвращает тот же 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
Использование экспортированного файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по суффиксу файла, поэтому экспортированный# артефакт загружается как любой чекпойнт и возвращает тот же Results.model = LibreYOLO("LibreEoMTl-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Чекпойнты

Все опубликованные файлы весов этого семейства.

ФайлВход (пикс.)Лицензия весов
semantic
LibreEoMTl-sem.pt512mit
Instance segmentation
LibreEoMTl-seg.pt640mit
LibreEoMTl-seg-1280.ptmit
panoptic
LibreEoMTs-panoptic.ptmit
LibreEoMTb-panoptic.ptmit
LibreEoMTl-panoptic.ptmit

Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
EoMT, TU Eindhoven, Mobile Perception Systems Lab
Лицензия исходного проекта
MIT
Исходный код проекта
github.com/tue-mps/eomt
Код LibreYOLO
MIT
Веса
MIT, повторно опубликованы на huggingface.co/LibreYOLO
Толкование
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.

Цитирование

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

Скопировано из блока цитирования авторов на странице github.com/tue-mps/eomt#bibtex-citation.

Проверено с LibreYOLO v1.5.0. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.