Nationwide houseshold-level solar panel identification with deep learning
Nationwide houseshold-level solar panel identification with deep learning. See details from our project website. We used Inception-v3 as the basic framework for image-level classification and developed greedy layerwise training for segmentation and localization. CNN model was developed with TensorFlow.
slimpackage is credited to Google.
train_segmentation.pywere developed with reference to inception. The inception library should be downloaded from this source. The model was developed with Python 2.7.
git clone https://github.com/wangzhecheng/DeepSolar.git cd DeepSolar
The model is fine-tuned based on the pre-trained model. The pre-trained model was trained on ImageNet 2012 Challenge training set. It can be downloaded as follows:
mkdir ckpt cd ckpt curl -O http://download.tensorflow.org/models/image/imagenet/inception-v3-2016-03-01.tar.gz tar xzf inception-v3-2016-03-01.tar.gzThen download pre-trained classification model and segmentation model for solar panel identification task.
curl -O https://s3-us-west-1.amazonaws.com/roofsolar/inception_classification.tar.gz tar xzf inception_classification.tar.gz curl -O https://s3-us-west-1.amazonaws.com/roofsolar/inception_segmentation.tar.gz tar xzf inception_segmentation.tar.gzBecause the restriction of data sources, we are sorry that we cannot make the training and test set publicly available currently.
Install the required packages:
pip install -r requirements.txtFirstly, you should generate data file path lists for training and evaluation. Here is the example:
python generate_data_list.pyThen you can train the CNN model for classification. You can start from ImageNet model:
python train_classification.py --fine_tune=Falseor start from our well-trained model:
python train_classification.py --fine_tune=TrueAfter training is done, test the model:
python test_classification.pyOur model can achieved overall recall 88.9% and overall precision 93.2% on test set. For training the segmentation branch, you should firstly train the first layer:
python train_segmentation.py --two_layers=FalseThen train the second layer.
python train_segmentation.py --two_layers=TrueAfter training is done, you can test the average absolute area error rate:
python test_segmentation.pyOur well-trained model can reach 27.3% for residential area and 18.8% for commercial area.