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

Project page Code

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

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

Cityscapes checkpoint for CW-BASS v2, a saturation-aware pseudo-label selection method over a DINOv2-Base encoder. CW-BASS v2 combines confidence-weighted boundary-aware self-training, a held-out calibration slice (unbiased noise estimate), and a self-adaptive confidence floor, arbitrated by a one-pass reliability gate: it measures π_kept = Pr[correct | c ≥ τ] on a held-out slice and uses strict filtering when π_kept ≥ τ, the adaptive floor otherwise. See the Pascal model and the paper for the full method.

On Cityscapes the teacher is near-saturated, so the gate selects strict filtering (a near-tie with the adaptive rules). This checkpoint is the model that rule produces.

  • Backbone: DINOv2-Base (ViT-B/14) + DPT-lite decoder, 19 Cityscapes classes.
  • This checkpoint: Cityscapes 1/8 split, single seed, EMA teacher (eval) weights, crop 686.
  • Rule the gate selected here: strict (τ = 0.95).

Results (honest framing)

Split CW-BASS v2 (gate→strict) UniMatch V2-B (reported)
1/16 83.16 83.6
1/8 83.96 84.3
1/4 83.99 84.5

CW-BASS v2 sits at or slightly below the published UniMatch V2-B figures (single seed, best EMA). On this near-saturated teacher the adaptive rules tie strict (spread ≈ 0.5 mIoU), so the gate's choice of strict is a safe, no-regret default rather than an accuracy lever — consistent with the paper's thesis. These cells are single-seed (see the paper's Cityscapes table).

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

model = DINOv2Segmentor(backbone='dinov2_vitb14', nclass=19, pretrained=False).eval()
sd = torch.load('cwbassv2_cityscapes_dinov2b_1over8.pth', map_location='cpu')
model.load_state_dict(sd, strict=False)          # training-only proj_head is inference-unused
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():
    pred = whole_inference(model, img).argmax(1)  # [1, H, W], 19 Cityscapes classes

For large Cityscapes images, core.inference.slide_inference (sliding-window) is also available. Run it locally with the Gradio app in the repo's demo/ folder.

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},
  journal = {arXiv preprint arXiv:2608.12773},
  eprint  = {2608.12773},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CV}
}
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

Space using psychofict/cwbass-v2-cityscapes 1

Paper for psychofict/cwbass-v2-cityscapes