ProjectSidewalk / ProjectSidewalk/RampNet

Add Panoramax as a third imagery domain: Bayonne (first Panoramax PS city) as a benchmark split, Lyon as a training-only city (#158)

Open
#159 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

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

Description

Context

  • Project Sidewalk merged Panoramax as an imagery provider and Bayonne, France as the first Panoramax city today (ProjectSidewalk/SidewalkWebpage#5199, ProjectSidewalk/SidewalkWebpage#5200, French locale ProjectSidewalk/SidewalkWebpage#5201). The test and prod instances are not up yet.
  • The labeler has a Panoramax source ready: ProjectSidewalk/sidewalk-auto-labeler#49 (open, mergeable) — enumeration via z15 pictures tiles, hd.jpg originals from the home instance, the view:azimuth heading convention verified per sequence, boundaries for Bayonne and Lyon in example_geojson/.
  • This is the third open-imagery domain after Mapillary, in the rig-native retrain program of #158. That issue's decision rule is that a city either trains or evaluates, never both; this issue is where Panoramax's cities get assigned.

What the census says (2026-09-04, z15 tiles, in-polygon, equirectangular only)

Bayonne Lyon
area 25.8 km² 48.0 km²
pictures 64,610 377,533
after thinning 5 / 10 / 20 m 46,636 / 27,695 / 13,161 173,059 / 86,320 / 38,563
captured 2024 or later 90% 29%
rigs ~all GoPro Max 5760×2880 (a 2026 batch at 5376×2688) 178k Point Grey Ladybug 8192×4096 (2020/2022, the Métropole); 113k GoPro Max (2025/26); 78k unknown model
accounts 11; one (the municipality) holds 96%, hosted on the IGN instance 30
runtime at São Paulo's L40S rate (~0.41 s/pano) ~3 h at 10 m ~10 h at 10 m

The municipal Bayonne panos are published under the Etalab 2.0 open licence. ProjectSidewalk/SidewalkWebpage#5202 tracks storing the per-picture licence server-side so crops can name it.

Why Panoramax belongs in the retrain and the benchmark

  1. Rig diversity is the whole point of #158, and Bayonne is the Laurens rig at 12× the panos. laurens_mapillary (GoPro Max, F1 0.543) is the benchmark's worst US split and #151's out-of-domain-rig finding. Bayonne is GoPro Max too, but captured by one municipal account with consistent mounting and season — the same rig class without Laurens' confounds. Lyon adds a rig class nothing on the board has (a professional multi-camera Ladybug rig) plus GoPro Max in a dense European city.
  2. Bayonne is a deployment target. The first Panoramax Project Sidewalk city needs the same ground-truth gate as every other city we submit to (docs/adding_a_benchmark_city.md).
  3. A quirk the model has never seen. Bayonne's municipal panos carry a white nadir logo band across roughly the bottom 20% of the equirect. Ramps within a few metres of the camera are hidden by it. This interacts with the nadir/hood mask question in #47 and with the reprojection rig, and ground-truth reviewers need to know it is there.

Proposed roles

  • Bayonne → benchmark split bayonne (bare name: a single-source city per the split naming convention) and the deployment gate. Do not train on it.
  • Lyon → training-only domain, never a split: two rigs, 86k panos at 10 m, or a district subset if the full run is more than the first retrain needs.
  • The reverse assignment also works, and so does splitting Bayonne by account or sequence if we want both rigs on the eval side. Whichever way, one city does not do both jobs.

Steps

  1. Merge sidewalk-auto-labeler#49. Run bayonne at 10 m thinning (the GSV-like density; 27.7k panos) and lyon on Hyak.
  2. Bayonne ground-truth bundle via export_benchmark.py (the Panoramax branch of the native-res fetch is in), review in gt_gallery.py, add the split to BENCHMARK_SPLITS and the docs. The add-a-city protocol has drifted since laurens (imagery manifest, registry) — fix it as part of this rather than around it.
  3. Archive both cities at native resolution on the lab store, same protocol as the other cities.
  4. Once #158's step-1 precision check passes, Lyon enters the mined-positive pipeline.

Open questions

  • Thinning for Lyon: 10 m, 20 m, or a district.
  • The nadir band: mask at inference (#47) or leave it and measure the near-field cost.
  • Camera height for the flat-ground raycast (sidewalk-auto-labeler#53): Panoramax serves no depth, and Bayonne's municipal capture method (car, bike, backpack) is not recorded in what we have read so far — check the picture metadata and sequence speeds before mining anything from it.

Related

#158, #151, #47, #102 · sidewalk-auto-labeler#49, #53 · SidewalkWebpage#5199, #5200, #5202

🤖 Generated with Claude Code — Fable 5.1, claude-fable-5-1

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 by reading #158 and docs/adding_a_benchmark_city.md, then inspect export_benchmark.py, gt_gallery.py, and the BENCHMARK_SPLITS registry. Confirm the sidewalk-auto-labeler dependency and resolve the Lyon thinning and nadir-band questions before running the city data. Done means Bayonne is prepared and reviewed as a benchmark split, Lyon is available for training, both are archived, and the registry and documentation are updated.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.