Xuban's picture
Add measured ADE20K mIoU (LibreYOLO val protocol)
6bb341f verified
|
Raw
History Blame Contribute Delete
3.7 kB
metadata
license: other
license_name: nvidia-source-code-license-segformer
license_link: https://github.com/NVlabs/SegFormer/blob/master/LICENSE
library_name: libreyolo
pipeline_tag: image-segmentation
datasets:
  - scene_parse_150
tags:
  - semantic-segmentation
  - segformer
  - ade20k
  - non-commercial

LibreSegformerb3-sem

SegFormer MiT-b3 (47.3M params) with the all-MLP decode head, fine-tuned on ADE20K (150 classes) at 512x512, repackaged for LibreYOLO.

⚠️ NON-COMMERCIAL WEIGHTS

These weights are not covered by LibreYOLO's permissive license. They derive from NVIDIA's SegFormer release, licensed under the NVIDIA Source Code License, which restricts use to non-commercial research or evaluation purposes only (Section 3.3). That restriction is carried into every derivative work (Section 3.2) and it binds you, the downloader, not just LibreYOLO.

The LibreYOLO code and the SegFormer architecture are unrestricted, as is any model you train from scratch with them. Only these pretrained weights are limited. For commercial use, train from scratch: LibreSegformer(size="b3", nb_classes=N).train(data="your.yaml").

Usage

from libreyolo import LibreSegformer

model = LibreSegformer("LibreSegformerb3-sem.pt")
results = model.predict("image.jpg")
mask = results[0].semantic_mask      # dense 150-class ADE20K mask

Source

Converted from nvidia/segformer-b3-finetuned-ade-512-512. Copyright (c) 2021, NVIDIA Corporation & affiliates. Licensed under the NVIDIA Source Code License for SegFormer.

Architecture from "SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers" (Xie et al., NeurIPS 2021). LibreYOLO's implementation is an independent port of the Apache-2.0 reference in HuggingFace Transformers, with no runtime dependency on it.

Modifications

State-dict key remapping only (upstream segformer. encoder prefix becomes encoder.), plus LibreYOLO checkpoint metadata. Learned parameters are unchanged: the converted checkpoint reproduces upstream logits bit-exactly (max abs difference 0.0 in float64). See weights/convert_segformer_weights.py.

Accuracy

ADE20K val (2000 images), single scale:

mIoU
LibreYOLO model.val(data="ade20k.yaml") 44.5
Upstream authors, reported 49.4

LibreYOLO's validator letterboxes to a fixed square canvas; the authors evaluate with a ratio-preserving resize, which is worth roughly a point. The converted weights reproduce the upstream model's logits bit-exactly (max abs difference 0.0 in float64), so any remaining difference is evaluation protocol, not conversion.

Note on this checkpoint: b3 measures below b2 (44.5 vs 45.0) and well under its published 49.4. This is inherited from the upstream nvidia/segformer-b3-finetuned-ade-512-512 weights, not from the conversion: LibreYOLO reproduces the upstream model's logits bit-exactly, and the same deficit appears when the upstream checkpoint is run through transformers directly, under both a letterbox and a ratio-preserving evaluation. If you want the best accuracy per parameter, prefer b2 (smaller and better) or b4.

License

NVIDIA Source Code License for SegFormer (non-commercial). See LICENSE and NOTICE.