Roberthowe/bdappv
BDAPPV — Aerial Images of Rooftop Photovoltaic Installations BDAPPV is a dataset of aerial images of rooftop PV installations in France and Belgium, with segmentation masks and installation metadata. Images are provided by two aerial imagery providers (Google and IGN), making it suitable for both segmentation/classification benchmarks and distribution shift evaluation across imagery sources. Paper: Kasmi et al., Scientific Data, 2023 — arXiv:2209.03726 Dataset… See the full description on the dataset page: https://huggingface.co/datasets/Roberthowe/bdappv.
0128
1---2license: cc-by-4.03task_categories:4 - image-segmentation5 - image-classification6language: []7tags:8 - solar-panels9 - photovoltaic10 - remote-sensing11 - aerial-imagery12 - segmentation13 - distribution-shift14 - france15 - belgium16pretty_name: BDAPPV17size_categories:18 - 10K<n<100K19configs:20 - config_name: google21 data_files:22 - split: train23 path: google/train-*24 - split: validation25 path: google/validation-*26 - split: test27 path: google/test-*28 - config_name: ign29 data_files:30 - split: train31 path: ign/train-*32 - split: validation33 path: ign/validation-*34 - split: test35 path: ign/test-*36dataset_info:37 - config_name: google38 features:39 - name: identifiant40 dtype: string41 - name: image42 dtype: image43 - name: mask44 dtype: image45 - name: has_mask46 dtype: bool47 - name: split48 dtype: string49 - name: surface50 dtype: float3251 - name: azimuth52 dtype: float3253 - name: tilt54 dtype: float3255 - name: kWp56 dtype: float3257 - name: departement58 dtype: int3259 - name: city60 dtype: string61 - name: dateInstalled62 dtype: string63 - name: typeInstallation64 dtype: int3265 - name: countArrays66 dtype: int3267 - name: countInverters68 dtype: int3269 - name: isIntegrated70 dtype: bool71 - name: selfConsumption72 dtype: bool73 splits:74 - name: train75 num_bytes: 244713301076 num_examples: 2070777 - name: validation78 num_bytes: 44134872879 num_examples: 381780 - name: test81 num_bytes: 45160770482 num_examples: 388483 download_size: 334148134684 dataset_size: 334008944285 - config_name: ign86 features:87 - name: identifiant88 dtype: string89 - name: image90 dtype: image91 - name: mask92 dtype: image93 - name: has_mask94 dtype: bool95 - name: split96 dtype: string97 - name: surface98 dtype: float3299 - name: azimuth100 dtype: float32101 - name: tilt102 dtype: float32103 - name: kWp104 dtype: float32105 - name: departement106 dtype: int32107 - name: city108 dtype: string109 - name: dateInstalled110 dtype: string111 - name: typeInstallation112 dtype: int32113 - name: countArrays114 dtype: int32115 - name: countInverters116 dtype: int32117 - name: isIntegrated118 dtype: bool119 - name: selfConsumption120 dtype: bool121 splits:122 - name: train123 num_bytes: 3204106988124 num_examples: 11526125 - name: validation126 num_bytes: 875106431127 num_examples: 3206128 - name: test129 num_bytes: 694527761130 num_examples: 2593131 download_size: 4783574371132 dataset_size: 4773741180133---134 135# BDAPPV — Aerial Images of Rooftop Photovoltaic Installations136 137BDAPPV is a dataset of aerial images of rooftop PV installations in France and Belgium,138with segmentation masks and installation metadata. Images are provided by two aerial139imagery providers (Google and IGN), making it suitable for both segmentation/classification140benchmarks and **distribution shift** evaluation across imagery sources.141 142**Paper:** [Kasmi et al., Scientific Data, 2023](https://doi.org/10.1038/s41597-023-01951-4) — [arXiv:2209.03726](https://arxiv.org/abs/2209.03726)143 144---145 146## Dataset overview147 148| Provider | Images | Positifs (masks) | Négatifs | Note |149|----------|--------|-----------------|----------|------|150| Google | 28,408 | 13,303 | 15,105 | 399 images excluded (no metadata entry) |151| IGN | 17,325 | 7,685 | 9,640 | |152 153- Images are 400×400 px PNG files.154- Google images are a superset: every IGN installation also has a Google image.155- Masks are binary PNGs (same resolution as images).156 157---158 159## Data structure160 161```162bdappv/163├── google/164│ ├── img/ # 28,408 images (28,807 raw − 399 excluded)165│ └── mask/ # 13,303 segmentation masks166├── ign/167│ ├── img/ # 17,325 images168│ └── mask/ # 7,685 segmentation masks169├── annotations.csv # manifest: one row per (installation × provider)170├── metadata.csv # installation-level metadata171└── README.md172```173 174---175 176## Loading the dataset177 178```python179from datasets import load_dataset180 181# Google imagery (default)182ds = load_dataset("gabrielkasmi/bdappv", "google")183 184# IGN imagery185ds = load_dataset("gabrielkasmi/bdappv", "ign")186```187 188Each example contains:189 190```python191{192 "identifiant": "OSIBG1RDEDJ", # installation ID193 "image": <PIL Image>, # 400×400 aerial image194 "mask": <PIL Image>, # segmentation mask (None if has_mask=False)195 "has_mask": True, # False = negative sample (no panel)196 "split": "train", # train / val / test197 "surface": 22.0, # panel surface (m²)198 "azimuth": -20.0, # panel azimuth (degrees)199 "tilt": 20.0, # panel tilt (degrees)200 "kWp": 3010.0, # peak power (Wp)201 "departement": 31, # French department code202 "city": "Castanet-Tolosan",203 "dateInstalled": "2007-09-01",204 ...205}206```207 208---209 210## Recommended usage patterns211 212### Segmentation (positives only)213 214```python215ds = load_dataset("gabrielkasmi/bdappv", "google")216train_seg = ds["train"].filter(lambda x: x["has_mask"])217# 13,303 images with masks across all splits218```219 220### Binary classification (panel / no panel)221 222```python223# Both providers have validated negatives224ds_google = load_dataset("gabrielkasmi/bdappv", "google") # 13,303 pos / 15,105 neg225ds_ign = load_dataset("gabrielkasmi/bdappv", "ign") # 7,685 pos / 9,640 neg226# has_mask is the binary label (True = panel present)227```228 229### Distribution shift benchmark (cross-provider)230 231The intended protocol for evaluating robustness to imagery distribution shift:232 233```python234train = load_dataset("gabrielkasmi/bdappv", "google", split="train")235test = load_dataset("gabrielkasmi/bdappv", "ign", split="test")236# Train on Google, evaluate on IGN — same installations, different sensors237```238 239Note: pooling both providers for training is not recommended as a default setup.240Google and IGN images of the same installation share the same ground truth object;241pooling them amounts to domain augmentation rather than independent data, and242conflates the distribution shift signal. If you want to pool, build a custom243dataloader merging both configs.244 245---246 247## Train / val / test split248 249Split is based on **spatial holdout by French department** to prevent geographic250leakage between splits. All Belgian and small-department installations are assigned251to train.252 253| Split | Installations | Departments |254|-------|--------------|-------------|255| train | 20,707 (73%) | all others |256| val | 3,817 (13%) | 3, 9, 11, 23, 44, 47, 52, 54, 59, 66, 72, 82, 88, 92 |257| test | 3,884 (14%) | 2, 4, 6, 15, 16, 32, 38, 42, 51, 64, 67, 85, 91 |258 259The split is fixed and deterministic (seed=42). Do not re-split to ensure260comparability with published results.261 262---263 264## Licenses265 266This dataset combines components under different licenses:267 268| Component | License |269|-----------|---------|270| Segmentation masks & annotations | [CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/) |271| Installation metadata | [CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/) |272| Google aerial images | [Google Earth Engine ToS](https://cloud.google.com/maps-platform/terms) — and underlying third-party imagery licensing (restrictions on redistribution apply) | 273| IGN aerial images | [Etalab Open License 2.0](https://www.etalab.gouv.fr/licence-ouverte-open-licence/) — free incl. commercial use |274 275**Important:** the Google imagery restricts commercial use. For commercial applications,276use the IGN configuration only (`load_dataset("gabrielkasmi/bdappv", "ign")`).277 278---279 280## Citation281 282```bibtex283@article{kasmi2023bdappv,284 title = {A crowdsourced dataset of aerial images with annotated solar285 photovoltaic arrays and installation metadata},286 author = {Kasmi, Gabriel and Saint-Drenan, Yves-Marie and Trebosc, David287 and Jolivet, Rapha{\"e}l and Leloux, Jonathan and Sarr, Babacar288 and Dubus, Laurent},289 journal = {Scientific Data},290 volume = {10},291 number = {1},292 pages = {59},293 year = {2023},294 publisher = {Nature Publishing Group},295 doi = {10.1038/s41597-023-01951-4}296}297```