SegFormer

SegFormer to transformer do segmentacji semantycznej, który łączy hierarchiczny enkoder Mix Transformer (MiT) z lekkim dekoderem opartym wyłącznie na MLP, unikając ciężkich dekoderów i stałych kodowań pozycyjnych potrzebnych we wcześniejszych transformerach do segmentacji. LibreYOLO obsługuje go w jednym zadaniu, segmentacji semantycznej, w sześciu rozmiarach.

Zadania
semantic
Rozmiary
Instalacja
pip install libreyolo
Poziom obsługi
Obsługiwany, od wersji v. Dodatkowe trenowalne modele: testy CI pozostają zielone, a funkcje są dodawane w miarę możliwości.
Projekt źródłowy
SegFormer, autorzy: NVIDIA, licencja: NVIDIA Source Code License (non-commercial, research or evaluation only). Publikacja, kod źródłowy
Licencje
Kod: Apache-2.0, wagi: NVIDIA Source Code License (non-commercial, research or evaluation only). Użycie komercyjne

Instalacja

SegFormer nie wymaga opcjonalnych dodatków. Wszystkie importowane przez niego 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.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreSegformerb0-sem.pt")result = model(SAMPLE_IMAGE, save=True) mask = result.semantic_maskprint(mask.data.shape, mask.classes)
CLI
libreyolo predict model=LibreSegformerb0-sem.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

result.semantic_mask zawiera gęstą mapę klas: .data to tensor (H, W) z identyfikatorami klas w oryginalnym rozmiarze obrazu, a .classes zawiera identyfikatory klas rzeczywiście obecnych na obrazie. result.boxes ma wartość None, ponieważ nie ma detekcji poszczególnych instancji. Parametry conf i iou są przyjmowane dla zgodności API, ale nie zmieniają wyniku: model zwraca jedną klasę na piksel, a nie detekcje instancji wymagające filtrowania lub usuwania duplikatów. Informacje o źródłach, strumieniowaniu i obsłudze wyników znajdziesz w sekcji predykcja.

Warianty

Dostępnych jest sześć rozmiarów, od b0 do b5. Każdy kolejny poszerza i pogłębia enkoder Mix Transformer, zachowując tę samą konstrukcję dekodera opartą wyłącznie na MLP.

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

Trenowanie

Metoda train() domyślnie dostraja opublikowany punkt kontrolny. Zamiast tego wywołaj LibreSegformer(...) bez model_path, aby zbudować model z losowo zainicjalizowanym enkoderem i głowicą oraz trenować go od podstaw. Jest to jedyna droga do wag nieobjętych niekomercyjnym ograniczeniem wstępnie wytrenowanych punktów kontrolnych (zobacz Licencjonowanie).

Python (dostrajanie)
from libreyolo import LibreYOLO model = LibreYOLO("LibreSegformerb0-sem.pt")model.train(data="my-dataset.yaml", epochs=160, imgsz=512, batch=8)
CLI
libreyolo train model=LibreSegformerb0-sem.pt data=my-dataset.yaml \  epochs=160 imgsz=512 batch=8
Od podstaw
from libreyolo.models.segformer.model import LibreSegformer # Brak model_path oznacza losową inicjalizację bez pobierania. To jedyna# droga do wag wolnych od niekomercyjnych warunków wstępnie wytrenowanych punktów kontrolnych.model = LibreSegformer(size="b0", nb_classes=150)model.train(data="my-dataset.yaml", epochs=160, imgsz=512, batch=8)
Wiele GPU
libreyolo train model=LibreSegformerb0-sem.pt data=my-dataset.yaml \  epochs=160 device=0,1 batch=16

Przy ustawieniach domyślnych trener stosuje konfigurację ADE20K z publikacji SegFormer: AdamW z podstawową szybkością uczenia dla backbone i głowicą dekodera trenowaną z szybkością 10 razy większą, zanik wag wszędzie poza LayerNorm i konwolucją pozycyjną Mix-FFN oraz liniowy harmonogram zaniku z rozgrzewką. Zbieżność większych rozmiarów, od b3 do b5, nie została zweryfikowana kompleksowo.

Informacje o zbiorach danych, augmentacji, wielu GPU i loggerach znajdziesz w sekcji trenowanie.

Walidacja

Metoda val() zwraca słownik kluczy metrics/: mIoU i dokładność pikselową, mierzone na dowolnym zbiorze danych w formacie użytym do trenowania.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSegformerb0-sem.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mIoU"])print(metrics["metrics/pixel_accuracy"])
CLI
libreyolo val model=LibreSegformerb0-sem.pt data=my-dataset.yaml

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: obsługiwanesemantic to TorchScript: obsługiwanesemantic to ExecuTorch: obsługiwanesemantic 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

Wyeksportowany artefakt jest ponownie ładowany przez LibreYOLO() na podstawie rozszerzenia pliku, więc plik .onnx lub .engine zachowuje się jak punkt kontrolny i zwraca ten sam obiekt Results. Sekcja eksport zawiera argumenty akceptowane przez każdy format.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSegformerb0-sem.pt")model.export(format="onnx", imgsz=512)model.export(format="tensorrt", imgsz=512, half=True)
CLI
libreyolo export model=LibreSegformerb0-sem.pt format=onnx imgsz=512libreyolo export model=LibreSegformerb0-sem.pt format=tensorrt imgsz=512 half=True
Użycie wyeksportowanego pliku
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka wybiera ścieżkę na podstawie rozszerzenia pliku, dlatego# artefakt ładuje się jak punkt kontrolny i zwraca ten sam obiekt Results.model = LibreYOLO("LibreSegformerb0-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Punkty kontrolne

Wszystkie opublikowane pliki wag dla tej rodziny.

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

Licencjonowanie

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
SegFormer, NVIDIA
Licencja projektu źródłowego
NVIDIA Source Code License (non-commercial, research or evaluation only)
Kod źródłowy projektu
github.com/NVlabs/SegFormer
Kod LibreYOLO
MIT
Wagi
NVIDIA Source Code License (non-commercial, research or evaluation only), ponownie opublikowane w huggingface.co/LibreYOLO
Interpretacja
The pretrained ADE20K checkpoints LibreYOLO hosts for this family are converted from NVIDIA's official SegFormer release under the NVIDIA Source Code License. That license permits redistributing the weights and derivative works, provided the license text and attribution notices travel with them, but it limits USE to non-commercial research or evaluation, a restriction its Section 3.2 carries forward into every derivative and that cannot be relicensed away: these weights are NOT covered by LibreYOLO's normal permissive terms, and that limitation binds you, not just LibreYOLO. LibreYOLO's own SegFormer implementation is a separate Apache-2.0 port of Hugging Face Transformers' code, unrelated to NVIDIA's repository, so a model you train from scratch with LibreSegformer(...).train(...) carries none of this restriction.

Enkoder i głowica dekodera LibreSegformer są portem implementacji SegFormer z Hugging Face Transformers na licencji Apache-2.0, a nie portem NVlabs/SegFormer. Oryginalnego repozytorium NVIDIA nigdy nie odczytywano ani nie kopiowano, a wymieniono je tutaj wyłącznie w celu przypisania autorstwa autorom publikacji. Niekomercyjne ograniczenie NVIDIA dotyczy tylko powyższych wstępnie wytrenowanych punktów kontrolnych. Architektura i własny kod LibreYOLO pozostają w całości na licencji MIT.

Cytowanie

@inproceedings{xie2021segformer,
  title={SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers},
  author={Xie, Enze and Wang, Wenhai and Yu, Zhiding and Anandkumar, Anima and Alvarez, Jose M and Luo, Ping},
  booktitle={Neural Information Processing Systems (NeurIPS)},
  year={2021}
}

Skopiowano z bloku cytowania autorów w github.com/NVlabs/SegFormer#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.