A newer version of the Streamlit SDK is available: 1.57.0
title: EuroSAT RGB Land Cover Classifier
sdk: streamlit
app_file: app/streamlit-app.py
EuroSAT Land Cover Classification
CNN-based land cover classification on EuroSAT, comparing RGB imagery with 13-band Sentinel-2 multispectral input.
Streamlit RGB Demo
app/app.py is a Hugging Face Spaces-ready Streamlit demo for the EuroSAT-RGB ResNet-50 classifier. It shows an Esri World Imagery map centered on Bergen, Norway, lets a user draw a rectangle, fetches the corresponding RGB map tiles, and displays the predicted EuroSAT land cover class plus the top-3 class probabilities.
The RGB model was trained on EuroSAT-RGB tiles, which are about 64x64 pixels and roughly 640m on a side. Predictions on arbitrary map regions are illustrative; for best results, draw a rectangle of roughly 500m-1km on a side over land.
Classes: Annual Crop, Forest, Herbaceous Vegetation, Highway, Industrial Buildings, Pasture, Permanent Crop, Residential Buildings, River, SeaLake.
Validation accuracy on EuroSAT-RGB: 96.8%.
Main GitHub repo: davidlsan/EuroSAT-Land-Cover-Classification
Run Locally
Place the trained RGB checkpoint at:
weights/rgb_e15_best.pt
Install dependencies with uv and start the app:
uv sync
uv run streamlit run app/app.py
For Hugging Face Spaces, use the Streamlit SDK and include app/app.py, app/model_utils.py, app/tile_utils.py, requirements.txt, and the checkpoint at weights/rgb_e15_best.pt.
Notebooks
[notebooks/01_data_exploration.ipynb](notebooks/01_data_exploration.ipynb)- RGB EDA (class balance, sample grid). Run from the repository root so PNGs land in[figures/](figures/).[notebooks/02_data_exploration_multispectral.ipynb](notebooks/02_data_exploration_multispectral.ipynb)- 13-band MSI EDA (class balance, composites, per-band stats, class-mean spectra, band correlation, RGB-MSI alignment).
Training
Run from the repository root:
python3 main.py --modality rgb --epochs 15 --batch-size 32 --num-workers 2 --lr 1e-3
CLI Flags
--modality: valuesrgbormsi. RGB loads theblanchon/EuroSAT_RGBdataset, while MSI loadsblanchon/EuroSAT_MSI.--epochs: number of full passes over the training split. Defaults to15.--batch-size: number of samples per batch. Defaults to32.--num-workers: DataLoader worker processes. Defaults to2, but0is safer for debugging.--lr: learning rate for Adam. Defaults to1e-3.--seed: seeds Python, NumPy, and PyTorch for best-effort reproducibility.