justjoshtings / satellite_image_segmentation

Experimented with a U-Net variant to perform pixel wise multi-class classification to segment high resolution satellite imagery into land use types with potential applications in deforestation and flood monitoring. Developed with TensorFlow framework.
MIT License
25 stars 5 forks source link
cnn-keras resnet-50 satellite-imagery semantic-segmentation tensorflow2 transfer-learning u-net

Satellite Imagery Semantic Segmentation with CNN

Project Description

Predicting land cover types on remote sensing data using Convolutional Neural Networks. Experimented with U-Net and and U-Net with RestNet50 Encoder backbone architectures to segment satellite imagery.

Sample Predictions

Sample Prediction Masks

Table of Contents

  1. How to Run
  2. Folder Structure
  3. Datasets
  4. Neural Network Architectures
  5. Presentation
  6. Report
  7. References
  8. Licensing

How to Run

  1. Clone this repository. Navigate to desired directory and use:
    git clone git@github.com:justjoshtings/satellite_image_segmentation.git
  2. The Python notebook is optimized and set up for proper execution in Google Colab. I'd recommend to upload Land_Cover_Segmentation.ipynb and execute from there. Please see Folder Structure section for how to set up the initial folder structure. The Python notebook will move and create new directories to accomodate for certain preprocessing procedures but the initial setup is shown below.
  3. Download the data from the competition3 and upload all data into Google Drive workspace based on the prior mentioned folder structure.
  4. Execute the Python notebook. Note that for training, it is recommended to connect to a GPU enabled runtime for faster training speeds.

Folder Structure

Initial Google Drive Folder Setup for Google Colab:

satellite_image_segmentation
│    Land_Cover_Segmentation.ipynb
│
└───data
│    │   class_dict.csv
│    │   metadata.csv
│    │
│    └───test
│    │    │ 1499_sat.jpg
│    │    │ 1500_sat.jpg
│    │    │ ...
│    │
│    └───train
│    │    │ 199_sat.jpg
│    │    │ 199_mask.png
│    │    │ ...
│    │
│    └───valid
│    │    │ 1074_sat.jpg
│    │    │ 1074_sat.jpg
│    │    │ ...

Datasets

DeepGlobe Land Cover Classification Dataset from the Competition3

or Kaggle.

Neural Network Architectures

2 types of Fully Convolutional Networks4 were explored with similar final results on validation and testing data.

U-Net Architecture

U-Net

Ronneberger et al. (2015)'s U-Net1

RestNet Encoder Backbone, U-Net Decoder Architecture

ResNet Backbone U-Net Neven, Robby & Goedemé, Toon. (2021). A Multi-Branch U-Net for Steel Surface Defect Type and Severity Segmentation. Metals. 11. 870. 10.3390/met11060870.2

Report

References

  1. Ronneberger et al. (2015)'s U-Net
  2. Neven, Robby & Goedemé, Toon. (2021). A Multi-Branch U-Net for Steel Surface Defect Type and Severity Segmentation. Metals. 11. 870. 10.3390/met11060870.
  3. DeepGlobe Land Cover Classification Dataset from the Competiton
    @InProceedings{DeepGlobe18,
    author = {Demir, Ilke and Koperski, Krzysztof and Lindenbaum, David and Pang, Guan and Huang, Jing and Basu, Saikat and Hughes, Forest and Tuia, Devis and Raskar, Ramesh},
    title = {DeepGlobe 2018: A Challenge to Parse the Earth Through Satellite Images},
    booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},
    month = {June},
    year = {2018}
    }
  4. Long et al. (2015)'s Fully Convolutional Network (FCN)

Licensing