{"id":13935636,"url":"https://github.com/lukasliebel/dfc2020_baseline","last_synced_at":"2025-07-19T20:33:26.569Z","repository":{"id":186534825,"uuid":"241387940","full_name":"lukasliebel/dfc2020_baseline","owner":"lukasliebel","description":"Simple Baseline for the IEEE GRSS Data Fusion Contest 2020","archived":false,"fork":false,"pushed_at":"2020-02-18T16:52:40.000Z","size":210,"stargazers_count":60,"open_issues_count":1,"forks_count":13,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-08-08T23:21:25.642Z","etag":null,"topics":["deep-learning","earth-observation","pytorch","remote-sensing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lukasliebel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-02-18T14:52:29.000Z","updated_at":"2024-07-17T08:09:00.000Z","dependencies_parsed_at":"2023-09-24T16:43:40.308Z","dependency_job_id":"85261687-11f1-4cd2-8f1a-62b6e3d5c5e5","html_url":"https://github.com/lukasliebel/dfc2020_baseline","commit_stats":{"total_commits":1,"total_committers":1,"mean_commits":1.0,"dds":0.0,"last_synced_commit":"3640faf30d16c37bc35761a6a1323747992fc05d"},"previous_names":["lukasliebel/dfc2020_baseline"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasliebel%2Fdfc2020_baseline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasliebel%2Fdfc2020_baseline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasliebel%2Fdfc2020_baseline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukasliebel%2Fdfc2020_baseline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukasliebel","download_url":"https://codeload.github.com/lukasliebel/dfc2020_baseline/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226677178,"owners_count":17666014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deep-learning","earth-observation","pytorch","remote-sensing"],"created_at":"2024-08-07T23:01:56.860Z","updated_at":"2024-11-27T03:30:57.953Z","avatar_url":"https://github.com/lukasliebel.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Land Cover Classification With Low-Resolution Training Labels\n## A Simple Baseline for the IEEE GRSS Data Fusion Contest 2020\n\n**Jump to: [Training](#training) | [Inference](#inference) | [Pre-trained Models](#pre-trained-models) | [Performance](#performance)**\n\nThis repository provides a simple baseline for the current [IEEE GRSS Data Fusion Contest 2020 (DFC2020)](http://www.grss-ieee.org/community/technical-committees/data-fusion) based on state-of-the-art CNNs for semantic segmentation, **implemented in PyTorch**.\nIt contains a customizable [training](#training) script for UNet [1] and DeepLabv3+ [2] along with dataloaders for the [SEN12MS](https://github.com/schmitt-muc/SEN12MS) [3] train and holdout splits, as well as the DFC2020 contest data of both phases.\nThe packaged [prediction](#inference) script can be used to either load a training checkpoint or one of the provided [pre-trained models](#pre-trained-models) to predict land cover labels from Sentinel-1 and Sentinel-2 imagery.\nBaseline results for our paper on \"Weakly Supervised Semantic Segmentation of Satellite Images for Land Cover Mapping\" [4] were generated using this implementation.\n\nThe provided code can be used to **predict baseline results** for phase 1 of the DFC2020 or as a **basis for your solutions** to the tasks of both phases.\n**Feel free to fork this repository for further use in your work!**\n\nIf you make use of this implementation in your own project or want to refer to it in a scientific publication, **please consider referencing this GitHub repository and citing our paper**:\n```\n@Article{,\n  author  = {Michael Schmitt and Jonathan Prexl and Patrick Ebel and Lukas Liebel and Xiao Xiang Zhu},\n  title   = {Weakly Supervised Semantic Segmentation of Satellite Images for Land Cover Mapping -- Challenges and Opportunities},\n  year    = {2020},\n  journal = {arXiv (to appear)}\n}\n```\n\n*The implementation of UNet (files: [unet.py](code/models/unet.py) and [unet_parts.py](code/models/unet_utils/unet_parts.py)) was originally created by [Alexandre Milesi](https://github.com/milesial/Pytorch-UNet) and released under a [GPL-3.0 License](https://github.com/milesial/Pytorch-UNet/blob/master/LICENSE).\nSimilarly, the implementation of DeepLabv3+ (files: [deeplab.py](code/models/deeplab.py) and [deeplab_utils/](code/models/deeplab_utils)) was originally created by [Jianfeng Zhang](https://github.com/jfzhang95/pytorch-deeplab-xception) and released under an [MIT License](https://github.com/jfzhang95/pytorch-deeplab-xception/blob/master/LICENSE).\nWe slightly simplified this very comprehensive implementation and only adopted the ResNet-101 backbone.\nPlease give credit to their amazing work!*\n\n\n## Exemplary Results\n\n![#009900](https://placehold.it/15/009900/000000?text=+) Forest\n\u0026nbsp;\n![#c6b044](https://placehold.it/15/c6b044/000000?text=+) Shrubland\n\u0026nbsp;\n![#b6ff05](https://placehold.it/15/b6ff05/000000?text=+) Grassland\n\u0026nbsp;\n![#27ff87](https://placehold.it/15/27ff87/000000?text=+) Wetland\n\u0026nbsp;\n![#c24f44](https://placehold.it/15/c24f44/000000?text=+) Cropland\n\u0026nbsp;\n![#a5a5a5](https://placehold.it/15/a5a5a5/000000?text=+) Urban/Built-up\n\u0026nbsp;\n![#f9ffa4](https://placehold.it/15/f9ffa4/000000?text=+) Barren\n\u0026nbsp;\n![#1c0dff](https://placehold.it/15/1c0dff/000000?text=+) Water\n\n![Example Patch](imgs/example_patch.png)\n\n**Figure:** RGB composite of a Sentinel-2 input image, prediction result and ground-truth for an unseen image from the DFC2020 validation set. Note that only very low-resolution labels from the SEN12MS train split (similar to the one shown above) were used to train this model.\n\nModels trained with this baseline implementation using SEN12MS data will yield an **average accuracy (AA) in the 45% - 50% range** on the DFC2020 validaton data (phase 1) depending on the specified training parameters.\n*While you will neither achieve top-ranking results in the DFC2020 nor ultimately convincing qualitative results with these models, there is a lot of potential in extending this simple baseline.*\nWe exemplarily show this by implementing training with an automatically created mask for ignoring the problematic class Savanna [4] (also see: https://competitions.codalab.org/forums/19003/3368).\n\n[Pre-trained model checkpoints](#pre-trained-models) for some simple baseline settings are available for download below!\n\n## Prerequisites\n\nYou can run training and inference locally or in the provided docker container.\nIn any case, you will need a reasonably recent version of the NVIDIA GPU driver if you plan running this code on your GPU (recommended).\n\n### Recommended: Docker\n\n1. Build the image from the docker subdir (*the trailing dot is part of the command!*): `cd docker; docker build -t lukasliebel/dfc_baseline .`\n2. Start a container and mount the required data and code dirs, e.g., by customizing and calling the provided script: `chmod +x start_container.sh; ./start_container.sh`.\nMake sure to mount all of the data dirs you need for training or inference using the `-v` parameter.\n3. Attach to the container: `docker attach dfc_baseline`\n4. If you want to detach but keep the container alive, make sure to detach by pressing `[Ctrl] + [p]` and `[Ctrl] + [q]`\n5. Once you're done, simply exit the container `[Ctrl] + [d]` or kill it if it's running in the background: `docker kill dfc_baseline`\n\n### Alternatively: Run Locally\n\nIf you decide to run training or inference locally (e.g., within an Anaconda environment), you'll need the following packages and libraries:\n- PyTorch 1.4\n- CUDA 10.1\n- cuDNN 7\n- pandas, matplotlib, rasterio, tqdm, tensorboard, sklearn\n\n*Since we only use the docker version ourselves, we will most probably not be able to give any support for running the code in this way.\nHowever, it shouldn't be much of a problem to just run it directly.*\n\n\n## Training\n\nTo start training simply run the provided script [train.py](code/train.py) with the desired parameters as described in the following:\n\n| Parameter             | Type                                               | Default           | Description                                                                                                           |\n| --------------------- | -------------------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------- |\n| --help                | flag                                               | False             | Print an overview of the available parameters and exit                                                                |\n|                       |                                                    |                   |                                                                                                                       |\n| --experiment_name     | str                                                | 'experiment'      | Descriptive name for the experiment. Will be used in the path names for log- and savefiles                            |\n| --val_freq            | int                                                | 1000              | Validation will be run every val_freq batches/optimization steps during training (default: no validation)             |\n| --save_freq           | int                                                | 1000              | Training state will be saved every save_freq batches/optimization steps during training                               |\n| --log_freq            | int                                                | 100               | TensorBoard logs will be written every log_freq number of batches/optimization steps during training                  |\n| --seed                | int                                                | None              | Fixes random seed and sets model to the potentially faster cuDNN deterministic mode (default: non-deterministic mode) |\n|                       |                                                    |                   |                                                                                                                       |\n| --use_s1              | flag                                               | False             | Use Sentinel-1 data as input (2 channels)                                                                             |\n| --use_s2hr            | flag                                               | False             | Use Sentinel-2 high-resolution (10 m) data as input (4 channels)                                                      |\n| --use_s2mr            | flag                                               | False             | Use Sentinel-2 medium-resolution (20 m) data as input (xx channels)                                                   |\n| --use_s2lr            | flag                                               | False             | Use Sentinel-2 low-resolution (60 m) data as input (xx channels)                                                      |\n| --use_s2lr            | flag                                               | False             | Use Sentinel-2 low-resolution (60 m) data as input (xx channels)                                                      |\n| --no_savanna          | flag                                               | False             | Ignore class savanna                                                                                                  |\n|                       |                                                    |                   |                                                                                                                       |\n| --lr                  | float                                              | 1e-2              | Learning rate                                                                                                         |\n| --momentum            | float                                              | 0.9               | Momentum for the learning rate (currently only used for DeepLabv3+ training)                                          |\n| --weight_decay        | float                                              | 5e-4              | Weight-decay                                                                                                          |\n| --batch_size          | int                                                | 32                | Batch size used for training and validation                                                                           |\n| --workers             | int                                                | 4                 | Number of worker processes for data loading                                                                           |\n| --max_epochs          | int                                                | 100               | Number of training epochs                                                                                             |\n|                       |                                                    |                   |                                                                                                                       |\n| --model               | ['deeplab', 'unet']                                | 'deeplab'         | Network architecture                                                                                                  |\n| --pretrained_backbone | flag                                               | False             | Initialize ResNet-101 backbone with ImageNet pre-trained weights (only used for DeepLabv3+ training)                  |\n| --out_stride          | [8, 16]                                            | 16                | Output stride (only used for DeepLabv3+ training)                                                                     |\n|                       |                                                    |                   |                                                                                                                       |\n| --data_dir_train      | path                                               | None              | Path to SEN12MS training dataset                                                                                      |\n| --dataset_val         | ['sen12ms_holdout', 'dfc2020_val', 'dfc2020_test'] | 'sen12ms_holdout' | Dataset used for validation                                                                                           |\n| --data_dir_val        | path                                               | None              | Path to validation dataset                                                                                            |\n| --log_dir             | path                                               | 'runs/id'         | Path to dir for TensorBoard logs                                                                                      |\n\n**Example:**\n\n*Trains DeepLabv3+ for one epoch on the SEN12MS train set and validates on the SEN12MS holdout set (assuming the SEN12MS dataset is provided in \"/root/data\")*:\n\n```\nCUDA_VISIBLE_DEVICES=1 \\\npython train.py \\\n  --experiment_name demo \\\n  --model deeplab \\\n  --out_stride 16 \\\n  --dataset_val sen12ms_holdout \\\n  --data_dir_train /root/data \\\n  --data_dir_val /root/data \\\n  --log_dir /root/logs \\\n  --val_freq 10000 \\\n  --save_freq 1000 \\\n  --use_s1 \\\n  --use_s2hr \\\n  --use_s2mr \\\n  --use_s2lr \\\n  --lr 1e-3 \\\n  --momentum 0.9 \\\n  --weight_decay 5e-4 \\\n  --batch_size 8 \\\n  --workers 4 \\\n  --seed 1860 \\\n  --no_savanna \\\n  --log_freq 10 \\\n  --pretrained_backbone \\\n  --max_epochs 1\n```\n\nThe specified parameter values will be saved to `--log_dir/checkpoints/args.pkl` for future reference or for running inference with a pre-trained model as described below.\n\nIf you want to use your GPU for training, make sure to run training as `CUDA_VISIBLE_DEVICES=x train.py ...` since multi-GPU training is not supported and will raise an error.\n\n\n### Data\n\nThis repository contains dataloaders for the SEN12MS dataset as well as the DFC2020 validation (phase 1) and test (phase 2) data.\nMake sure to provide the respective root directories as `--data_dir_train` and `--data_dir_val` (can be equal for `--dataset_val 'sen12ms_holdout'`).\n\n#### SEN12MS Dataset Structure\n\nThe SEN12MS dataset can be obtained from: https://mediatum.ub.tum.de/1474000\n\nOur code is designed to use the official SEN12MS train/holdout splits.\nIn order to allow for automatically splitting the dataset, acquire a copy of the CSV file `SEN12MS_holdOutScenes.txt` containing the holdout subdirs of SEN12MS from the official [SEN12MS Toolbox](https://github.com/MSchmitt1984/SEN12MS/blob/master/splits/SEN12MS_holdOutScenes.txt).\n\n- root (*each of the s1/s2/lc subdirectories is expected to hold a set of GeoTIFFs*)\n  - ROIs1158_spring\n    - s1_1\n    - s2_1\n    - lc_1\n    - ...\n    - s1_n\n    - s2_n\n    - lc_n\n  - ROIs2017_winter\n    - ...\n  - ROIs1868_summer\n    - ...\n  - ROIs1970_fall\n    - ...\n  - SEN12MS_holdOutScenes.txt\n\n#### DFC2020 Dataset Structure\n\nDFC2020 data will be available for download from the contest page: https://ieee-dataport.org/competitions/2020-ieee-grss-data-fusion-contest\n\n- root (*each of the s1/s2/lc/dfc subdirectories is expected to hold a set of GeoTIFFs*)\n  - ROIs0000_validation\n    - s1_validation\n    - s2_validation\n    - lc_validation *(unused)*\n    - dfc_validation\n  - ROIs0000_test\n    - s1_0\n    - s2_0\n    - lc_0 *(unused)*\n    - dfc_0\n\n\n### Tensorboard\n\nThe training script will write TensorBoard logs to `--log_dir` every `--log_freq` optimization steps and after every mid-training validation run.\nTo monitor the training process start a TensorBoard server and load the respective log dir.\nYou can do this by running:\n\n```\ntensorboard --bind_all --log_dir /your/log/dir\n```\n\nYou can also run TensorBoard within a docker container.\nWe recommend this for servers or other machines where you don't want to install any additional packages.\nThe following command directly starts a TensorBoard server within a pre-configured container:\n\n```\ndocker run -it -p 6006:6006 -v /your/log/dir:/root/logs tensorflow/tensorflow:latest tensorboard --bind_all --logdir /root/logs\n```\n\nTo display your logs, simply navigate to the TensorBoard web interface which will be available at: http://localhost:6006 or http://your.machines.ip.here:6006 by default.\n\n\n## Inference\n\nYou'll only need a `*.pth` checkpoint and a corresponding `args.pkl` config file, e.g., from your checkpoint directory or [provided by someone else](#pre-trained-models), to run inference using our prediction script.\n\nTo infer labels from Sentinel-1/Sentinel-2 data, run the provided script [predict.py](code/predict.py) with the desired parameters as described in the following:\n\n| Parameter         | Type                                                           | Default            | Description                                                                                                |\n| ----------------- | -------------------------------------------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------- |\n| --help            | flag                                                           | False              | Print an overview of the available parameters and exit                                                     |\n|                   |                                                                |                    |                                                                                                            |\n| --config          | path                                                           | './args.pkl'       | Path to the pickled model config file as created during training or provided with a pre-trained checkpoint |\n| --checkpoint_file | path                                                           | './checkpoint.pth' | Path to a checkpoint file                                                                                  |\n| --score           | flag                                                           | False              | Evaluate the prediction results using ground-truth labels (requires labeled SEN12MS or DFC2020 dataset)    |\n|                   |                                                                |                    |                                                                                                            |\n| --batch_size      | int                                                            | 32                 | Batch size for prediction                                                                                  |\n| --workers         | int                                                            | 4                  | Number of worker processes for data loading                                                                |\n|                   |                                                                |                    |                                                                                                            |\n| --dataset         | ['sen12ms_holdout', 'dfc2020_val', 'dfc2020_test', 'tiff_dir'] | 'sen12ms_holdout'  | Type of dataset                                                                                            |\n| --data_dir        | path                                                           | None               | Path to dataset                                                                                            |\n| --out_dir        | path                                                           | './results'               | Path to output dir (predictions will be saved as uint8-encoded labels)                                                                                            |\n| --preview_dir        | path                                                           | None               | (optional) Path to dir for saving preview images. Input data and predictions will be saved as RGB composites and color-coded label maps.                                                                                            |\n\n**Examples:**\n\n*Predicts labels for the DFC2020 contest data (without having access to the ground-truth labels) assuming data is stored in subdirs \"/dfc2020_val/data/s1\" and \"/dfc2020_val/data/s2\"*\n```\npython predict.py \\\n  --config /my_logdir/checkpoints/args.pkl \\\n  --checkpoint_file /my_logdir/checkpoints/my_checkpoint.pth \\\n  --dataset 'tiff_dir' \\\n  --data_dir /dfc2020_val_data \\\n  --out_dir /my_logdir/predictions \\\n  --preview_dir /my_logdir/previews\n```\n\n*Scores the performance of a model on the SEN12MS holdout split*\n```\npython predict.py \\\n  --config /my_logdir/checkpoints/args.pkl \\\n  --checkpoint_file /my_logdir/checkpoints/my_checkpoint.pth \\\n  --dataset 'sen12ms_holdout' \\\n  --data_dir /sen12ms \\\n  --out_dir /my_logdir/predictions \\\n  --batch_size 32 \\\n  --score\n```\n\n### Unlabeled Datasets\n\nApart from the provided dataloaders for SEN12MS and the DFC2020 (which you can use for scoring your model) you can also infer labels for data without any access to ground-truth labels.\nTo predict labels for a set of Sentinel-1/Sentinel-2 input patches, provide them in the following directory structure and use the `--dataset_val 'TIFFdir'` data loader:\n\n- root (*each of the s1/s2 subdirectories is expected to hold a set of GeoTIFFs*)\n  - s1\n  - s2\n\nThe s1 and s2 subdirs should contain TIFF files with a matching file name.\nAny occurrences of '_s1_' and '_s2_' in the file names will automatically be detected and handled accordingly.\nE.g., 's1/image_s1_001.tif' and s2/image_s2_001.tif' will be matched with each other just like 's1/image_001.tif' and 's2/image_001.tif'.\nIf the model you are using for inference does not make use of either Sentinel-1 or Sentinel-2 data, of course, you will not need to provide the respective files.\nHowever, the dataloader always expects a full 12-band Sentinel-2 patch, even when the model only makes use of a subset of them.\n*Note that we didn't try predicting patches that differ from the DFC2020 data format in terms of shape, GSD, etc.*.\n\nAlternatively, you can make use of the SEN12MS and DFC2020 dataloaders, as described above.\nPlease note that there is currently no ground-truth available for the DFC2020 datasets as addressed in the following section.\nYou can still **use this script to infer labels for the contest data by simply using the TIFFdir loader and providing the input data in respective s1/s2 subdirs as shown in the example above**.\n\n\n### Scoring\n\nIn order to be able to score your prediction results, you'll also need ground-truth labels that are only available for the SEN12MS holdout set so far.\nGround-truth for the DFC2020 validation and test sets will be released by the contest organizers at a later stage.\nPlease see the contest website for further information.\nThe provided dataloaders are already configured to read those datasets so you will be able to score your results as soon as this data becomes available.\n\nIn the meantime, please use our [dataloader for unlabeled data](#unlabeled-datasets) to infer labels for the contest.\n\n\n## Pre-trained Models\n\nIn the following, you will find pre-trained model checkpoints.\nYou can use those to predict labels for any S1/S2 pairs.\n\n**Please note** that we did not do extensive hyperparameter tuning.\nTherefore, these pre-trained model checkpoints do not represent the best performance you can expect using our training code.\n\n### DeepLabv3+\n\nWe provide two exemplary pre-trained models using the DeepLabv3+ architecture.\nThe provided models only differ in the type of input data used.\nEach of these models comes as a config file and a saved checkpoint, which you can use for inference as described [above](#inference).\n\n- Model: DeepLabv3+ (ImageNet pre-trained ResNet-101 backbone)\n- In: S1 and S2 high- and mid-res (S1/S2 variant), S2 high- and mid-res (S2 variant)\n- Out: DFC classes w/o Savanna\n- Trained for one epoch on SEN12MS train (5000 optimization steps)\n  - LR: 0.001\n  - Momentum: 0.9\n  - Weight Decay: 0.0005\n  - Batch Size: 32\n  - Output Stride: 16\n- Download (DeepLabv3+ S1/S2): http://go.tum.de/707675\n- Download (DeepLabv3+ S2): http://go.tum.de/009658\n\n### UNet\n\nDownload links for pre-trained UNet models will be added within the next days.\nFeel free to contribute if you already trained a model using our training code!\n\n### Performance\n\nIn the following you will find the performance of our provided pre-trained models.\nYou can definitely achieve better performance using our models after careful hyperparameter tuning.\n\n*The values given here illustrate the performance of the provided pre-trained models that were trained using a very basic configuration.\nHence, they merely give an impression of the general quality of results you can expect on different unseen datasets!*\n\n**Table:** Performance of the provided pre-trained models on various datasets\n\n| Model              | Dataset                | AA     | mIOU   |\n| ------------------ | ---------------------- | ------ | ------ |\n| DeepLabv3+ (S2)    | DFC2020 validation set | 44.93% | 27.97% |\n|                    | DFC2020 test set       | 46.45% | 31.43% |\n|                    | SEN12MS holdout set    | 65.96% | 43.48% |\n|                    |                        |        |        |\n| DeepLabv3+ (S1/S2) | DFC2020 validation set | 44.81% | 27.54% |\n|                    | DFC2020 test set       | 43.34% | 29.82% |\n|                    | SEN12MS holdout set    | 62.07% | 44.16% |\n\n\n![Training DLv3+ S1S2](imgs/model_training_dl.png)\n\n**Figure:** Validation results on the DFC2020 validation set during the first epoch of training\n\n\n## Acknowledgements\n\n**Special thanks to [Jonathan Prexl](https://www.sipeo.bgu.tum.de/team/jonathan-prexl) for his valuable contributions to this project**, especially in the dataloading part, the adoption of UNet, and the scripts for scoring prediction results!\n\nThanks to the organizers of the Data Fusion Contest: http://www.grss-ieee.org/community/technical-committees/data-fusion/data-fusion-contest and https://ieee-dataport.org/competitions/2020-ieee-grss-data-fusion-contest and\nhttps://competitions.codalab.org/competitions/22289\n\nIf you are interested in working with the SEN12MS dataset, make sure to also check out the official \"Toolbox\" repo at: https://github.com/schmitt-muc/SEN12MS\n\nThe implementation of DeepLabv3+ was adapted from: https://github.com/jfzhang95/pytorch-deeplab-xception\n\u003c/br\u003e The implementation of UNet was adapted from: https://github.com/milesial/Pytorch-UNet\n\n\n## Contact\n\n**Lukas Liebel (lukas.liebel@tum.de)**\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Technical University of Munich\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Department of Aerospace and Geodesy\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Remote Sensing Technology\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Computer Vision Research Group\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; https://www.bgu.tum.de/en/lmf/liebel\n\n\n**Jonathan Prexl (jonathan.prexl@tum.de)**\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Technical University of Munich\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Department of Aerospace and Geodesy\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Signal Processing in Earth Observation\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; https://www.sipeo.bgu.tum.de/team/jonathan-prexl\n\u003c/br\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; GitHub: https://github.com/JonathanPrexl\n\n\n## References\n\n[1] O. Ronneberger, P. Fischer, T. Brox, 'U-Net: Convolutional networks for biomedical image segmentation', Medical Image Computing and Computer-Assisted Intervention, 2015\n\n[2] L-C. Chen, Y. Zhu, G. Papandreou, F. Schroff, H. Adam, 'Encoder-decoder with atrous separable convolution for semantic image segmentation', European Conference on Computer Vision, 2018\n\n[3] M. Schmitt, L. H. Hughes, C. Qiu, and X. X. Zhu, 'SEN12MS – A curated dataset of georeferenced multi-spectral sentinel-1/2 imagery for deep learning and data fusion', ISPRS Annals, 2019\n\n[4] M. Schmitt, J. Prexl, P. Ebel, L. Liebel, and X. X. Zhu, 'Weakly Supervised Semantic Segmentation of Satellite Images for Land Cover Mapping – Challenges and Opportunities', arXiv, 2020 (to appear)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukasliebel%2Fdfc2020_baseline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukasliebel%2Fdfc2020_baseline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukasliebel%2Fdfc2020_baseline/lists"}