SegFormer
SegFormer ist ein Transformer für semantische Segmentierung, der einen hierarchischen Mix-Transformer-Encoder (MiT) mit einem leichten reinen MLP-Decode-Head kombiniert. Er vermeidet die schweren Decoder und festen Positionskodierungen früherer Segmentierungs-Transformer. LibreYOLO unterstützt eine Aufgabe, semantische Segmentierung, in sechs Größen.
- Aufgaben
- semantic
- Größen
- Installation
pip install libreyolo- Supportstufe
- Unterstützt, seit v. Ergänzende trainierbare Modelle: Die CI bleibt grün, Funktionen kommen bei Gelegenheit hinzu.
- Upstream
- SegFormer von NVIDIA, NVIDIA Source Code License (non-commercial, research or evaluation only). Publikation, Quelle
- Lizenzen
- Code Apache-2.0, Gewichte NVIDIA Source Code License (non-commercial, research or evaluation only). Kommerzielle Nutzung
Installation
SegFormer benötigt kein optionales Zusatzpaket. Alle Importe sind in der Basisinstallation enthalten.
pip install libreyoloVorhersage
Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert.
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)libreyolo predict model=LibreSegformerb0-sem.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Trueresult.semantic_mask enthält die dichte Klassenkarte: .data ist ein Tensor
der Form (H, W) mit Klassen-IDs in der ursprünglichen Bildgröße. .classes
führt die tatsächlich vorhandenen Klassen-IDs auf. result.boxes ist None,
weil es keine instanzbezogenen Erkennungen gibt. conf und iou werden aus
Gründen der API-Parität akzeptiert, verändern die Ausgabe aber nicht. Das
Modell gibt eine Klasse pro Pixel und keine zu filternden oder zu
deduplizierenden instanzbezogenen Erkennungen zurück. Unter
Vorhersage findest du Quellen, Streaming und die Verarbeitung
von Ergebnissen.
Varianten
Es gibt sechs Größen von b0 bis b5. Bei jeder Stufe wird der Mix-Transformer-Encoder breiter und tiefer, während derselbe reine MLP-Decode-Head verwendet wird.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| semantic | ||
| LibreSegformerb0-sem.pt | other | |
| LibreSegformerb1-sem.pt | other | |
| LibreSegformerb2-sem.pt | other | |
| LibreSegformerb3-sem.pt | other | |
| LibreSegformerb4-sem.pt | other | |
| LibreSegformerb5-sem.pt | other | |
Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.
Training
train() führt standardmäßig das Fine-Tuning eines veröffentlichten
Checkpoints durch. Übergib LibreSegformer(...) stattdessen keinen
model_path. Dann wird das Modell mit zufällig initialisiertem Encoder und
Head aufgebaut und von Grund auf neu trainiert. Nur auf diesem Weg entstehen
Gewichte ohne die nicht kommerzielle Beschränkung der vortrainierten
Checkpoints (siehe Lizenzierung).
from libreyolo import LibreYOLO model = LibreYOLO("LibreSegformerb0-sem.pt")model.train(data="my-dataset.yaml", epochs=160, imgsz=512, batch=8)libreyolo train model=LibreSegformerb0-sem.pt data=my-dataset.yaml \ epochs=160 imgsz=512 batch=8from libreyolo.models.segformer.model import LibreSegformer # Ohne model_path: zufällige Initialisierung, kein Download. Der einzige Weg# zu Gewichten ohne die nicht kommerzielle Bedingung der vortrainierten Checkpoints.model = LibreSegformer(size="b0", nb_classes=150)model.train(data="my-dataset.yaml", epochs=160, imgsz=512, batch=8)libreyolo train model=LibreSegformerb0-sem.pt data=my-dataset.yaml \ epochs=160 device=0,1 batch=16Ohne Änderungen folgt der Trainer dem ADE20K-Rezept der SegFormer-Veröffentlichung: AdamW mit einer Basislernrate für das Backbone und einer zehnmal höheren Rate für den Decode-Head, Weight Decay überall außer LayerNorm und der Positionsfaltung im Mix-FFN sowie ein linearer Abfallplan mit Warmup. Die vollständige Konvergenz der größeren Größen b3 bis b5 wurde nicht validiert.
Unter Training findest du Datensätze, Datenaugmentierung, Multi-GPU und Logger.
Validierung
val() gibt ein Dictionary mit metrics/-Schlüsseln zurück: mIoU und
Pixel-Accuracy, gemessen auf einem beliebigen Datensatz in dem Format, das du
für das Training verwendet hast.
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"])libreyolo val model=LibreSegformerb0-sem.pt data=my-dataset.yamlExport
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| semantic | semantic to ONNX: unterstützt | semantic to TorchScript: unterstützt | semantic to ExecuTorch: unterstützt | semantic to TensorRT: unterstützt | semantic to OpenVINO: unterstützt | semantic to Paddle: nicht unterstützt | semantic to MNN: nicht unterstützt | semantic to RKNN: nicht unterstützt | semantic to ncnn: nicht unterstützt | semantic to TFLite: nicht unterstützt | semantic to CoreML: nicht unterstützt | semantic to Core AI: nicht unterstützt |
Ein exportiertes Artefakt wird anhand seiner Dateiendung wieder über LibreYOLO()
geladen. Eine .onnx- oder .engine-Datei verhält sich daher wie ein Checkpoint
und gibt dasselbe Results-Objekt zurück. Export führt die
Argumente auf, die von den einzelnen Formaten akzeptiert werden.
from libreyolo import LibreYOLO model = LibreYOLO("LibreSegformerb0-sem.pt")model.export(format="onnx", imgsz=512)model.export(format="tensorrt", imgsz=512, half=True)libreyolo export model=LibreSegformerb0-sem.pt format=onnx imgsz=512libreyolo export model=LibreSegformerb0-sem.pt format=tensorrt imgsz=512 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Die Factory entscheidet anhand der Dateiendung, daher wird ein Exportartefakt# wie jeder Checkpoint geladen und gibt dasselbe Results-Objekt zurück.model = LibreYOLO("LibreSegformerb0-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)Checkpoints
Alle veröffentlichten Gewichtsdateien dieser Familie.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| semantic | ||
| LibreSegformerb0-sem.pt | other | |
| LibreSegformerb1-sem.pt | other | |
| LibreSegformerb2-sem.pt | other | |
| LibreSegformerb3-sem.pt | other | |
| LibreSegformerb4-sem.pt | other | |
| LibreSegformerb5-sem.pt | other | |
Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.
Lizenzierung
Prüfe die Lizenz im Hugging-Face-Repository der konkreten Gewichte, die du herunterlädst. Jeder Checkpoint in der LibreYOLO-Organisation hat eine Lizenz, und sie ist innerhalb einer Familie nicht immer gleich. Dieses Repository ist die maßgebliche Quelle. Die Zusammenfassung unten beschreibt den Stand bei der letzten Verifizierung dieser Seite.
Dies ist eine Beschreibung der beteiligten Lizenzen und keine Rechtsberatung. Wenn die Antwort kommerziell relevant ist, lies die Lizenzen selbst und hole eigenen Rechtsrat ein.
- Originalarbeit
- SegFormer, NVIDIA
- Upstream-Lizenz
- NVIDIA Source Code License (non-commercial, research or evaluation only)
- Upstream-Quelle
- github.com/NVlabs/SegFormer
- LibreYOLO-Code
- MIT
- Gewichte
- NVIDIA Source Code License (non-commercial, research or evaluation only), erneut unter huggingface.co/LibreYOLO veröffentlicht
- Einordnung
- 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.
Encoder und Decode-Head von LibreSegformer sind eine PyTorch-Portierung der Apache-2.0-SegFormer-Implementierung aus Hugging Face Transformers und nicht von NVlabs/SegFormer. Das ursprüngliche NVIDIA-Repository wurde nie gelesen oder kopiert und wird hier nur zur Zuordnung der Autoren der Veröffentlichung genannt. Nur die vortrainierten Checkpoints oben unterliegen NVIDIAs nicht kommerzieller Beschränkung. Architektur und eigener LibreYOLO-Code bleiben vollständig MIT-lizenziert.
Zitieren
@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}
}Aus dem Zitierblock der Autoren unter github.com/NVlabs/SegFormer#citation kopiert.