Satellite Image Segmentation
Nilansh Rajput
Rupnagar, Punjab
- 0 Collaborators
This project is my team's submission for "Eye in The Sky" competition in the 7th Inter-IIT Techmeet 2018 held at IIT Bombay, Our rank was 4th among all IIT's, This Project contains the implementation of U-Net modified for the problem of satellite image classification. ...learn more
Project status: Published/In Market
Intel Technologies
Intel Python
Overview / Usage
In this project we segment the satellite images into eight different categories, i.e. roads, trees, bare soil, rails, buildings, grass, water, pools. With only 14 High resolution labelled images as training data
With almost every competent nation spending a lot of human resources and capital on the development of space technology in general and satellites in particular, it becomes necessary for the academia to take responsibility to encourage research which can help utilise the data provided by these satellites adequately. Satellite imagery, which is the motivation behind the problem statement, finds application in various problems that concern the world right now. Urbanisation and the change of land use can be analysed, which is directly being linked to the climate change problem. Moreover, effective disaster management and monitoring hostile regions are areas which can be worked upon more efficiently using the satellite imagery data. Thus, it makes analysing and classifying satellite images an exciting and productive piece of work.
Methodology / Approach
We settled on a modified U-net that previously had shown us very good results in the problem of TGS Salt Identification Challenge in which we participated earlier .We tried Nested-U-Net also but its convergence was slow and performance wasn’t satisfactory enough, so we settled on U-net did our experimentation with it to make our final model.As we mentioned before classes are very different and given the lack of data getting a good score with a single model would be very tough. Instead, we decided to train a separate network for each class, except water.
- **Implementation: **
Unet -
The contracting path follows the typical architecture of a convolutional network. It consists of the repeated application of two 3x3 convolutions (unpadded convolutions), each followed by a Rectified linear unit (ReLU) ,Batch Normalization and a 2x2 max pooling operation with stride 2 for downsampling. At each downsampling step we double the number of feature channels.
Every step in the expansive path consists of an upsampling of the feature map followed by a 2x2 convolution (“up-convolution”) that halves the number of feature channels, a concatenation with the correspondingly cropped feature map from the contracting path, and two 3x3 convolutions, each followed by a ReLU.
At the final layer a 1x1 convolution is used to map each 32 component feature vector to the 2 classes(we are making binary models). In total the network has 21 convolutional layers.
(Full size is image of our architecture is provided with our other files)
We are using Upsampling2D layer instead of Conv2DTranspose to avoid Checkerboard pattern in output image.
We used Nadam Optimizer (Adam with Nesterov momentum) and trained the network for 50 epochs with a learning rate of 1e-3 and additional 50 epochs with a learning rate of 1e-4. Each epoch was trained on 50 batches, each batch containing 64 image patches. Each batch was created with randomly cropped 144x144 patches from original images.
Initially we tried 256x256 but due to limited GPU memory this would significantly reduce the batch size from 64 to 2 (we were using 12gb ram Tesla K80 GPU provided free by Google Colaboratory)
Loss Function:We are using Binary cross entropy and Jaccard approximation for our loss function as this is used in most of image segmentation problem. We took this idea from previous work of Dstl Satellite Imagery Competition winner blog.
**METHODOLOGY: **We started by making binary masks for the following seven classes. A separate model has been trained for each of the following classes
Technologies Used
Tensorflow, Keras, Opencv, Numpy, Pandas
Repository
https://github.com/Nilanshrajput/Inter-IIT-Techmeet-Vision-Challenge