CoolFace
Datasetpublic

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.

sourceHugging Facecc-by-4.0updated 1mo agoView on Hugging Face
0likes128downloads
README.md297 linesDownload Raw Back to root
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```