Project · Intermediate · about 16 hours
Land cover from satellite images with transfer learning
Classify 27,000 Sentinel-2 image patches into 10 land cover classes, first with a small CNN from scratch and then by fine-tuning a pretrained network.
Skills:Deep learning, Machine learning, Python
Part of: AI/ML Engineer
Data and licences
- EuroSAT (RGB), Helber et al. ↗MIT (Copernicus Sentinel data terms also apply)
Brief
EuroSAT contains 27,000 labelled 64 by 64 pixel image patches from the Sentinel-2 satellite in 10 classes, including forest, river, highway, pasture and residential. The authors report about 98.6% accuracy with deep CNNs. You will see how close you get, and how much of the gap is closed by transfer learning rather than a bigger model.
This project runs on a laptop CPU with patience, or quickly on a free notebook GPU.
What to build
Download the RGB version from the Zenodo link in the dataset README. Create a stratified 70/15/15 split and save the file lists.
Train a small CNN from scratch with augmentation (flips, small rotations). Plot training and validation loss.
Fine-tune a pretrained ImageNet model: replace the head, train it with the backbone frozen, then unfreeze and train with a lower learning rate. Use the normalisation the pretrained weights expect.
Compare the two on the test set: accuracy, per-class recall, training time, parameters and file size.
Show the 20 most confident mistakes. Which class pairs are confused, and would a human also struggle?
Deliverables
Repository with
train_scratch.py,train_transfer.py,evaluate.py, saved splits andREADME.md
How it is graded
Reviewers run the evaluation script on your saved checkpoints and read your comparison. Clean experimental hygiene counts more than the final accuracy.
Stretch
Export the model to ONNX, measure CPU latency per image and serve it behind a small FastAPI endpoint.
Deliverables
- A training script for a small CNN trained from scratch, with curves and test accuracy
- A fine-tuned pretrained model (for example ResNet-18) with the same split and metrics
- A per-class error analysis with example images the model gets wrong
- A README comparing accuracy, training time and model size
How a reviewer grades it
| Criterion | Weight | What good looks like |
|---|---|---|
| Fixed, stratified train, validation and test split, saved to disk and reused | 20% | |
| Training loop with validation, early stopping and a saved best checkpoint | 25% | |
| Transfer learning done correctly (matching input normalisation, frozen then unfrozen layers) | 30% | |
| Honest comparison and error analysis | 25% |