EoMT

Sieć segmentacji oparta na prostym transformerze wizyjnym bez dedykowanego dekodera pikseli: dodatkowe wyuczone zapytania dodane do samego enkodera przewidują maski. LibreYOLO obsługuje ją do segmentacji semantycznej, instancji i panoptycznej.

Zadania
semantic, instance segmentation, panoptic
Rozmiary
s, b, l at 512 px
Instalacja
pip install libreyolo
Poziom obsługi
Tylko inferencja, od wersji v. Tylko predykcja, walidacja i eksport. Funkcje trenowania nie mają zastosowania.
Projekt źródłowy
EoMT, autorzy: TU Eindhoven, Mobile Perception Systems Lab, licencja: MIT. Publikacja, kod źródłowy
Licencje
Kod: MIT, wagi: MIT. Użycie komercyjne

Instalacja

EoMT nie wymaga żadnego opcjonalnego dodatku. Wszystkie importowane elementy znajdują się w instalacji podstawowej.

bash
pip install libreyolo

Predykcja

Przy pierwszym użyciu wagi są pobierane z Hugging Face i zapisywane w lokalnej pamięci podręcznej. Sufiks zadania w nazwie pliku (-sem, -seg, -panoptic) wybiera zadanie, a LibreYOLO() wnioskuje je z tej nazwy, więc argument task= nie jest potrzebny.

Segmentacja semantyczna
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), identyfikatory klasprint(mask.classes)      # posortowane identyfikatory klas obecnych na obrazie
Segmentacja instancji
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Sufiks -seg w nazwie pliku wybiera zadanie segmentacji instancji,# dlatego nie trzeba podawać argumentu zadania.model = LibreYOLO("LibreEoMTl-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.boxes.xyxy)print(result.masks.data.shape)
Segmentacja panoptyczna
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), identyfikatory segmentówprint(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

Segmentacja semantyczna wypełnia result.semantic_mask, czyli tablicę identyfikatorów klas (H, W) w polu .data. Segmentacja instancji wypełnia result.boxes i result.masks o takim samym kształcie, jaki zwracają inne rodziny segmentacji. Segmentacja panoptyczna wypełnia result.panoptic: mapę identyfikatorów segmentów (H, W) w polu .data oraz .segments_info, listę słowników {"id", "category_id"}, po jednym na segment. Argument conf filtruje wybór zapytań. iou nie ma wpływu na zadanie semantyczne, ponieważ wybiera ono argmax dla każdego piksela bez etapu NMS. Więcej informacji o źródłach, streamingu i obsłudze wyników zawiera strona predykcji.

Warianty

Dostępne są trzy rozmiary enkodera, s/b/l, wszystkie z backbone DINOv2. Checkpoint semantyczny wytrenowano na ADE20K przy 512 px, a checkpointy instancji i panoptyczny na COCO przy 640 px. Drugi checkpoint instancji wytrenowano przy 1280 px. Projekt źródłowy publikuje wagi segmentacji instancji z DINOv2 tylko w rozmiarze l. Rozmiary s i b są dostępne wyłącznie dla segmentacji semantycznej i panoptycznej. Warianty EoMT z backbone DINOv3 istnieją w projekcie źródłowym, ale nie są tu udostępniane, ponieważ zależą od kontrolowanych, niekomercyjnych wag DINOv3.

LibreYOLO nie trenuje EoMT: train() zgłasza NotImplementedError dla tej rodziny, którą powyższy poziom obsługi oznacza jako przeznaczoną wyłącznie do inferencji.

Walidacja

val() wybiera ścieżkę według zadania. Segmentacja semantyczna zwraca metrics/mIoU i metrics/pixel_accuracy. Segmentacja instancji zwraca te same klucze mAP masek i ramek co inne rodziny segmentacji. Segmentacja panoptyczna zwraca Panoptic Quality jako metrics/PQ, podzielone na metrics/SQ (jakość segmentacji) i metrics/RQ (jakość rozpoznawania), a także metrics/PQ_things i metrics/PQ_stuff.

Segmentacja semantyczna
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"])
Segmentacja instancji
from libreyolo import LibreYOLO model = LibreYOLO("LibreEoMTl-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # maskiprint(metrics["metrics/mAP50-95(B)"])   # ramki
Segmentacja panoptyczna
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

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: obsługiwanesemantic to TorchScript: obsługiwanesemantic to ExecuTorch: brak obsługisemantic to TensorRT: obsługiwanesemantic to OpenVINO: obsługiwanesemantic to Paddle: brak obsługisemantic to MNN: brak obsługisemantic to RKNN: brak obsługisemantic to ncnn: brak obsługisemantic to TFLite: brak obsługisemantic to CoreML: brak obsługisemantic to Core AI: brak obsługi
Instance segmentationInstance segmentation to ONNX: brak obsługiInstance segmentation to TorchScript: brak obsługiInstance segmentation to ExecuTorch: brak obsługiInstance segmentation to TensorRT: brak obsługiInstance segmentation to OpenVINO: brak obsługiInstance segmentation to Paddle: brak obsługiInstance segmentation to MNN: brak obsługiInstance segmentation to RKNN: brak obsługiInstance segmentation to ncnn: brak obsługiInstance segmentation to TFLite: brak obsługiInstance segmentation to CoreML: brak obsługiInstance segmentation to Core AI: brak obsługi
panopticpanoptic to ONNX: brak obsługipanoptic to TorchScript: brak obsługipanoptic to ExecuTorch: brak obsługipanoptic to TensorRT: brak obsługipanoptic to OpenVINO: brak obsługipanoptic to Paddle: brak obsługipanoptic to MNN: brak obsługipanoptic to RKNN: brak obsługipanoptic to ncnn: brak obsługipanoptic to TFLite: brak obsługipanoptic to CoreML: brak obsługipanoptic to Core AI: brak obsługi

Obecnie eksportowane jest tylko zadanie semantyczne. Wywołanie export() dla segmentacji instancji lub panoptycznej zgłasza NotImplementedError, ponieważ ich wyjście zapytań i masek nie ma jeszcze kontraktu eksportu środowiska uruchomieniowego. Wyeksportowany artefakt semantyczny jest ponownie ładowany przez LibreYOLO() na podstawie rozszerzenia pliku, więc plik .onnx lub .engine zachowuje się jak checkpoint i zwraca ten sam obiekt 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
Użycie wyeksportowanego pliku
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka wybiera ścieżkę na podstawie rozszerzenia pliku, więc wyeksportowany artefakt# ładuje się jak każdy checkpoint i zwraca ten sam obiekt Results.model = LibreYOLO("LibreEoMTl-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Checkpointy

Wszystkie opublikowane pliki wag dla tej rodziny.

PlikWejście (px)Licencja wag
semantic
LibreEoMTl-sem.pt512mit
Instance segmentation
LibreEoMTl-seg.pt640mit
LibreEoMTl-seg-1280.ptmit
panoptic
LibreEoMTs-panoptic.ptmit
LibreEoMTb-panoptic.ptmit
LibreEoMTl-panoptic.ptmit

Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.

Licencja

Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.

To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.

Oryginalna praca
EoMT, TU Eindhoven, Mobile Perception Systems Lab
Licencja projektu źródłowego
MIT
Kod źródłowy projektu
github.com/tue-mps/eomt
Kod LibreYOLO
MIT
Wagi
MIT, ponownie opublikowane w huggingface.co/LibreYOLO
Interpretacja
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.

Cytowanie

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

Skopiowano z bloku cytowania autorów w github.com/tue-mps/eomt#bibtex-citation.

Zweryfikowano z LibreYOLO v1.5.0. Tabele obsługi, checkpointy i wyniki benchmarków na tej stronie są generowane na podstawie wydanej biblioteki i opublikowanych wag, a nie wpisywane ręcznie.