case study · 2026

EuroSAT Land-Use Classifier: from 32% to 98.1% accuracy on satellite images

Classifies Sentinel-2 satellite tiles into ten land-use types, going from a 32% baseline to 98.1% accuracy with a fine-tuned ResNet-18. The live demo runs both neural networks entirely in the browser.

role
Solo project
timeline
2026
stack
Python, PyTorch, scikit-learn, ONNX Runtime Web
status
Live demo
Screenshot of EuroSAT Land-Use Classifier
01

The problem

EuroSAT has 27,000 RGB tiles of 64×64 pixels from the Sentinel-2 satellite, each labelled as one of ten land-use classes such as Forest, Highway, Residential or SeaLake. Every model is trained on the same stratified 80/20 split and scored once on the same 5,400 held-out tiles. Model selection only ever uses cross-validation or a validation split, so the test set never influences a choice.

02

What I found

  • The input representation mattered more than the model: Naive Bayes jumps from 32% on raw pixels to 75% on a 378-dimension descriptor of colour, HSV, HOG and LBP texture features.
  • The classes overlap. k-means cleanly recovers SeaLake and Forest but blurs the crop and vegetation classes, and the data has no natural ten-cluster structure.
  • A single decision tree overfits (99.9% train, ~78% cross-validated); random forests and gradient boosting fix that, reaching 88.4% and 92.0%.
  • Letting the network learn its own features was the biggest step: a 289k-parameter CNN trained from scratch reaches 97.6%, and fine-tuning ResNet-18 adds only half a point more.
  • Most of the remaining 102 errors are genuinely ambiguous tiles, such as a highway cutting through a forest, or crop types that look alike at 10 m resolution.
03

The demo

Both CNNs are exported to ONNX and checked against PyTorch on the full test set, then served as a static Hugging Face Space. Inference runs in the browser with ONNX Runtime Web (WebAssembly), so there is no server: pick a tile or upload your own and the two models classify it side by side.

04

Architecture

A reusable Python package for data, features, evaluation and models, with one script per stage of the analysis.

  1. Sentinel-2 tiles
  2. Features & augmentation
  3. NB → trees → CNNs
  4. ONNX export
  5. Browser demo
05

Results

98.1%
test accuracy, fine-tuned ResNet-18
97.6%
CNN trained from scratch
92.0%
best with hand-crafted features
32%
starting baseline
next projectA2Z Auto Parts