Home

Awesome

Detecting available rooftop area from satellite images to install photovoltaic panels

The repository contains the code for Machine Learning course 2020 (CS-433) project 2 at EPFL in partnership with LESO-PB Lab and it is also the baseline code for the reasearch project: 'Quantification of the suitable area for rooftop solar panel installation from overhead imagery using Convolutional Neural Networks' [IOPscience].

@inproceedings{castello2021quantification,
  title={Quantification of the suitable rooftop area for solar panel installation from overhead imagery using Convolutional Neural Networks},
  author={Castello, Roberto and Walch, Alina and Attias, Rapha{\"e}l and Cadei, Riccardo and Jiang, Shasha and Scartezzini, Jean-Louis},
  booktitle={Journal of Physics: Conference Series},
  volume={2042},
  number={1},
  pages={012002},
  year={2021},
  organization={IOP Publishing}
}

More information about this project can be found in the folder documents.


General Information

Team

The project is accomplished by team OverfitTeam with members:

Environment

The project has been developed and test with python3.6.

The required library are numpy, Pytorch, sklearn, openCV

The library for visualization is matplotlib.


Project Information

Topic: Detecting available rooftop area for PV installation

The project target is to segment in aerial images of Switzerland (Geneva) the area available for the installation of rooftop photovoltaics (PV) panels, namely the area we have on roofs after excluding chimneys, windows, existing PV installations and other so-called ‘superstructures’. The task is a pixel-wise binary-semantic segmentation problem. And we are interested in the class where pixels can be classified as ‘suitable area’ for PV installations.

Screenshot from 2020-12-16 13-11-43

Data

Methods

Results

We are able to automatically detect in test images the available rooftop area at pixel level with performances comparable the state-of-the-art. In particular, focusing only on the residential area images we got on the test set an accuracy of about 0.97 and an Intersection over Union index of 0.77 using only 244 images for training. Below an example of a prediction on the test set.

intro


Project structure

├── labelling_tool
│   ├── crop.py
│   ├── data-verification.ipynb
│   ├── label_images_from_txt.py
│   ├── label_images.py
│   ├── move.py
│   ├── README.md
│   └── scan_images.py
├── loss
│   ├── 1.png
│   ├── 2.png
│   ├── loss.ipynb
│   ├── loss.py
│   └── __pycache__
│       └── loss.cpython-38.pyc
├── main.ipynb
├── model
│   ├── model.ipynb
│   ├── __pycache__
│   │   └── unet.cpython-38.pyc
│   └── unet.py
├── plots
│   ├── all
│   │   ├── batch5loss4
│   │   │   ├── history_train_ioubatch5loss4_1000.npy
│   │   │   ...
│   │   │   └── loss400_batch5loss4.png
│   │   └── batch5loss9
│   │       ├── history_train_ioubatch5loss9_1000.npy
│   │       ... 
│   │       └── loss1000_batch5loss9.png
│   ├── other
│   │   ├── b5w4_iou.pdf
│   │   ├── b5w4_loss.pdf
│   │   ├── history_train_iou09122020.npy
│   │   ...
│   │   ├── loss_batch5loss4.pdf
│   │   └── loss_batch5loss5.pdf
│   ├── plots.py
│   └── residencial
│       ├── history_train_ioubatch5loss6_1000.npy
│       ...
│       ├── loss1000_batch5loss6.png
│       └── loss_batch5loss6.png
├── process_data
│   ├── data_loader.py
│   ├── import_test.py
│   ├── normalize.py
│   └── __pycache__
│       ├── data_loader.cpython-38.pyc
│       ├── data_noara_loader.cpython-38.pyc
│       └── data_nopv_loader.cpython-38.pyc
├── README.md
├── reference
│   └── Literature
│       ├── Adam a method \for stochastic optimization.pdf
│       ├── Deep learning \in the built environment automatic detection of rooftop solar panels 
│           using Convolutional Neural Networks.pdf
│       ├── Dropout vs. batch normalization an empirical study.pdf
│       ├── Satellite Image Segmentation \for Building Detection using U-Net.pdf
│       ├── Semantic Segmentation of Satellite Images using Deep Learning.pdf
│       └── U-Net, Convolutional Networks \for Biomedical Image Segmentation.pdf
├── run.py
└── train
    ├── pred_residencial_3.png
    └── train.py

Report

documents/report.pdf: a 4-pages report of this project

Pre-trained models & data

Both are available here