CW-BASS v2 — Pascal VOC (Saturation-Aware Pseudo-Label Selection)

Demo Project page Code

CW-BASS v2 model familyPascal VOC · Cityscapes · ADE20K · 🤗 Interactive demo · 🌐 Project page · 💻 Code

CW-BASS v2 on Pascal VOC — input (left) and predicted segmentation overlay (right)

TL;DR. Semi-supervised segmentation turns on one question: which pseudo-labels to trust, and how much. Selection rules built for the noisy, under-confident ResNet teachers of the day (dynamic thresholds, per-class curricula, soft weights) can hurt a strong DINOv2 teacher whose confidence saturates. CW-BASS v2 is a saturation-aware selection method: it pairs confidence-weighted, boundary-aware self-training with a held-out calibration slice (an unbiased noise estimate) and a self-adaptive confidence floor, combined by a one-pass reliability gate. The gate measures π_kept = Pr[correct | c ≥ τ] on the held-out slice and uses strict filtering when π_kept ≥ τ (the confident set is at least as reliable as the confidence it demands), the adaptive floor otherwise. It is tuned to no mIoU, yet across six DINOv2 teachers it picks the accuracy-optimal rule blind.

On Pascal VOC the teacher is saturated (98% of pixels ≥ 0.95, π_kept ≈ 98%), so the gate selects strict filtering — which on this teacher is the UniMatch V2 operating point. This checkpoint is the model that rule produces.

  • Backbone: DINOv2-Base (ViT-B/14), fine-tuned end-to-end, + DPT-lite decoder, 21 Pascal classes.
  • This checkpoint: Pascal VOC 1/8 split (183 labeled images), seed 0, EMA teacher (eval) weights.
  • Rule the gate selected here: strict (τ = 0.95).

Results (honest framing)

Split CW-BASS v2 (gate→strict) UniMatch V2-B (reported)
1/16 (92) 84.47 86.3
1/8 (183) 87.40 87.9
1/4 (366) 88.59 88.9
  • The 1/8 headline 87.40 is the seed-0 run; the three-seed mean is 86.2 ± 1.9 (per-seed 87.40 / 84.09 / 87.08 — two seeds reach the strict mode, one stalls). We report the mean, not a best-of-seeds pick.
  • The released file is the EMA teacher of seed 0 (EMA mIoU ≈ 87.3). 1/16 and 1/4 are single seed.
  • CW-BASS v2 sits in the top DINOv2 tier, trailing only UniMatch V2-B's reported numbers (< 0.5 mIoU at 1/8). The accuracy jump over the ResNet-era field tracks the backbone; on this saturated teacher CW-BASS v2's contribution is that its gate selects the right rule blind, not a different training run. Where CW-BASS v2's selection genuinely wins is the confidently-unreliable ADE20K teacher (+1.5 over strict).

Usage

import torch
from torchvision import transforms as T
from PIL import Image

from model.semseg.dino_segmentor import DINOv2Segmentor   # from the CW-BASS v2 code
from core.inference import whole_inference

# Build the architecture and load the released EMA-teacher weights.
model = DINOv2Segmentor(backbone='dinov2_vitb14', nclass=21, pretrained=False).eval()
sd = torch.load('cwbassv2_pascal_dinov2b_1over8.pth', map_location='cpu')
# strict=False: the training-only contrastive/boundary proj_head is not in the eval path and is
# absent from the released weights; the backbone / DPT-lite decoder / segmentation head all load.
model.load_state_dict(sd, strict=False)

norm = T.Compose([T.ToTensor(),
                  T.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))])
img = norm(Image.open('example.jpg').convert('RGB')).unsqueeze(0)

with torch.no_grad():
    logits = whole_inference(model, img)   # [1, 21, H, W], pads to /14 internally
    pred = logits.argmax(1)                # [1, H, W] class indices (Pascal VOC, 21 classes)

Interactive demo: psychofict/cwbass-v2-demo.

Citation

@article{tarubinga2026cwbassv2,
  title   = {CW-BASS v2: Saturation-Aware Pseudo-Label Selection for
             Semi-Supervised Segmentation under Foundation-Model Teachers},
  author  = {Tarubinga, Ebenezer},
  year    = {2026},
  note    = {Preprint; arXiv ID to be added}
}

License

Released under Apache-2.0. The code derives from UniMatch V2 (MIT); DINOv2 weights are loaded from facebookresearch/dinov2 at build time under their respective licenses.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support