EoMT
Мережа сегментації на основі звичайного візуального трансформера без спеціалізованого піксельного декодера: маски передбачають додаткові навчені запити, додані до самого кодера. 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 не потребує додаткових пакетів. Усі його імпорти входять до базового встановлення.
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) # відсортовані ідентифікатори класів, наявних на зображенніfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Суфікс -seg у назві файлу вибирає завдання екземплярів, тому# аргумент завдання тут не потрібен.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.