GG
Available for remote work
all work
01 / Project Vision

VISION — finding the human causes of Accra's floods from the air

Accra floods for reasons that are anthropogenic before they are climatological: drains obstructed by waste, structures built onto watercourses. Those causes are metre-scale, so the satellite imagery prior work relies on cannot see them — and the city still counts them by walking the streets after the water goes down. VISION is a six-stage, fully reproducible pipeline that finds them beforehand, from centimetre-resolution aerial imagery and openly licensed data alone.

2026·Geospatial deep learning · Applied research·Author & sole engineer·preprint

Accra floods every rainy season, and the reasons are mostly not meteorological. Drains fill with solid waste until they carry a fraction of their design flow; structures get built onto watercourses and onto former wetland. Both are human, both are visible from the air, and both are metre-scale — which is precisely why the satellite imagery that most flood-mapping research runs on cannot see them. A 10 m Sentinel pixel does not resolve a shack built over a 1.5 m drain.

So the city counts them by walking. Municipal authorities enumerate obstructed drains and encroaching structures by pedestrian survey, conducted after the water goes down. The question this project asks is whether that enumeration can be done beforehand, automatically, and at scale — from centimetre-resolution aerial imagery and openly licensed data alone.

The area of interest is Old Fadama and Agbogbloshie, at the confluence of the terminal Odaw River and the Korle Lagoon. It is the hydraulic sink of the entire ~400 km² metropolitan catchment and the epicentre of the June 2015 flood disaster, and it concentrates every mechanism under investigation inside a single 1.8 × 2.6 km tract.

The system is six loosely-coupled stages rather than one end-to-end estimator. That decomposition is the main design decision: each stage is separately checkable, and when one fails it fails visibly instead of being laundered through a black box.

  1  orthomosaic          5 cm RGB, OpenAerialMap (2020, 2024)
  2  segmentation         U-Net / ResNet-34 → built-up mask
  3  terrain hydrology    FABDEM → D8 flow accumulation → HAND
  4  topology overlay     footprints ∩ drainage network → hazard loci
  5  hydraulics           Manning conveyance, 760 surveyed drains
  6  siltation            drain-aligned image chips at native 2–5 cm

Every input is openly licensed and acquired by script — OpenAerialMap orthomosaics, OpenStreetMap footprints and drainage, Copernicus GLO-30 and FABDEM terrain, Open Cities Accra field-surveyed drain cross-sections, ERA5 rainfall. No raster payloads are committed; the acquisition scripts regenerate them deterministically. The repository is a method, not a data dump.

Stage 4 is deliberately dumb. Before any learned model runs, a purely deterministic overlay intersects the 25,286 mapped building footprints against the drainage network and the water polygons. Because the tally is a monotone function of the buffer tolerance, there is no single honest number to report, so the result is a sensitivity sweep: 114 structures on-drain at 5 m, 51 riparian at 5 m, 159 at 10 m, 470 at 20 m. The union — 273 structures — is the headline figure, and it establishes the point that matters: the hazard signature is already computationally legible from open data, with no deep learning involved at all.

Stage 2 trains a U-Net to segment built-up area from the 5 cm imagery, supervised by OSM footprints. On an identical 1,081-tile split, a pretrained ResNet-34 encoder beat a from-scratch U-Net — validation IoU 0.579 against 0.530 — which is what the literature predicts for a small, label-noisy dataset.

Both models converged to coarse region-level masks rather than crisp per-building boundaries, and training loss fell freely while validation plateaued. The obvious reading is that the model is too weak. The correct reading turned out to be that the labels are wrong: OSM footprints in a settlement this dense are offset one to two metres and merge adjacent structures.

Distinguishing those two readings took three controlled experiments, and all three pointed the same way. Stronger training recipes — native-resolution multi-scale crops, photometric jitter, differential encoder/decoder learning rates, AdamW under warmup-cosine over 60 epochs — scored worse than the baseline, at 0.561 and 0.566; the extra capacity went into memorising label noise. An independent label source, Google Open Buildings v3 over the identical window, agreed with the OSM mask at only IoU 0.611 — so the model was already operating at the inter-source noise floor. And a global-shift registration search peaked at ~0.2 m, which rules out a correctable systematic offset: the label error is per-building and random.

The fix was not architectural. Pixels where OSM and Open Buildings agree (77% of the corpus) are trusted; disagreement pixels are marked ignore and excluded from loss and metric alike. Two things fell out of that. First, the benchmark had been hiding model quality — scored on verified pixels only, the existing model was already at pooled IoU 0.77, meaning most of its apparent error was disagreement with bad labels rather than with reality. Second, retraining with disputed pixels masked out gave a real gain: pooled verified IoU 0.80. The retrained model now correctly rejects OSM's phantom buildings on open ground — which is exactly why its legacy score against raw OSM masks drops to 0.55.

Stage 3 derives height above nearest drainage over the full Odaw catchment from FABDEM rather than raw GLO-30 — necessary because over dense urban fabric the raw surface model embeds roof heights and corrupts flow routing. Validating it was harder than computing it: no agency has ever published a flood extent for an Odaw event. UNOSAT's only Ghana product covers a lower-Volta event outside the basin, the 2015 disaster is absent from the Global Flood Database, and Copernicus EMS was never activated for Ghana.

So validation is statistical instead. Every Odaw-basin locality named in multi-year flood reporting, against eight elevated control districts absent from it, geocoded independently: median HAND 1.9 m versus 23.0 m, AUC 0.86, exact one-sided Mann–Whitney p = 0.0074. The two flooded localities that sampled high are centroid artefacts — Nima and Lapaz geocode to ridge tops above the valleys they name.

Two things did not work, and the report says so. Applied to the unseen 2024 epoch the model maps built-up extent with no 2024 labels at all (17.6 ha over the test patch), confirming label-free generalisation — but naïve inter-epoch mask differencing is dominated by prediction flicker between independent flights and does not reliably localise individual new structures. The deterministic Stage-4 overlay remains the better encroachment estimator. And Stage 6, which goes back to the imagery to measure the siltation that Stage 5 could only sweep as a parameter, returns a first direct observation of channel condition alongside a documented negative on automating it, with three alternative explanations eliminated in writing.

The work is written up as a fifteen-page technical report — motivation, methods, results, negative results, limitations, references — posted as a preprint. It has not been submitted to a journal, and the report is candid about what would have to change first: there is no related-work section, and the consensus-verification method is not yet positioned against the existing literature on learning with noisy labels.

The claim the system actually supports is bounded, and stating that bound precisely is most of the intellectual work. VISION maps the built fabric and the drainage network, ranks which reaches are overwhelmed under a given rainfall and siltation assumption, and localises where structures sit on the channel. It does not predict a flood. Surpassing the segmentation ceiling needs hand-verified labels, not another architecture — and per-footprint delineation in the dense core stays open until there are instance-level ones.