Research

Remote sensing / Computer vision

Spacement PVExtent

Segmentation of rooftop photovoltaic arrays from aerial orthophotos, with polygon extraction and experimental analysis of module layout, roof geometry and change over time.

A standalone research package developed and maintained by Valeford under the Spacement brand.

Maintainer
Valeford
Results recorded
22–23 October 2026
Code license
Apache-2.0

01 / Evaluation

Results across two imagery sources

Performance on the earlier PV4GER imagery does not transfer directly to current Geobasis NRW orthophotos. The two evaluations are reported separately.

Current NRW imagery

321 roof crops from ten districts, including 42 crops with PV. The sample contains 318 randomly selected buildings and three buildings selected through OpenStreetMap solar tags. Labels were drawn by one human annotator without model predictions.

NRW test set v1. Released model profiles, evaluated at their documented thresholds.
ModelPixel IoU95% CIPrecisionPV crops foundFalse alarms95% CI
Fjell / V754.1%[42.4–63.3]74.8%27 / 426.5%[3.9–9.4]
Tinden / V5 + V653.3%[42.5–61.8]65.9%34 / 4216.5%[12–21.1]
Vidda / V544.1%[33.3–52.5]49.2%35 / 4233.7%[28.4–38.9]

IoU measures overlap between predicted and reference PV pixels. Brackets show 95% bootstrap intervals over crops. A PV crop is found when a prediction overlaps its reference; a false alarm is a predicted component of at least 1 m² on a PV-free crop.

Fjell raises fewer false alarms but misses 15 of the 42 PV crops. Its IoU difference from Tinden is not distinguishable in the paired bootstrap comparison. The label audit found that constructed NRW training labels omit substantial parts of real arrays.

This evaluation uses one annotator and provides no inter-annotator agreement. The building-footprint filter under-represents commercial roofs larger than approximately 650 m².

A later V8 experiment detects 31 of 42 PV crops, with 48.3% IoU and an 8.6% false-alarm rate. It recovers some recall but increases boundary errors. V8 is documented as an experiment, separate from the three release profiles.

PV4GER benchmark

421 reserved RGB crops at 10 cm per pixel, totalling 43,110,400 pixels. The project creates geographic splits from the 4,027-crop PV4GER-SEG dataset using 10 km blocks and a 1 km centre buffer.

PV4GER test partition. Pixel metrics for the three release profiles.
ModelPixel IoUPrecisionRecall
Fjell / V788.83%94.46%93.71%
Tinden / V5 + V689.15%93.61%94.93%
Vidda / V588.16%93.89%93.53%

These are results on this imagery and partition. They do not establish performance across other regions, acquisition dates or sensors. The NRW evaluation above measures a separate transfer problem.

02 / Visual evidence

Predictions and observed errors

Figures show actual Vidda / V5 output. Selection rules, input imagery and the checkpoint hash are recorded with the source figures.

Three PV4GER crops with orthophoto, reference mask and V5 prediction, including a skylight incorrectly classified as PV.

PV4GER examples selected at the 90th, 50th and 10th percentiles of per-crop IoU, among 418 test crops with at least 500 PV pixels. IoU is 97.4%, 91.3% and 64.6%. The lowest example includes merged module rows and a skylight false positive.

View full-size figure
All three PV crops from an earlier spatially separate NRW holdout. V5 detects part of one array and misses the other two.

All three PV crops from an earlier, separate NRW holdout. Vidda finds 86% of reviewed PV pixels on one building and misses the other two arrays. This small pilot is separate from the 321-crop NRW test set.

View full-size figure

Imagery: GeoBasis NRW/openNRW, including the PV4GER-derived crops. Datenlizenz Deutschland Zero 2.0.

Figure provenance

03 / Method & outputs

From image pixels to array geometry

The package separates data preparation, model training, inference and evaluation. Recorded configurations define each named release profile.

Segmentation
Vidda and Fjell use DeepLabV3+ with a ResNet50 encoder. Fjell adds reviewed NRW hard negatives to the Vidda training recipe. Tinden averages V5 and V6 predictions with eight-orientation test-time augmentation and temperature calibration.
Tiled inference
Release profiles use 400-pixel tiles with overlap and Hann blending. Vidda uses 25% overlap; Fjell and Tinden use 50%. Probability thresholds and other inference settings are recorded in the repository.
Geometry and derived estimates
Predicted masks can be converted to polygons, optionally regularized, and exported as GeoJSON. Further modules estimate module placement, fit roof planes from a digital surface model, and match arrays between survey dates.
V5 polygon and module-grid output on three test crops. The rightmost example counts a skylight as a PV array.

Polygon extraction and fitted 400 W module grids on the same PV4GER examples. Without a digital surface model, the roof is treated as flat. In the rightmost crop, the skylight is incorrectly counted as a 4.8 kWp array.

View full-size figure

Module counts, capacity and yield are estimates that inherit segmentation and geometry errors. Roof-plane fitting requires a digital surface model; spectral analysis requires a real near-infrared band. The RGB fallback does not produce physically meaningful NDVI. Outputs require site-specific verification.

04 / Reproducibility

Source and research record

The repository contains code, a dependency lockfile, training and release configurations, dataset import procedures, evaluation scripts and research audits. Python 3.11 or later is required; inference supports CPU, Apple Silicon MPS and NVIDIA CUDA.

Trained checkpoints, imagery, dataset labels and experiment outputs are kept outside Git. The published profile commands expect local checkpoints under runs/. A fresh clone alone is therefore insufficient to reproduce model inference or regenerate the figures.

This page describes the research record at repository commit 5b8c100. Follow the repository for subsequent changes.

Research sources

Original project code is copyright 2026 Valeford and licensed under Apache-2.0. Dataset and pretrained-weight terms are documented separately. Software and outputs are provided as is; estimates do not replace structural, electrical or permitting assessments.