ProjectSidewalk / ProjectSidewalk/RampNet

Experiment: hybrid RampNet + open VLM (Qwen3-VL) — ensemble / cascade / distillation

Open
#35 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
7
Forks
1
Avg merge
4d 11h
Merged PRs (30d)
7

Description

Motivation

RampNet is strong but not perfect — on the deployment benchmark it sits around P ~0.95 / R ~0.80, so ~1 in 5 real curb ramps is still missed. General VLMs now do bounding-box detection, and the model-comparison harness (#20, PR #34) lets us score them on the same ground truth. The question this issue tracks: can a hybrid of RampNet + an open VLM beat RampNet alone — at a cost an open-source, academically-hosted project can actually afford?

Project Sidewalk is open source, runs on academic servers, and has very little money, so "just call a paid VLM per pano" is off the table at deployment scale. That constraint isn't a blocker — it shapes the design.

The cost reframe: self-host the VLM

  • Gemini (paid API) → useful as a reference baseline, but never a deployment component (per-call cost × millions of panos).
  • Qwen3-VL (open weights) → self-hostable on makelab2 (A40, 48 GB, 24 TB) or Hyak; inference cost is GPU-hours, not dollars. This makes Qwen — not Gemini — the real hybrid partner.
  • Tiling wrinkle worth testing: the harness feeds the VLM 1024×1024 perspective tiles, not the full 4096+ pano. The "A40 OOMs Qwen at native res" concern (why Qwen was earmarked for Hyak) may not apply to tiled inference — so makelab2 could be self-sufficient here. Verify empirically.

Approaches (with the standard names)

Approach What it is Fit for us
Ensemble / late (decision-level) fusion — Weighted Boxes Fusion (Solovyev et al. 2019), NMS-fusion Run both, pool + merge detections weighted by confidence Best accuracy; pays VLM cost on every pano forever
Confidence-gated cascade (propose→verify) RampNet everywhere; VLM invoked only on RampNet's uncertain/empty panos to recover misses or prune FPs Bounds VLM calls to a fraction — budget-friendly
Offline distillation / pseudo-labeling (teacher→student, weak supervision) VLM improves the auto-generated training set once; deploy RampNet alone Free at inference; most on-brand for an auto-labeling project; most publishable

Decision gate — do this first (cheap, no training)

A hybrid only helps if the two models make different errors. Before building anything, run the complementarity analysis on the existing model-comparison run (cached detections + derived GT):

  • Oracle-union recall — recall if a ramp counts as found when either model finds it. Compare to RampNet's solo recall.
  • The "RampNet-miss ∩ VLM-hit" set — real ramps RampNet misses that the VLM catches (the upside), and the FP cost of taking the VLM's extra detections (the downside).
  • Verdict: if union recall materially exceeds RampNet's ~0.80 without a FP blowup → prototype a cascade. If not → it's a distillation story (VLM cleans the dataset), or not worth it.

Early data point (in-progress run): Gemini-3.6-flash tiling ≈ P 0.76 / R 0.65 on 70 richmond panos — below RampNet — so a naive union would add FPs. Whether the errors are complementary is the open question. Qwen numbers TBD (needs wiring, see #20).

Compute

  • makelab2 — A40 (48 GB), 24 TB; self-host Qwen3-VL (test tiled inference here first). Needs env setup (py3.12 + CUDA torch + transformers pin).
  • Hyak — for heavier runs / native-res if tiling proves insufficient.
  • Gemini — paid reference baseline only, via the harness.

Relation to other work

Builds directly on #20 (model-comparison harness) and PR #34 (docs/model_comparison.md, scripts/model_comparison/). The complementarity analysis reuses that harness's cached detections and rampnet/detection_eval.py ground truth — no new infra. Wiring Qwen3-VL (the prerequisite for a Qwen hybrid) is already a checklist item on #20.

Next steps

  1. Complementarity analysis on the current Gemini run (defines whether to proceed).
  2. Wire + self-host Qwen3-VL on makelab2 (test whether tiled inference fits the A40); rerun complementarity with Qwen.
  3. If promising: prototype the cheapest viable hybrid (likely a confidence-gated cascade or a distillation pass), measure vs RampNet-alone on the benchmark.

Filing to give the idea a home; not committing to build until the complementarity gate says it's worth it.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the cached detections and derived ground truth from scripts/model_comparison/ and rampnet/detection_eval.py, using the existing Gemini run. Measure oracle-union recall, RampNet-miss/VLM-hit cases, and false-positive cost, then report whether the results justify a cascade, distillation pass, or stopping; Qwen3-VL wiring and tiled A40 inference are later steps tied to #20.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, pytorch
Domain
computer-vision, machine-learning
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.