Skip to content

Egypt: the localized detector wins a thin holdout, and Benban carries Verified

Egypt was composed and run on 11 and 12 October 2026, the first country of the Morocco-Egypt-Yemen-South Africa queue to reach a page. Like India and Vietnam it started with no calibration quadrats, no national register and no third-party PV dataset to check against. It was run under the owner's standing instruction to localize the segmentation on the country's own OpenStreetMap labels and to ship whichever checkpoint scores better on a held-out region. The localized checkpoint, v12_combined_egypt, won, so this page runs on it.

Interactive: Egypt PV evidence atlas.

Headline

Verified 3,315.1 MWp (90% 2,314 to 4,789)
Best estimate 3,809.9 MWp (90% 3,328 to 4,963)
Grid 946 cells of 0.1°, 27 governorates (geoBoundaries)
Imagery Sentinel-2 L2A, April to September 2026
Model v12_combined_egypt epoch 16, localized (it beat v5_combined_france on the holdout; see below)

Revised on 4 November

Until 4 November this page read Best 3,378.6 MWp (90% 3,028 to 4,823). On 3 November the owner judged, on the disk review page, every model outline above the 100,000 m² merge cap that the lead screens keep: 4 of the 23 are solar parks nobody has mapped, 8.6 km² with the 8.14 km² outline in New Valley among them, and now count whole as ground; the other 19 are not. Best rises by 431.3 MWp; Verified did not move.

A precision floor, not an estimate

No calibration quadrat enters Egypt's figures (the one registered area, below, holds no PV), so there is no roofclf half and no instrument at all below the 400 m² segmentation floor. It has no glint sample, so p_unmapped is 0 and p_real collapses to the OpenStreetMap-mapped fraction. Recall was deliberately skipped (--recall-reference none). For scale, GlobalData puts Egypt's cumulative solar PV at about 2.9 GW at the end of 2025, up from 2.1 GW a year earlier (pv magazine, 11 May 2026); the government's information centre, citing the World Energy Council, counts a smaller 2025 addition of 500 MW. This page's imagery is from the following summer.

Localizing the detector

Labels. 2,872 OpenStreetMap solar features inside Egypt (2,329 ground, 523 rooftop, 20 unclassified), 92.7 km² before dissolving. The solar-thermal filter found 363 solar-thermal elements in the country's bounding box and none among the label features, so nothing was dropped. The mapped population is utility parks first: Benban alone is 36.9 km² of outline.

Holdout. Picked from the label map before training by scripts/pick_val_region.py: Cairo Governorate, 22 cells, holding 10 of the country's 71 dissolved positives of 400 m² and up. The governorate with the most positives (Red Sea, 15) is never the holdout, and Aswan, with Benban, stays in training. One training chip in the ring around the holdout was relabelled buffer.

Corpus and recipe. 109 train and 9 val chips (82 of 119 with PV), weighted x8, the cap, giving 882 of 26,120 corpus rows (3.4%). The recipe is v5's verbatim. Best epoch 16, early-stopped at epoch 24, 6 hours 20 minutes on the GTX 1060.

The ship decision, scripts/compare_local_vs_v5.py on the 9 held-out chips:

v5 v12 (localized)
recall, installations at or above 500 m² 0.043 (1 of 23) 0.217 (5 of 23)
pixel IoU 0.066 0.062
pixel F1 0.124 0.116

The rule compares recall first, and a difference above 0.02 decides: v12 ships. Read it as a weak result. The holdout is 1,869 PV pixels in seven chips, 0.3% of the PV pixels in Egypt's chips, and three of the seven frame the same array; the installations are small ground arrays on the edge of Cairo, and both checkpoints find almost none of them (IoU about 0.06 for both, against 0.69 for v5 on India's holdout). The margin is four installations. It is enough to satisfy the rule, not to show that localization helps in Egypt by much.

The whole-country comparison, after the atlas (compare_checkpoints_vs_mapped.py, both checkpoints over all 946 cells, scored against the 255 dissolved mapped installations of 400 m² and up), finished on 19 October:

v5 v12 (localized, ships)
pooled recall over mapped installations 0.169 (43) 0.220 (56)
recall, 500 to 1,000 m² 0.000 (0 of 14) 0.643 (9)
recall above 50,000 m², counting candidates above the cap 0.867 (26 of 30) 0.967 (29)
candidates below the 100,000 m² merge cap 3,159 1,172
median candidate area 1,200 m² 3,950 m²
total candidate area below the cap 11.0 km² 11.5 km²
candidates above the cap 34 (59.9 km²) 46 (83.9 km²)

v12 finds 15 installations v5 misses and v5 two that v12 misses (McNemar p = 0.002), in the same direction as the holdout. v12 trained on most of these, so it is scored largely in-sample here, and the decision above rests on the held-out chips alone. What the whole-country run adds is the shape: v12 draws a third as many candidates, three times larger at the median, over about the same area.

A compose gap, closed before publication

The first build of this page dropped two mapped parks from Verified, a 10.0 km² outline just north of Benban and an 8.8 km² one at Kharga in New Valley. The model detected 96 to 98% of each where it had imagery, but only 87% and 69% of them had imagery at all, and the ground screen keeps an outline above 5 km² only when at least 90% of it is imaged. The cause was cell selection: compose added a cell for each mapped solar feature by the feature's representative point, so a park outline crossing a cell edge was imaged only on one side of it.

compose._solar_label_cells now adds every cell an outline intersects. Egypt gained five cells (946 against 941), the two parks are now fully imaged and 92 to 95% detected, and the screen keeps them. That moved Verified from 2,374.6 to 3,315.1 MWp and Best from 2,788.1 to 3,378.6 MWp. The same rule adds 21 cells to South Africa, whose compose had not started, and none to Morocco or Yemen. Of the countries already published, Vietnam, Zambia and Nigeria have no such cell, and India has eight, six of them at Khavda; see India.

The ground-perimeter screen

62 OSM ground perimeters of 50,000 m² or more, every one fully imaged after the fix. 61 screen as detected, with the model lighting up a median 100% of each; one, a 0.053 km² outline, shows nothing and is listed for a look. The three above the 5 km² cap are Benban (36.9 km², 91% detected), the outline north of it (10.0 km², 92%) and Kharga (8.8 km², 95%), and all three are kept.

Benban checks the land constant. Its 36.9 km² outline at the 0.05 kWp/m² the atlas assumes is 1,844 MWp, against a reported capacity of about 1,650 MW, which is 0.045 kWp/m². That is the same figure India's eleven capacity-tagged parks gave, and Benban's capacity is usually quoted AC, so the DC figure sits closer to the constant.

Plausibility gate

earthpv check-density reports 2 fail and 25 suspect of 27 governorates. Nationally the model's estimate is 1,193.2 MWp ground against 0.2 MWp rooftop, so every governorate trips the ground-to-rooftop ratio; 25 of them hold under 50 MWp of ground-mount, below the floor at which the ratio counts as a failure. The two that fail are the two with large mapped parks, and each fails the single-cell check as well: Aswan (894 MWp, 78% of it in Benban's main cell 0080_0024) and New Valley (188 MWp, 89% in the Kharga park's cell 0075_0038). The screen above shows the model detecting 91 to 95% of both outlines, so these are the plants, not bright desert. The ratio is the missing rooftop denominator, as in France and India, here in an extreme form (next section). Published with the flags stated, per this project's precedent for a checked-genuine failure.

Candidate population

1,218 candidates: 223 rooftop, 461 ground-adjacent, 534 with no building, median 4,249 m². 31 model-drawn candidates exceed the 100,000 m² merge cap and are excluded from capacity, 26.4% of candidate area, the largest 8.14 km², unless a person judges them solar: of the 23 the lead screens keep, the owner judged 4 parks on 3 November (8.6 km², the largest among them), which count whole as ground. 15 oversize candidates carry an OSM plant geometry (58.7 km²) and are exempt, all counted as ground; VIDA overlap had placed one of them on a roof. The model's own estimate (est_mwp_rc) was 1,193.4 MWp (90% 739 to 1,902) before the review, 1,193.2 of it ground; with no recall reference it equals the precision-weighted est_mwp_cal_total. The four judged parks add 431.3 MWp to it.

The model's rooftop estimate is 0.2 MWp. The 223 rooftop candidates cover 1.7 km², but the 176 of them at 1,000 m² and up match no mapped rooftop installation at all. With no glint sample and no register, the precision table can only price a candidate by how often candidates of its kind are mapped, so it prices those bins at zero. Egypt has 523 mapped rooftop features nationally, 0.15 km² in all. In this floor a detection the map has never confirmed counts for nothing, whether it is a real array nobody has mapped or a bright roof.

Verified is almost all ground-mount, and mostly three parks. It is the hand-mapped layer at the two constants: 687 features once overlapping outlines are dissolved, 65.8 km² of ground perimeter (3,288.4 MWp) against 0.15 km² of rooftop (26.7 MWp). Benban, the outline north of it and Kharga are 55.7 km² of that ground area, about 2,785 MWp. Best adds 494.8 MWp, 431.3 of it the four judged parks. The model's ground estimate prices the same parks at the largest ground bin's p_real of 0.379, below the mapped value, so in 50 cells Best is floored at Verified; what remains on top is model detections and unmatched mapped features elsewhere.

False positives: swimming pools and treatment basins

The owner's review of Egypt's mapping leads (29 October 2026) found many of them on swimming pools and on wastewater treatment plants, above all on the plants' rectangular settling and aeration basins. Still water is dark against bright desert, sand and concrete, and a row of rectangular basins has the shape of a block of panel rows at 10 m. The model had little chance to learn otherwise: Egypt contributes 119 distinct chips to the corpus (81 positive, 29 near negatives, 9 background, repeated eightfold), of which 9 hold a mapped pool of 150 m² or more and 3 a mapped wastewater feature.

Checked against OpenStreetMap (Geofabrik's Egypt extract of 28 October 2026, 4,356 pools and 665 wastewater features inside the composited cells), the 1,165 leads split as follows:

Leads
Touch a mapped swimming pool 95 (75 ground-adjacent, 20 rooftop; median lead 3,502 m²)
of which the pool covers at least 20% of the outline 77 (median cover 39%)
Touch a mapped wastewater plant, basin or clarifier 9
Touch other mapped water (water=lake 23, untyped natural=water 13, water=reflecting_pool 5, canals, ponds) 56
Touch any mapped water, pools included 151 of 1,165 (13%)

A model outline is about twice the object it found, so a pool covering 39% of a lead's outline is the object. OpenStreetMap explains the pools but not the treatment plants: 9 leads sit on a mapped plant, so most of the plants the review found are not in OSM or are mapped as something else. On Esri imagery, the candidates on the 8 mapped plants that one touches sit on sludge drying beds: grids of equal, walled rectangular beds beside the clarifiers, filled with dark water or grey to brown sludge, in the place and shape of a block of panel rows (the assistant's reading, not yet the owner's). The 23 leads on water=lake include artificial lagoons in resort compounds but were not checked one by one.

The published figures barely depend on these leads. The 95 pool leads would add 37.8 MWp at full credit (0.40 km² ground-adjacent at the land constant, 0.10 km² rooftop at the module constant), and the precision table credits unmatched candidates of these sizes at 1 to 5% of their area. The cost falls on mappers, who meet every one, and the leads guide now names both classes.

Hard negatives from OpenStreetMap. earthpv osm-hard-negatives puts a training chip on every mapped pool of at least 150 m² and every mapped wastewater feature, drops any within 75 m of mapped solar (3 were), orders the ones a candidate touches first and keeps one per 500 m. Egypt gets 1,121 centers: 873 on pools and 248 on wastewater features, 97 of them (89 and 8) on objects a model candidate touches. The wastewater set teaches the class from the plants OSM does hold, which are not the ones the leads sit on. 1,120 chips were cut (one window straddles two UTM zones) into data/chips/egypt_hard_neg: 889 train, 56 in the buffer ring round the Cairo holdout, and 175 inside it, 163 of them on pools. That is far more than the holdout's 9 original chips, so a comparison should score the two sets apart. 24 chips carry mapped solar elsewhere in their 2.24 km window, labelled as PV. The halo protects only mapped solar: a plant or resort with an unmapped array of its own would teach that array as a negative, so the 97 chips on objects a candidate touches are the ones to look at before training. No model has been trained on them yet (next section).

Operational notes

Compose built the 941 originally selected cells between 06:19 and 17:57 on 11 October, about 81 cells per hour, with no provider hand-offs and the 10 October compose fixes in place from the start (scene ranking by coverage, band-dropout check; see India). The five outline cells were added on 12 October in eight minutes, and the chain was re-run from inference: the five new cells were inferred on the CPU in under a minute, since Yemen's training held the GPU. Postprocess took three minutes and the density stage about 40.

What Egypt needs next

A second, larger holdout. Cairo's nine chips decided the checkpoint on four installations. Holding out part of Aswan instead would score both checkpoints on utility parks, which is most of what Egypt has mapped.

Rooftop mapping or a calibration quadrat. 523 mapped rooftop features nationally are too few for the precision table to price a rooftop candidate; see the candidate section. The first area is registered: Al Minya f5, a sampled 3 km farm box near Minya (89% cropland, 4,817 VIDA buildings), swept on 2026-10-29 against Esri imagery of 2025-05-25, holds no PV at all, ground or rooftop. OSM's live API and an Overpass count agree. It is a confirmed zero, used: false, since no farm detector has been run on Egypt.

A retrain with the pool and wastewater hard negatives. Add egypt_hard_neg to the corpus beside egypt:R and compare against v12_combined_egypt on installation recall at matched precision, and on how many leads still land on pools and basins. The leads on unmapped treatment plants are the measure that matters, and OSM cannot count them: a reviewed sample of the new leads can.

Reproducing

pixi run python scripts/overpass_labels_chunked.py --bbox=24.7,22.0,36.9,31.7 \
  --iso3 EGY --name egypt --tiles 4x4 --timeout 300 --retries 8
systemd-run --user --collect --unit=earthpv-country-queue -p WorkingDirectory="$PWD" \
  -p LimitNOFILE=65536:65536 -p MemoryMax=4G bash scripts/run_country_queue.sh

The queue pulls the labels, runs the solar-thermal filter, composes Egypt, picks the holdout and hands the country to scripts/run_country_compute.sh egypt (chips, training, the v5 comparison, inference and the atlas chain, behind marker files).

The pool and wastewater hard negatives, from Geofabrik's extract (--pbf; without it the command queries Overpass, whose mirrors were overloaded on the day):

pixi run earthpv osm-hard-negatives --aoi egypt --pbf egypt-261028.osm.pbf
pixi run earthpv hard-negative-chips --aoi egypt \
  --centers data/predictions/egypt/hard_negatives_osm.parquet
pixi run python scripts/mark_val_buffer.py --aoi egypt --chips egypt_hard_neg