Satellite Image Classifier (Custom CNN)

This repository contains a custom convolutional neural network trained on satellite imagery for land classification in France. The model is inspired by the foundational book Deep Learning with Pytorch, Eli Stevens, Luca Antiga, Thomas Viehmann

Dataset: hadrilec/satellite-pictures-classification-ign-france


πŸ— Model Architecture

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        
        # Feature extractor
        self.conv1 = nn.Conv2d(4, 16, kernel_size=3, padding=1) # (RGB + EDGE: 3 + 1)
        self.bn1 = nn.BatchNorm2d(16)
        
        self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)
        self.bn2 = nn.BatchNorm2d(32)
        
        self.conv3 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
        self.bn3 = nn.BatchNorm2d(64)
        
        # After 3x maxpool (stride=2), 256 -> 128 -> 64 -> 32
        self.fc1 = nn.Linear(64 * 32 * 32, 256)
        self.fc2 = nn.Linear(256, 64)
        self.fc3 = nn.Linear(64, 4)  # 4 classes

        self.dropout = nn.Dropout(0.5)

    def forward(self, x):
        # Conv layers
        out = F.relu(self.bn1(self.conv1(x)))
        out = F.max_pool2d(out, 2)  # 256 -> 128
        
        out = F.relu(self.bn2(self.conv2(out)))
        out = F.max_pool2d(out, 2)  # 128 -> 64
        
        out = F.relu(self.bn3(self.conv3(out)))
        out = F.max_pool2d(out, 2)  # 64 -> 32
        
        # Flatten
        out = out.view(out.size(0), -1)
        
        # Fully connected layers
        out = F.relu(self.fc1(out))
        out = self.dropout(out)
        
        out = F.relu(self.fc2(out))
        out = self.fc3(out)  # logits, apply CrossEntropyLoss
        return out

Example Notebook

We provide an example notebook that demonstrates how to train the model:

Open the example notebook

This notebook is intended as a starting point for experimentation and helps you quickly see how to use the dataset in practice.

Accuracy is 0.9745

IT infrastructure

The model has been trained on Onyxia datalab platform, with an NVIDIA GPU Tesla T4.

πŸ“ˆ Training & Validation Loss

Below is the training vs. validation loss curve:

Training vs Validation Loss


πŸ–Ό Misclassified Samples

Here is a facet plot showing some misclassified images from the validation set:

Misclassified Samples


πŸ–Ό Correctly Classified Samples

Here is a facet plot showing some well-classified images from the validation set:

Correctly Classified Samples

Downloads last month
3
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Dataset used to train hadrilec/satellite-pictures-classification-ign-france-model

Space using hadrilec/satellite-pictures-classification-ign-france-model 1

Evaluation results

  • accuracy on hadrilec/satellite-pictures-classification-ign-france
    self-reported
    0.973