Predict the Leaf Area Index (LAI) on
This work, which is governed by the MIT license, is a contribution to the 2023 Transfer Learning competition called "Leaf Nothing Behind" (LNB) hosted by Transfer-Learning.org. The team consists of Antoine Debouchage, Valentin Goldite, Clement Wang, and Aurelien Wery. The competition is held in partnership with World from Space.
Install requirements and this repo (dynamically) with:
pip install -e .
pip install -r requirements-dev.txt # developer only
Your data folder should be next to this repo so that the path to your data is ../data.
It should contain three folders: s1, s2 and s2-mask.
Each folder contains files under format *.tiff corresponding to the Sentinel-1,
Sentinel-2 and Sentinel-2 mask respectively of shape (256, 256) (channels last).
The name of the files should be:
<Country>_<Area>_<DateFrom>_<DateTo>-<IdxTime>-<#MeasurementBefore>-<Row>-<Column>.tiff
E.g: SPAIN_BADAJOZ_2019-03-11_2019-03-29-2-7-1-6.tiffDates should be in formal YYYY-MM-DD.
IdxTime is 0 for first time step, 1 for second time step and 2 for third time step.
#MeasurementBefore can be whatever number.
Row and Column are the coordinates of the image in a larger picture.
It is used for data augmentation only.
The mask data should be uint8 and contains: 0 no data, 1 saturated or defective, 2 cast shadows, 3 cloud shadows, 4 vegetation, 5 not vegetated, 6 water, 7 unclassified, 8 cloud medium probability, 9 cloud high probability, 10 thin cirrus, 11 snow or ice.
The directory should also contain a csv file with the names of the usable data.
It should contain three columns: '0', '1', '2' that correspond to t-2, t-1 and t.
The rows is the name of the data (with .tiff extension) in the s1, s2 and s2-mask
folders.
python lnb/data/split.py --csv_name --from_cloudy_percentage [--data_path=../data] [--prop_cloudy_val_test=20] [--cloudy_in_VT_regular=False] [--cloudy_in_train_regular=True]
The csv name should be the csv containing all your usable data.
python lnb/visualization/main.py --csv_name [--data_path=../data] [--n_images=30] [--kind=all]
Kind can be all (visualize all data and binary mask), lai (visualize LAI data),
mask (visualize mask with colors).
python lnb/data/create_grids.py --csv_name [--data_path=../data]
The csv name should be your training set.
We use the configuration manager YAECS for training.
The defaults parameters are under config/defaults.yaml. All the existing parameters are
defined in this file but the parameters config.model that are defined on config/models.yaml.
Finally, confg.archi_name is set to null and must be set to the desired architecture
name for your experiments (see section below).
To do so, we provide some example of configuration files under config/exps that
implement the different architectures and that can be merged with the default parameters
easily with the following command:
python lnb/train.py --config config/exps/<architecture>.yaml
Moreover, you can set all the parameters you want in command line as long as they are defined in the default parameters. For instance to make a scandium with layers of dimension 32 and 64 and a learning rate equal to 0.01, you can run:
python lnb/train.py --config config/exps/scandium.yaml --model.scandium.layer_channels=[16, 32] --model.scandium.learning_rate=0.01
Finally you can create your own configuration file and merge it with other config. For instance, considering you have a custom config file to fit with your data and machine:
# config/my_config.yaml
model.scandium.layer_channels: [16, 32]
data:
dataset_path: 'my_dataset/path'
csv_name: 'my_train_csv.csv'
grid_augmentation: true
dataloader:
num_workers: 4
batch_size: 2You can merge it with the default parameters and the scandium architecture with:
python lnb/train.py --config [config/exps/scandium.yaml,config/my_config.yaml]
Here the scandium config is merge first then your custom config. You can also combine the two previous methods to merge config files and set parameters in command line.
The models are automatically saved in ../models/<archi_name> with configuration.
glob refers to seasonality (2 periodic features between -1 and 1)
and optionally weather data (see /config/model/scandium_weather.yaml for an example).
- Scandium
- Titanium
- Vanadium
- Manganese
- Sodium (no input LAI)
- Aluminium (no input S1)
- Strontium
Left: target LAI, right: predicted LAI from combined Strontium (2 models) and Scandium:
An example of "de-clouding" actual data at time t:

