projectsidewalk/rampnet-stage1-inputs

Dataset

RampNet Stage 1 Inputs

0

3 commits

1 linked in READMEs

updated Aug 17, 2026

See the code

README

RampNet Stage 1 Inputs

The inputs to the RampNet Stage 1 pipeline, from RampNet: A Two-Stage Pipeline for Bootstrapping Curb Ramp Detection in Streetscape Images from Open Government Metadata (O'Meara et al., ICCV'25 CV4A11y workshop, arXiv:2508.09415).

projectsidewalk/rampnet-dataset is what Stage 1 produced β€” 214k annotated panoramas. This is what went in.

v1.0-iccv2025 shipped the Stage 1 code without these files. That is not a gap a re-download can close: the city open-data portals serve current inventories and they drift, so a file fetched today is a different experiment rather than a copy of this one.

Contents

filebytessha256
location_data/bend.geojson14,434,722a0da4e016474c2c8fddcc6f77a7dd4a3aa5caaea455c839fad762d66a7af948e
location_data/nyc.csv42,057,860beea2b323d00d82192dd18ace3f257cef30ce3b579544d4e607fe7abe5e57f8c
location_data/portland.geojson15,326,478d5366a7e0d18f09f9ba49f1cbf7a26b99ee90633689dbe94cbde2a21bd395dbe
manifests/finaldataset.jsonl64,293,017cf2e709237f26d5e4883f22f6de635276de3049e20612dfabe33ab1f6c06fd7b
manifests/dataset.jsonl59,087,2534ca16dca507aed43685ab842bc4cf22bc472edbd87c3f484594adb231edd2121
manifests/negativepanosSHORTENED.jsonl5,205,764bd1cbf00fcb09469cc6b268c0aa0053c13352efc66bb0fb5a761d40cd3654b4b
manifests/negativepanos.jsonl10,466,000f7f1ac9c26a567419100d38dc7a4096d39fa5d80e70d61cb6a5e5be944f4bfa8
manifests/all_locations.csv13,452,02106fec4e9a8077582deac12c3c303b89c8a2396ce3d78e7e923b0960a2c091a3b
street_data/Bend - Streets.geojson8,934,7611c5cf897feb43bf8668d4272f71a130609f727ad4798d4145c837139e8e07311
street_data/New York - Streets.geojson669,049,016946e13a4fb63be2d1a1dd15bca3a9a60c84965cef3a67cb8aae73922b51868bb
street_data/Portland - Streets.geojson123,616,7877675f0936e0e194c920957c8921352ae73ff788417d4ad3b4666c1f53d5938e3
total1,025,923,679

Every file above is byte-identical to the artifacts recovered from the cluster storage that held the paper's run. The sha256 values are also recorded in docs/data_provenance.md.

How much of that is enforced, and how much is provenance. scripts/export_stage1_inputs.py refuses to publish unless the three location_data/ inventories and all_locations.csv hash to the values pinned in data_provenance.md Β§3 and Β§3.1. Those four are the ones a present-day checkout will silently re-create differently β€” combine_location_data.py now seeds its shuffle and changed its unknown-date handling, and the portals have drifted β€” so an unverified copy would look identical and not be. The remaining manifests and the raw street_data/ downloads have no published hash to check against yet; they rest on the recovery provenance above, and their sha256 is recorded in the table so a future copy can be proved identical to this one.

manifests/ β€” the reproduction path, and the most important part here

filewhat it is
finaldataset.jsonlthe exact 219,170-panorama manifest download_dataset.py consumed
dataset.jsonlthe 175,336 positive panoramas, with the ramp coordinates that landed in each
negativepanosSHORTENED.jsonlthe 43,834 negatives actually used (exactly 20.0% of the final set)
negativepanos.jsonlthe full 88,125-candidate negative pool it was drawn from
all_locations.csvthe three inventories merged to (latitude, longitude, date)

finaldataset.jsonl = dataset.jsonl + negativepanosSHORTENED.jsonl, which is worth stating because the repo describes that merge as a manual step.

location_data/ and street_data/ β€” the sources

location_data/ holds the three government curb ramp inventories. street_data/ holds the street centrelines used to sample negative panorama locations; these are the full downloads, whereas the training repo commits an 18.7 MB derivative carrying only the geometry and name field the pipeline reads (proven to yield an identical sampling network by scripts/build_street_derivative.py verify).

Three things these files cannot give you

Published beside the data rather than discovered later:

  1. The paper's row order is unreproducible. combine_location_data.py shuffled all_locations.csv with no seed β€” random.seed(42) was added afterwards. The row contents are intact, which is why provenance can still be recovered by coordinate join (scripts/analysis/gov_provenance.py), but the ordering is gone.
  2. The negatives cannot be regenerated, only downloaded. generate_negative_panos.py samples street locations with an unseeded RNG. negativepanosSHORTENED.jsonl is the only record of which negatives the paper used β€” that is why it is here.
  3. Date semantics changed after the paper. The paper-era convert_date mapped an unknown install date to "2000-01-01", so every undated ramp trivially passed the "installed before the panorama was captured" check; the current code returns "". Measured, 23,088 records (8.36%) have no install date, which bounds how differently a re-run from current main would select.

Which government records became training labels

scripts/analysis/gov_provenance.py in the training repo rebuilds the mapping from each all_locations.csv row back to its source file and government ID, and verifies it β€” 276,071 / 276,071 rows resolved, 0 unmatched.

BendPortlandNYCtotal
government records13,35745,035217,679276,071
consumed by a generated panorama5,11021,075130,527156,712
consumption rate38.26%46.80%59.96%56.77%

So 43.23% never became a training label, mostly because no panorama resolved for the location or the install date failed the predates-capture check.

Why this says 276,071 and the paper says 276,615

Table 1 of the paper totals 276,615 across these three cities (NYC 217,680, Portland 45,324, Bend 13,611) β€” 544 more than the files published here, as Bend βˆ’254, Portland βˆ’289, NYC βˆ’1. If you are comparing the paper against this download, that is the difference you will find, and it is between Table 1 and the files rather than a loss anywhere in the pipeline. Three things are checkable from this repository:

  • Nothing is dropped on read. Every Bend and Portland feature is a Point, and every NYC row parses as POINT(...); all 276,071 records survive parsing.
  • These are the files the paper's run consumed. Every row of manifests/all_locations.csv β€” the run's own output, recovered rather than regenerated β€” resolves to one of them: 276,071 / 276,071, none unmatched, with per-city attribution equal to the per-file counts exactly.
  • They are an earlier state of the same inventories, not a re-download. Both drifting cities have grown since the paper (measured 2026-07-31: Bend 14,805, Portland 46,101), so a fresh download today is larger than Table 1 while these are smaller. NYC is effectively frozen and differs by a single record.

What is not established is where Table 1's exact figures came from. The likeliest reading is counts read from each city's portal at survey time rather than from the downloaded files, but that is a hypothesis: the two deltas correspond to roughly three and five months of each city's own measured growth, which is the right order of magnitude but not one consistent date. We state it as unresolved rather than quietly reconciled. Quote 276,071 for anything derived from these files.

Usage

This is a set of source documents, not a row-iterable dataset β€” load_dataset() will not work. Download it directly:

hf download projectsidewalk/rampnet-stage1-inputs --repo-type dataset --local-dir rampnet-stage1-inputs

Then place the pieces where the pipeline expects them, under stage_one/dataset_generation/ in the training repo:

location_data/          -> stage_one/dataset_generation/location_data/     (also already in git)
street_data/            -> stage_one/dataset_generation/street_data/
manifests/*.jsonl,csv   -> stage_one/dataset_generation/

You will also need the crop model, projectsidewalk/rampnet-crop-model β€” Stage 1 does not run without it.

Provenance

FieldValue
Pipeline codehttps://github.com/ProjectSidewalk/RampNet @ b6d1cde-dirty
Exported2026-08-17 by scripts/export_stage1_inputs.py
Replication ledgerdocs/replication.md

Citation

@inproceedings{omeara2025rampnet,
  author    = {John S. O'Meara and Jared Hwang and Zeyu Wang and Michael Saugstad and Jon E. Froehlich},
  title     = {{RampNet: A Two-Stage Pipeline for Bootstrapping Curb Ramp Detection in Streetscape Images from Open Government Metadata}},
  booktitle = {{ICCV'25 Workshop on Vision Foundation Models and Generative AI for Accessibility: Challenges and Opportunities (ICCV 2025 Workshop)}},
  year      = {2025},
  doi       = {https://doi.org/10.48550/arXiv.2508.09415},
}
accessibility
curb-ramp
open-government-data
reproducibility
streetscape

projectsidewalk/rampnet-stage1-inputs

Dataset

RampNet Stage 1 Inputs

0

3 commits

1 linked in READMEs

updated Aug 17, 2026

See the code

README

RampNet Stage 1 Inputs

The inputs to the RampNet Stage 1 pipeline, from RampNet: A Two-Stage Pipeline for Bootstrapping Curb Ramp Detection in Streetscape Images from Open Government Metadata (O'Meara et al., ICCV'25 CV4A11y workshop, arXiv:2508.09415).

projectsidewalk/rampnet-dataset is what Stage 1 produced β€” 214k annotated panoramas. This is what went in.

v1.0-iccv2025 shipped the Stage 1 code without these files. That is not a gap a re-download can close: the city open-data portals serve current inventories and they drift, so a file fetched today is a different experiment rather than a copy of this one.

Contents

filebytessha256
location_data/bend.geojson14,434,722a0da4e016474c2c8fddcc6f77a7dd4a3aa5caaea455c839fad762d66a7af948e
location_data/nyc.csv42,057,860beea2b323d00d82192dd18ace3f257cef30ce3b579544d4e607fe7abe5e57f8c
location_data/portland.geojson15,326,478d5366a7e0d18f09f9ba49f1cbf7a26b99ee90633689dbe94cbde2a21bd395dbe
manifests/finaldataset.jsonl64,293,017cf2e709237f26d5e4883f22f6de635276de3049e20612dfabe33ab1f6c06fd7b
manifests/dataset.jsonl59,087,2534ca16dca507aed43685ab842bc4cf22bc472edbd87c3f484594adb231edd2121
manifests/negativepanosSHORTENED.jsonl5,205,764bd1cbf00fcb09469cc6b268c0aa0053c13352efc66bb0fb5a761d40cd3654b4b
manifests/negativepanos.jsonl10,466,000f7f1ac9c26a567419100d38dc7a4096d39fa5d80e70d61cb6a5e5be944f4bfa8
manifests/all_locations.csv13,452,02106fec4e9a8077582deac12c3c303b89c8a2396ce3d78e7e923b0960a2c091a3b
street_data/Bend - Streets.geojson8,934,7611c5cf897feb43bf8668d4272f71a130609f727ad4798d4145c837139e8e07311
street_data/New York - Streets.geojson669,049,016946e13a4fb63be2d1a1dd15bca3a9a60c84965cef3a67cb8aae73922b51868bb
street_data/Portland - Streets.geojson123,616,7877675f0936e0e194c920957c8921352ae73ff788417d4ad3b4666c1f53d5938e3
total1,025,923,679

Every file above is byte-identical to the artifacts recovered from the cluster storage that held the paper's run. The sha256 values are also recorded in docs/data_provenance.md.

How much of that is enforced, and how much is provenance. scripts/export_stage1_inputs.py refuses to publish unless the three location_data/ inventories and all_locations.csv hash to the values pinned in data_provenance.md Β§3 and Β§3.1. Those four are the ones a present-day checkout will silently re-create differently β€” combine_location_data.py now seeds its shuffle and changed its unknown-date handling, and the portals have drifted β€” so an unverified copy would look identical and not be. The remaining manifests and the raw street_data/ downloads have no published hash to check against yet; they rest on the recovery provenance above, and their sha256 is recorded in the table so a future copy can be proved identical to this one.

manifests/ β€” the reproduction path, and the most important part here

filewhat it is
finaldataset.jsonlthe exact 219,170-panorama manifest download_dataset.py consumed
dataset.jsonlthe 175,336 positive panoramas, with the ramp coordinates that landed in each
negativepanosSHORTENED.jsonlthe 43,834 negatives actually used (exactly 20.0% of the final set)
negativepanos.jsonlthe full 88,125-candidate negative pool it was drawn from
all_locations.csvthe three inventories merged to (latitude, longitude, date)

finaldataset.jsonl = dataset.jsonl + negativepanosSHORTENED.jsonl, which is worth stating because the repo describes that merge as a manual step.

location_data/ and street_data/ β€” the sources

location_data/ holds the three government curb ramp inventories. street_data/ holds the street centrelines used to sample negative panorama locations; these are the full downloads, whereas the training repo commits an 18.7 MB derivative carrying only the geometry and name field the pipeline reads (proven to yield an identical sampling network by scripts/build_street_derivative.py verify).

Three things these files cannot give you

Published beside the data rather than discovered later:

  1. The paper's row order is unreproducible. combine_location_data.py shuffled all_locations.csv with no seed β€” random.seed(42) was added afterwards. The row contents are intact, which is why provenance can still be recovered by coordinate join (scripts/analysis/gov_provenance.py), but the ordering is gone.
  2. The negatives cannot be regenerated, only downloaded. generate_negative_panos.py samples street locations with an unseeded RNG. negativepanosSHORTENED.jsonl is the only record of which negatives the paper used β€” that is why it is here.
  3. Date semantics changed after the paper. The paper-era convert_date mapped an unknown install date to "2000-01-01", so every undated ramp trivially passed the "installed before the panorama was captured" check; the current code returns "". Measured, 23,088 records (8.36%) have no install date, which bounds how differently a re-run from current main would select.

Which government records became training labels

scripts/analysis/gov_provenance.py in the training repo rebuilds the mapping from each all_locations.csv row back to its source file and government ID, and verifies it β€” 276,071 / 276,071 rows resolved, 0 unmatched.

BendPortlandNYCtotal
government records13,35745,035217,679276,071
consumed by a generated panorama5,11021,075130,527156,712
consumption rate38.26%46.80%59.96%56.77%

So 43.23% never became a training label, mostly because no panorama resolved for the location or the install date failed the predates-capture check.

Why this says 276,071 and the paper says 276,615

Table 1 of the paper totals 276,615 across these three cities (NYC 217,680, Portland 45,324, Bend 13,611) β€” 544 more than the files published here, as Bend βˆ’254, Portland βˆ’289, NYC βˆ’1. If you are comparing the paper against this download, that is the difference you will find, and it is between Table 1 and the files rather than a loss anywhere in the pipeline. Three things are checkable from this repository:

  • Nothing is dropped on read. Every Bend and Portland feature is a Point, and every NYC row parses as POINT(...); all 276,071 records survive parsing.
  • These are the files the paper's run consumed. Every row of manifests/all_locations.csv β€” the run's own output, recovered rather than regenerated β€” resolves to one of them: 276,071 / 276,071, none unmatched, with per-city attribution equal to the per-file counts exactly.
  • They are an earlier state of the same inventories, not a re-download. Both drifting cities have grown since the paper (measured 2026-07-31: Bend 14,805, Portland 46,101), so a fresh download today is larger than Table 1 while these are smaller. NYC is effectively frozen and differs by a single record.

What is not established is where Table 1's exact figures came from. The likeliest reading is counts read from each city's portal at survey time rather than from the downloaded files, but that is a hypothesis: the two deltas correspond to roughly three and five months of each city's own measured growth, which is the right order of magnitude but not one consistent date. We state it as unresolved rather than quietly reconciled. Quote 276,071 for anything derived from these files.

Usage

This is a set of source documents, not a row-iterable dataset β€” load_dataset() will not work. Download it directly:

hf download projectsidewalk/rampnet-stage1-inputs --repo-type dataset --local-dir rampnet-stage1-inputs

Then place the pieces where the pipeline expects them, under stage_one/dataset_generation/ in the training repo:

location_data/          -> stage_one/dataset_generation/location_data/     (also already in git)
street_data/            -> stage_one/dataset_generation/street_data/
manifests/*.jsonl,csv   -> stage_one/dataset_generation/

You will also need the crop model, projectsidewalk/rampnet-crop-model β€” Stage 1 does not run without it.

Provenance

FieldValue
Pipeline codehttps://github.com/ProjectSidewalk/RampNet @ b6d1cde-dirty
Exported2026-08-17 by scripts/export_stage1_inputs.py
Replication ledgerdocs/replication.md

Citation

@inproceedings{omeara2025rampnet,
  author    = {John S. O'Meara and Jared Hwang and Zeyu Wang and Michael Saugstad and Jon E. Froehlich},
  title     = {{RampNet: A Two-Stage Pipeline for Bootstrapping Curb Ramp Detection in Streetscape Images from Open Government Metadata}},
  booktitle = {{ICCV'25 Workshop on Vision Foundation Models and Generative AI for Accessibility: Challenges and Opportunities (ICCV 2025 Workshop)}},
  year      = {2025},
  doi       = {https://doi.org/10.48550/arXiv.2508.09415},
}
accessibility
curb-ramp
open-government-data
reproducibility
streetscape