Repository navigation
Crosswalk Phase 0 (#274): census, offset read, Vistas probe, Seattle aerial rating - #275
Open
jonfroehlich wants to merge 15 commits into
Open
jonfroehlich wants to merge 15 commits into
jonfroehlich wants to merge 15 commits into
Conversation
…ating Phase 0 of the crosswalk detector plan, run 2026-10-28, as scripts, committed tables, a doc and two figures: - Item 1 census (46 public cities): crowd Crosswalk/Signal labels vs OSM crossing/signal nodes; OSM coverage is bimodal; crossing:markings cannot be the positive set on its own. - Item 2 offset read (17 dense cities, 16,762 labels): median 1.17 m along / 1.00 m across the crossing from the node, symmetric about zero: the crowd labels the centre and the OSM node is that centre. - Item 2 aerial reference: the 120-label Seattle sheet rated (AI first pass, King County 2023 3-inch ortho, crops not committed): marked 39/40 painted, untagged 37/40, unmarked 20/40, so `unmarked` is not a negative set. - Item 3 Vistas probe (classes 8+23, 1024 parity rig): the pinned splits have an empty denominator, so it ran on paterson + gainesville with the rule unchanged: recall@0.05 0.82 (55/67; chance 0.28), a usable Stage 1 extent filter only. All-pano component rates per split in panos.csv. - Aerial-imagery lookup per PS city (GSD, access) for the Phase 1 GT plan. analysis_out/crosswalk_phase0_274/ is re-included in .gitignore for the small tables; the raw rawLabels/OSM/way pulls (~200 MB) stay out and re-pull from the cached-by-default scripts. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
aerial_spotcheck.py build writes a self-contained page: one sheet row per screen, the 36 m crop requested live from King County's 2023/2025 ortho export (no imagery in the repo), node, label and 2 m / 5 m rings drawn over it, the AI's two ratings pre-selected so Enter accepts and single keys override. AI non-default rows come first. Verdicts persist in localStorage and export as JSON (gt_gallery.py's pattern); `merge` folds them into the sheet as human_* columns and prints agreement with the AI pass overall and per OSM class, plus the disagreement list. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…m 2) The legend now shows each marker in its own pill (OSM crossing node, Project Sidewalk crowd label, 2 m / 5 m rings) instead of a run of dots that read ambiguously. The label-position buttons no longer quote distance bands: the rater judges by position on the paint (centre / off-centre / curb end / not this crossing), with a hint saying the metres and rings are only aids. Stored verdict codes are unchanged, so saved verdicts and the merge script carry over. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ed row (#274 item 2) "Next unrated" (key .) jumps forward in the current order to the next row without a saved verdict, wrapping, and says so when every row is rated. Save & next now lands on the next unrated row instead of the next row in sequence, so walking back with the arrows no longer leaves the rater re-visiting saved rows. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…em 2) Question 2's buttons read "on the stripes, at/off-centre", which left a label a few metres off the paint but in line with the middle of the crossing (placement error, not a convention) with no honest option. The buttons now name the decision: at the center / near the center (on or just off the paint, not toward an end) / at a curb end / not this crossing, and each question carries a line saying what it decides. Stored verdict keys are unchanged, so saved verdicts and the merge step are unaffected. centre/metres -> center/meters on the page. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The node question carries the blue dot and the label question the red one, matching the markers on the crop, so the rater sees which point each question is about without reading the legend. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…m 2) Only Save wrote anything, so a note typed and then a reload (or a detour with the arrows) lost it. Button changes, the flag and the note are now kept per row in a draft store beside the verdicts and restored when the row is shown, with a status line saying so; Save and Clear drop the draft. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ano facts (#274 item 2) Rating #68 on the 2023 ortho alone read "no paint"; the 2025 ortho shows a zebra and the crop the crowd labeled (Feb 2023) shows a ladder crosswalk. So: - both King County years are shown side by side with the same overlay (the T toggle is gone), so a crossing painted or removed between flights is seen; - a third panel shows the label's street-level crop from Project Sidewalk (/cropImage/<type>/<id>/metadata hands out a short-lived signed URL; CORS is open, so the page fetches it live and caches it per label), red ring = the label; a Street View link opens the pano itself; - build --rawlabels joins the census's cached rawLabels pull to add the pano capture month, the label date and human agree/disagree counts to the facts; - a "rows I rated no / unclear" order for revisiting those verdicts with the new evidence; each saved verdict now records imagery:"2023+2025+crop". The AI first pass was rated on 2023 alone; its no/unclear rows need the same revisit before the agreement table is read. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…fold (#274 item 2) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…rge (#274 item 2) A recurring case: the OSM node is an unpainted pedestrian crossing and the crowd's Crosswalk label sits on the green bike crossing beside it. The code is no + 4, but the sub-case matters on its own (a paint detector fires on green bike markings exactly as the crowd did, and the OSM tag was right), so it gets a tag instead of free text. merge writes human_bike and a per-class column; a note mentioning "bike" from before the tag existed counts too. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…crossing' (#274 item 2) An unmarked pedestrian crossing is still a crossing; what is missing is the painted extent the position question is asked against. Stored key unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… offline replay (#274 item 2) - aerial_verdicts_seattle-wa.json: the human export (120/120 rows, exported 2026-10-31T14:19Z); aerial_sample_seattle-wa.rated.csv: merge output. 93 rows were judged on the 2023 ortho alone (before the 2025 + crop panels); 11 of those are no/unclear and get a revisit -- hence the new "no / unclear saved before the 2025 + crop panels" order. Numbers are provisional until then. - archive_spotcheck.py saves every network fetch the page makes (both years, 36 m and 18 m tiles, every label crop + metadata, the sheet, the rawLabels pull, the export, the page) with sha256 + url + time in manifest.json, so the rating can be replayed if the services go away. Imagery stays out of the repo (King County "view only", Google pixels in the crops). - build --archive <dir> renders the page from that archive, no network. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…an order (#274 item 2) aerial_spotcheck_review_rows.json names 21 first-pass rows whose verdict predates a rule settled later (1 m off the paint = 2; bike crossing = N + 4 + B; paint in either year or the crop = Y; one rule for faded paint) or was judged on 2023 alone, with the reason. build --review embeds it; the row shows the reason, and the 're-examine' order walks those rows plus any no/unclear verdict without the 2023+2025+crop imagery stamp. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…it (#274 item 2) Instead of a second page (which would get its own verdict store and a second export), the page opens in the re-examine order whenever rows are pending, Save drops the row from the list and moves to the next pending one, and it says when the list is empty. A row counts as done once its verdict is saved after the list's made_utc. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…#274 item 2) The Seattle aerial spot-check archive (tiles, crops, sheet, verdicts, offline page) cannot live in the repo, so the scripts' docstrings and the Phase 0 doc's Replication table now name its backed-up home on makelab1/makelab2: /projects/makeabilitylab/RampNet/archives/crosswalk_phase0_274/aerial_spotcheck_seattle-wa/ and the SHA256SUMS check that verifies a copy. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 0 of #274 (umbrella ProjectSidewalk/Planning#36), all three items, as scripts + committed tables + a doc with the aerial-imagery lookup per city. Items 1 and 2 are the comments already posted on #274; item 3 and the Seattle aerial rating are new here and posted on #274 with this PR. Nothing trains; no production write.
What it settles (
docs/crosswalk_phase0_274.md):unmarked20/40. marked ∪ untagged is a usable positive set;unmarkedis not a negative set. 92 of 117 labels within 5 m of the node on the crossing, 8 at an end, 17 off (13 of them the unmarked no-paint cases, where the crowd label often sits on a crossing OSM did not tag).Layout.
scripts/analysis/crosswalk_phase0_274/(stdlib census + offset read, the probe on top ofscripts/model_comparison/equirect_tiling.py, the aerial-crop renderer,figures.py),analysis_out/crosswalk_phase0_274/(census.json, offset_read.json, per-city offsets CSVs, the rating sheet unrated + AI-rated, the probe tables; ~1.5 MB, re-included in.gitignore),docs/crosswalk_phase0_274.mdwith a replication table and a where-each-number-lives paragraph,docs/figures/crosswalk_phase0_274/(two PNGs). The raw pulls (~200 MB) and the licensed aerial crops are not committed.Spot-check replay archive. Every tile and crop the spot-check page fetched while the 120 rows were rated (plus the sheet, rawLabels pull, verdict exports and an offline page) is kept off-repo on the lab share at
/projects/makeabilitylab/RampNet/archives/crosswalk_phase0_274/aerial_spotcheck_seattle-wa/(makelab1/makelab2, CSE-backed-up;sha256sum -c SHA256SUMS; README inside).archive_spotcheck.pywrites it andaerial_spotcheck.py build --archiverenders from it.Review asks. (a) Spot-check a handful of rows of
aerial_sample_seattle-wa.rated_ai.csvagainst the imagery (aerial_crops.pyre-renders the sheets); (b) the probe's one departure fromVistasDetector._raw_detect(reduce at 256×256, upsample the argmax map) is documented in the script docstring; (c) the item 3 split amendment.🤖 Generated with Claude Code — Fable 5.1, claude-fable-5-1