ZAsolar — unified_reviewall_A
Mask R-CNN (ResNet-50 + FPN) checkpoint for rooftop solar installation footprint
segmentation in South Africa. This is the
unified_reviewall_A (UnifiedRA-A)
detector from the
ZAsolar project —
the current production model for the Cape Town / Johannesburg rooftop-solar census.
Files
best_model.pth: trained PyTorch checkpoint (~169 MB)
Training Summary
- Task: installation-level rooftop solar footprint segmentation (reviewed-prediction footprints)
- Architecture: torchvision Mask R-CNN, ResNet-50-FPN backbone,
num_classes=2
- Warm-start: V3-C targeted hard-negative checkpoint (
exp003_C_targeted_hn)
- Training data: Cape Town aerial_2025 + Johannesburg Vexcel 2024, per-instance mask-trusted halo gating
- Training set id:
unified_reviewall_20260511
- Trained: 2026-05-13
- Post-processing: per-detection finalize + SAM 2.1 mask+box refinement (
configs/postproc/v4_canonical.json)
Evaluation
Grid-aggregate installed-area inventory is the primary metric; per-polygon F1 is diagnostic.
Calibration — Cape Town, 16 held-out grids (in-domain, PV/non-PV classifier attached, 2026-06-08):
| Metric | Value |
|---|
| Grid-level R² (detected vs. truth area) | 0.955 |
| Aggregate area-F1 | 0.742 |
| Area precision / recall | 0.64 / 0.88 |
| Per-grid dispersion (σ_Bw) | 0.260 |
| Coverage @ IoU 0.5 | 0.829 |
Validation — cross-domain, 6 unseen South African cities × 60 grids (Vexcel aerial, 2026-05-31):
| Metric | Value |
|---|
| Grid-level R² | 0.971 |
| Aggregate area-F1 | 0.763 |
| Bulk ratio (detected / truth) | 1.04 |
| Area precision / recall | 0.75 / 0.78 |
Aggregate calibration holds on cities the model never trained on; per-grid
dispersion widens out-of-domain (σ_Bw 0.26 → 1.23), which the downstream PV/non-PV
classifier and per-city threshold calibration are designed to absorb.
Usage
1from huggingface_hub import hf_hub_download
2from core.models.maskrcnn import build_solar_maskrcnn # from the ZAsolar repo
3
4ckpt = hf_hub_download("botao0818/zasolar-unified-reviewall-A", "best_model.pth")
5model = build_solar_maskrcnn(pretrained_path=ckpt, num_classes=2).eval()
The checkpoint is a plain PyTorch state dict (raw, or nested under model/state_dict).
For the full inference + evaluation pipeline, see detect_and_evaluate.py in the repo.
Intended Use
Research and geospatial analysis around rooftop solar detection. Not a drop-in
Transformers model; load it with the project's PyTorch code.
Limitations
- Trained for ZAsolar imagery and labeling conventions
- Evaluation conclusions depend on the repository's explicit
installation profile and grid-aggregate framing
- Out-of-domain generalization (new geographies / imagery sources) shows wider per-grid dispersion (see validation)
License
MIT (code/weights). Annotations governed separately — see repo data/annotations/ANNOTATION_SPEC.md.