SegFormer

SegFormer es un transformer de segmentación semántica que combina un encoder jerárquico Mix Transformer (MiT) con una cabeza de decodificación all-MLP ligera, evitando los decoders pesados y las codificaciones posicionales fijas que necesitaban los transformers de segmentación anteriores. LibreYOLO lo soporta para una sola tarea, segmentación semántica, en seis tamaños.

Tareas
semantic
Tamaños
Instalación
pip install libreyolo
Nivel de compatibilidad
Compatible, desde v. Modelos entrenables de apoyo: se mantienen operativos en CI y reciben funciones cuando surge la oportunidad.
Proyecto original
SegFormer de NVIDIA, NVIDIA Source Code License (non-commercial, research or evaluation only). Artículo, fuente
Licencias
Código Apache-2.0, pesos NVIDIA Source Code License (non-commercial, research or evaluation only). Uso comercial

Instalación

SegFormer no necesita ningún extra opcional. Todo lo que importa está en la instalación base.

bash
pip install libreyolo

Predicción

Los pesos se descargan de Hugging Face en el primer uso y se guardan en la caché local.

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 lleva el mapa denso de clases: .data es un tensor (H, W) de ids de clase al tamaño original de la imagen, y .classes enumera los ids de clase realmente presentes. result.boxes es None, ya que no hay detecciones por instancia. conf e iou se aceptan por paridad de API pero no cambian la salida: el modelo devuelve una clase por píxel, no detecciones por instancia que filtrar o deduplicar. Consulta predicción para fuentes, streaming y manejo de resultados.

Variantes

Seis tamaños, de b0 a b5, que ensanchan y profundizan el encoder Mix Transformer en cada paso manteniendo el mismo diseño de cabeza de decodificación all-MLP.

Todos los archivos anteriores existen hoy en la organización de LibreYOLO y se descargan la primera vez que se usan.

Entrenamiento

train() hace fine-tuning de un checkpoint publicado por defecto. Si en su lugar no le pasas ningún model_path a LibreSegformer(...), el modelo se construye con el encoder y la cabeza inicializados al azar y entrena desde cero, la única vía a pesos que no arrastran ninguna restricción no comercial de los checkpoints preentrenados (consulta Licencia).

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
Desde cero
from libreyolo.models.segformer.model import LibreSegformer # Sin model_path: inicialización aleatoria, no se descarga nada. La única# vía a pesos libres del término no comercial de los checkpoints# preentrenados.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

Si lo dejas como está, el trainer sigue la receta de ADE20K del paper de SegFormer: AdamW con un learning rate base para el backbone y la cabeza de decodificación entrenada a 10x esa tasa, weight decay en todas partes excepto en LayerNorm y en la convolución posicional del Mix-FFN, y un schedule de decaimiento lineal con warmup. La convergencia de los tamaños más grandes, de b3 a b5, no se ha validado de principio a fin.

Consulta entrenamiento para datasets, aumento de datos, multi-GPU y loggers.

Validación

val() devuelve un diccionario de claves metrics/: mIoU y precisión por píxel, medidos contra cualquier dataset en el formato con el que entrenaste.

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

Exportación

TareaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: compatiblesemantic to TorchScript: compatiblesemantic to ExecuTorch: compatiblesemantic to TensorRT: compatiblesemantic to OpenVINO: compatiblesemantic to Paddle: no compatiblesemantic to MNN: no compatiblesemantic to RKNN: no compatiblesemantic to ncnn: no compatiblesemantic to TFLite: no compatiblesemantic to CoreML: no compatiblesemantic to Core AI: no compatible

Un artefacto exportado se vuelve a cargar con LibreYOLO() según su extensión de archivo, así que un archivo .onnx o .engine se comporta como un checkpoint y devuelve el mismo Results. Exportación enumera los argumentos que acepta cada 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
Usar el archivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factoría enruta según la extensión del archivo, así que un artefacto# exportado se carga como cualquier checkpoint y devuelve el mismo objeto# Results.model = LibreYOLO("LibreSegformerb0-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Checkpoints

Todos los archivos de pesos publicados de esta familia.

Todos los archivos anteriores existen hoy en la organización de LibreYOLO y se descargan la primera vez que se usan.

Licencia

Comprueba la licencia en el repositorio de Hugging Face de los pesos concretos que descargues. Cada checkpoint de la organización de LibreYOLO incluye una, y no siempre es la misma en toda una familia. Ese repositorio es la fuente autorizada; el resumen siguiente describe qué se aplicaba cuando se verificó esta página por última vez.

Esta es una descripción de las licencias implicadas, no asesoramiento legal. Si la respuesta es importante a nivel comercial, lee las licencias y busca tu propio asesoramiento.

Trabajo original
SegFormer, NVIDIA
Licencia del proyecto original
NVIDIA Source Code License (non-commercial, research or evaluation only)
Fuente del proyecto original
github.com/NVlabs/SegFormer
Código de LibreYOLO
MIT
Pesos
NVIDIA Source Code License (non-commercial, research or evaluation only), republicados en huggingface.co/LibreYOLO
Interpretación
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.

El encoder y la cabeza de decodificación de LibreSegformer son un port a PyTorch de la implementación de SegFormer de Hugging Face Transformers, con licencia Apache-2.0, y no de NVlabs/SegFormer: el repositorio original de NVIDIA nunca se leyó ni se copió, y se cita aquí solo para atribuir el trabajo a los autores del paper. Solo los checkpoints preentrenados de arriba llevan la restricción no comercial de NVIDIA; la arquitectura y el propio código de LibreYOLO siguen siendo MIT en todo momento.

Cita

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

Copiado del bloque de cita de los autores en github.com/NVlabs/SegFormer#citation.

Verificado con LibreYOLO v1.5.0. Las tablas de compatibilidad, los checkpoints y las cifras de rendimiento de esta página se generan a partir de la biblioteca publicada y los pesos publicados; no se escriben a mano.