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-пакетов. Всё, что он импортирует, входит в базовую установку.
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": ...}, ...]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"])libreyolo val model=LibreEoMTl-sem.pt data=my-dataset.yamlЭкспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| semantic | semantic 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 segmentation | Instance 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: не поддерживается |
| panoptic | panoptic 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-sem.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibreEoMTl-sem.pt format=onnxlibreyolo export model=LibreEoMTl-sem.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по суффиксу файла, поэтому экспортированный# артефакт загружается как любой чекпойнт и возвращает тот же Results.model = LibreYOLO("LibreEoMTl-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)Чекпойнты
Все опубликованные файлы весов этого семейства.
| Файл | Вход (пикс.) | Лицензия весов |
|---|---|---|
| semantic | ||
| LibreEoMTl-sem.pt | 512 | mit |
| Instance segmentation | ||
| LibreEoMTl-seg.pt | 640 | mit |
| LibreEoMTl-seg-1280.pt | mit | |
| panoptic | ||
| LibreEoMTs-panoptic.pt | mit | |
| LibreEoMTb-panoptic.pt | mit | |
| LibreEoMTl-panoptic.pt | mit | |
Все перечисленные выше файлы уже доступны в организации 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.