SegFormer

SegFormer è un transformer per la segmentazione semantica che unisce un encoder gerarchico Mix Transformer (MiT) a una testa di decodifica leggera fatta di soli MLP, evitando i decoder pesanti e le codifiche posizionali fisse di cui avevano bisogno i transformer di segmentazione precedenti. LibreYOLO lo supporta per un solo task, la segmentazione semantica, in sei taglie.

Task
semantic
Dimensioni
Installa
pip install libreyolo
Livello di supporto
Supportato, dalla v. Modelli addestrabili di supporto: mantenuti funzionanti nella CI, ricevono nuove funzionalità quando possibile.
Origine
SegFormer di NVIDIA, NVIDIA Source Code License (non-commercial, research or evaluation only). Articolo, sorgente
Licenze
Codice Apache-2.0, pesi NVIDIA Source Code License (non-commercial, research or evaluation only). Uso commerciale

Installazione

SegFormer non richiede nessun extra opzionale. Tutto ciò che importa è già nell'installazione di base.

bash
pip install libreyolo

Predizione

I pesi vengono scaricati da Hugging Face al primo utilizzo e restano nella cache locale.

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 porta la mappa densa delle classi: .data è un tensore (H, W) di id di classe alla dimensione originale dell'immagine, e .classes elenca gli id di classe effettivamente presenti. result.boxes è None, perché non ci sono rilevamenti per singola istanza. conf e iou sono accettati per parità di API ma non cambiano l'output: il modello restituisce una classe per pixel, non rilevamenti per istanza da filtrare o deduplicare. Vedi predizione per sorgenti, streaming e gestione dei risultati.

Varianti

Sei taglie, da b0 a b5, che allargano e approfondiscono l'encoder Mix Transformer a ogni passo mantenendo lo stesso design della testa di decodifica fatta di soli MLP.

Oggi tutti i file elencati sopra sono presenti nell<link>organizzazione LibreYOLO</link> e vengono scaricati al primo utilizzo.

Addestramento

Per impostazione predefinita train() fa fine-tuning di un checkpoint pubblicato. Se invece non passi nessun model_path a LibreSegformer(...), il modello viene costruito con encoder e testa inizializzati a caso e addestrato da zero: è l'unica strada per ottenere pesi che non portano nessuna delle restrizioni non commerciali dei checkpoint preaddestrati (vedi Licenze).

Python (fine-tuning)
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
Da zero
from libreyolo.models.segformer.model import LibreSegformer # Senza model_path: init casuale, nessun download. L'unica via a pesi# liberi dalla clausola non commerciale dei checkpoint preaddestrati.model = LibreSegformer(size="b0", nb_classes=150)model.train(data="my-dataset.yaml", epochs=160, imgsz=512, batch=8)
Multi-GPU
libreyolo train model=LibreSegformerb0-sem.pt data=my-dataset.yaml \  epochs=160 device=0,1 batch=16

Se lo lasci ai valori predefiniti, il trainer segue la ricetta ADE20K del paper di SegFormer: AdamW con un learning rate base per il backbone e la testa di decodifica addestrata a 10x quel valore, weight decay ovunque tranne che sui LayerNorm e sulla convoluzione posizionale del Mix-FFN, e uno schedule a decadimento lineare con warmup. La convergenza per le taglie più grandi, da b3 a b5, non è stata validata end to end.

Vedi addestramento per dataset, augmentation, multi-GPU e logger.

Validazione

val() restituisce un dizionario di chiavi metrics/: mIoU e accuratezza per pixel, misurate su qualsiasi dataset nel formato con cui hai addestrato.

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

Esportazione

TaskONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: supportatosemantic to TorchScript: supportatosemantic to ExecuTorch: supportatosemantic to TensorRT: supportatosemantic to OpenVINO: supportatosemantic to Paddle: non supportatosemantic to MNN: non supportatosemantic to RKNN: non supportatosemantic to ncnn: non supportatosemantic to TFLite: non supportatosemantic to CoreML: non supportatosemantic to Core AI: non supportato

Un artefatto esportato si ricarica con LibreYOLO() in base al suffisso del file, quindi un file .onnx o .engine si comporta come un checkpoint e restituisce lo stesso Results. Esportazione elenca gli argomenti accettati da ogni formato.

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
Usare il file esportato
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory smista in base al suffisso del file, quindi un artefatto# esportato si carica come un checkpoint qualsiasi e restituisce lo# stesso oggetto Results.model = LibreYOLO("LibreSegformerb0-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Checkpoint

Tutti i file di pesi pubblicati per questa famiglia.

Oggi tutti i file elencati sopra sono presenti nell<link>organizzazione LibreYOLO</link> e vengono scaricati al primo utilizzo.

Licenze

Controlla la licenza nel repository Hugging Face degli specifici pesi che scarichi. Ogni checkpoint nell<link>organizzazione LibreYOLO</link> ne include una e non è sempre la stessa per tutta la famiglia. Quel repository è la fonte autorevole; il riepilogo seguente descrive le condizioni applicabili al momento dellultima verifica di questa pagina.

Questa è una descrizione delle licenze coinvolte, non una consulenza legale. Se la risposta è importante a fini commerciali, leggi personalmente le licenze e chiedi una consulenza indipendente.

Lavoro originale
SegFormer, NVIDIA
Licenza upstream
NVIDIA Source Code License (non-commercial, research or evaluation only)
Codice LibreYOLO
MIT
Pesi
NVIDIA Source Code License (non-commercial, research or evaluation only), ripubblicati su huggingface.co/LibreYOLO
Interpretazione
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.

L'encoder e la testa di decodifica di LibreSegformer sono un port in PyTorch dell'implementazione SegFormer di Hugging Face Transformers, sotto licenza Apache-2.0, e non di NVlabs/SegFormer: il repository originale di NVIDIA non è mai stato letto né copiato, ed è citato qui solo per attribuzione agli autori del paper. Solo i checkpoint preaddestrati qui sopra portano la restrizione non commerciale di NVIDIA; l'architettura e il codice di LibreYOLO restano MIT dall'inizio alla fine.

Citazione

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

Copiato dal blocco di citazione degli autori disponibile su github.com/NVlabs/SegFormer#citation.

Verificato con LibreYOLO v1.5.0. Le tabelle di supporto, i checkpoint e i dati dei benchmark in questa pagina vengono generati dalla libreria rilasciata e dai pesi pubblicati, non scritti a mano.