SegFormer

SegFormer est un transformer de segmentation sémantique qui associe un encodeur hiérarchique Mix Transformer (MiT) à une tête de décodage légère entièrement composée de MLP. Il évite ainsi les décodeurs lourds et les encodages positionnels fixes dont avaient besoin les transformers de segmentation antérieurs. LibreYOLO le prend en charge pour une seule tâche, la segmentation sémantique, dans six tailles.

Tâches
semantic
Tailles
Installer
pip install libreyolo
Niveau de support
Pris en charge, depuis v. Modèles entraînables complémentaires : maintenus au vert dans la CI, avec des fonctionnalités ajoutées selon les occasions.
Origine
SegFormer par NVIDIA, NVIDIA Source Code License (non-commercial, research or evaluation only). Article, source
Licences
Code Apache-2.0, poids NVIDIA Source Code License (non-commercial, research or evaluation only). Usage commercial

Installer

SegFormer ne nécessite aucun extra facultatif. Tous ses imports sont inclus dans l'installation de base.

bash
pip install libreyolo

Prédire

Les poids sont téléchargés depuis Hugging Face à la première utilisation et mis en cache localement.

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 contient la carte de classes dense\u00a0: .data est un tenseur (H, W) d'identifiants de classe à la taille de l'image d'origine, et .classes énumère les identifiants de classe réellement présents. result.boxes vaut None, puisqu'il n'existe aucune détection par instance. conf et iou sont acceptés pour assurer la parité de l'API, mais ils ne modifient pas la sortie\u00a0: le modèle renvoie une classe par pixel et non des détections par instance à filtrer ou dédupliquer. Consultez la prédiction pour les sources, le streaming et la gestion des résultats.

Variantes

Six tailles, de b0 à b5, élargissent et approfondissent l'encodeur Mix Transformer à chaque étape tout en conservant la même conception de tête de décodage entièrement composée de MLP.

Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.

Entraîner

Par défaut, train() effectue le fine-tuning d'un checkpoint publié. Si vous ne transmettez aucun model_path à LibreSegformer(...), il construit au contraire un encodeur et une tête initialisés aléatoirement et les entraîne à partir de zéro. C'est la seule voie vers des poids dépourvus de la restriction non commerciale des checkpoints pré-entraînés (consultez la section Licence).

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
À partir de zéro
from libreyolo.models.segformer.model import LibreSegformer # Aucun model_path : initialisation aléatoire, aucun téléchargement. C'est la# seule voie vers des poids exempts de la clause non commerciale des checkpoints pré-entraînés.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

Sans configuration supplémentaire, le trainer suit la recette ADE20K de l'article SegFormer\u00a0: AdamW au learning rate de base du backbone, une tête de décodage entraînée à un learning rate 10x supérieur, un weight decay partout sauf sur LayerNorm et la convolution positionnelle Mix-FFN, ainsi qu'un planning de décroissance linéaire avec warmup. La convergence des grandes tailles, de b3 à b5, n'a pas été validée de bout en bout.

Consultez l'entraînement pour les datasets, l'augmentation, le multi-GPU et les loggers.

Valider

val() renvoie un dictionnaire de clés metrics/\u00a0: mIoU et exactitude par pixel, mesurées sur tout dataset au format utilisé pour l'entraînement.

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

Exporter

TâcheONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX : pris en chargesemantic to TorchScript : pris en chargesemantic to ExecuTorch : pris en chargesemantic to TensorRT : pris en chargesemantic to OpenVINO : pris en chargesemantic to Paddle : non pris en chargesemantic to MNN : non pris en chargesemantic to RKNN : non pris en chargesemantic to ncnn : non pris en chargesemantic to TFLite : non pris en chargesemantic to CoreML : non pris en chargesemantic to Core AI : non pris en charge

Un artefact exporté se recharge dans LibreYOLO() grâce au suffixe de son fichier. Un fichier .onnx ou .engine se comporte donc comme un checkpoint et renvoie les mêmes Results. La page Export énumère les arguments acceptés par chaque 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
Utiliser le fichier exporté
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La fabrique détermine le chemin selon le suffixe du fichier ; un artefact exporté se charge# donc comme tout checkpoint et renvoie le même objet Results.model = LibreYOLO("LibreSegformerb0-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Checkpoints

Tous les fichiers de poids publiés pour cette famille.

Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.

Licence

Vérifiez la licence dans le dépôt Hugging Face des poids précis que vous téléchargez. Chaque checkpoint de l<link>organisation LibreYOLO</link> en possède une, et elles ne sont pas toujours identiques au sein dune même famille. Ce dépôt fait autorité ; le résumé ci-dessous décrit les conditions applicables lors de la dernière vérification de cette page.

Ceci décrit les licences concernées et ne constitue pas un conseil juridique. Si la réponse a une importance commerciale, lisez vous-même les licences et consultez votre propre avocat.

Travail d'origine
SegFormer, NVIDIA
Licence du projet d'origine
NVIDIA Source Code License (non-commercial, research or evaluation only)
Source du projet d'origine
github.com/NVlabs/SegFormer
Code de LibreYOLO
MIT
Poids
NVIDIA Source Code License (non-commercial, research or evaluation only), republiés sur huggingface.co/LibreYOLO
Interprétation
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'encodeur et la tête de décodage de LibreSegformer sont un portage PyTorch de l'implémentation SegFormer sous Apache-2.0 de Hugging Face Transformers, et non de NVlabs/SegFormer\u00a0: le dépôt d'origine de NVIDIA n'a jamais été lu ni copié, et n'est cité ici que pour attribuer l'article à ses auteurs. Seuls les checkpoints pré-entraînés ci-dessus sont soumis à la restriction non commerciale de NVIDIA\u00a0; l'architecture et le code propre à LibreYOLO restent entièrement sous licence MIT.

Citation

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

Copié depuis le bloc de citation des auteurs sur github.com/NVlabs/SegFormer#citation.

Vérifié avec LibreYOLO v1.5.0. Les tableaux de support, les checkpoints et les chiffres de benchmark de cette page sont générés à partir de la bibliothèque publiée et des poids publiés, et non rédigés à la main.