This repository contains code to train landcover classification models on Sentinel-2 data. The current pipeline allows for training a U-Net model with an EfficientNet backbone on Sentinel-2 L2A data from sentinelhub. Labels can be fetched from OpenStreetMap all over the world, or from the CNES Land Cover dataset for France. Finetuning Prithvi is WIP, as well as unsupervised pre-training for the U-Net and the Prithvi model.
The project was initially developed as part of a diploma-project at HTL-Spengergasse in cooperation with EOX IT Services and supported by the ESA Network of Resources Initiative. Team: Maximilian Wolf, Luis Kalckstein, Lilia Gerber, Dominik Fluch, Tobias Lendl
git clone [email protected]:MaxWolf-01/sentinel2-landcover-classification.git
cd sentinel2-landcover-classification
conda create -n s2lc python="3.10"
conda activate s2lc
pip install -r requirements.txtBefore you can run any scripts from the root dir, you will need to:
export PYTHONPATH="$PYTHONPATH:$(pwd)"To download the training data, run src/data/download_sentinel.py and src/data/download_labels.py with the desired parameters.
For more information, run the scripts with the --help flag or check the documentation in the source code.
Configs for the data download, such as bands, resolution, timespan, evalscripts and pre-defined areas of interest can be found in src/configs/data_config.py.
Example:
python src/data/download_sentinel.py at --workers 2 --frequency QS # downloads a Sentinel-2 image for Austria every quarter per label
python src/data/download_labels.py at osm-multiclass --workers 4Downloads can be interrupted and resumed by adding the --resume flag.
For re-downloading, use the --overwrite flag.
Visualize the downloaded data with:
python src/data/plotting.py at osm-multiclassOnce you have the desired data, run the training script with the desired config, e.g.:
python src/train_segmentation.py at osm-multiclass efficientnet-unet-b5 --bs 32 --epochs 30 --loss-type focal --weighted-loss --name "wandb-run-name" # disable wandb with "--wandb"Flags like --type debug set presets for a batch size of 1, no logger, compiling, etc.
To use Prithvi, download the pretrained weights of the Prithvi foundation model from Hugging Face:
curl -L "https://huggingface.co/ibm-nasa-geospatial/Prithvi-100M/resolve/main/Prithvi_100M.pt?download=true" -o "weights/Prithvi_100M.pt"Before commiting, make sure to
pip install pre-commit
pre-commit installOr run pre-commit run --all-files to check manually.
To log runs to the wandb team workspace, add the name of the wandb entity in the .env file as WANDB_ENTITY.
- The repository draws inspiration from the HLS Foundation repository and uses the IBM NASA Geospatial model (Prithvi).
- The EfficientNet-Unet implementation is based on the EfficientNet-PyTorch repository.