• Stars
    star
    140
  • Rank 261,473 (Top 6 %)
  • Language
    Python
  • License
    MIT License
  • Created over 3 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Official code of CVPR 2021's PLOP: Learning without Forgetting for Continual Semantic Segmentation

Vizualization on VOC 15-1

This repository contains all of our code. It is a modified version of Cermelli et al.'s repository.

@inproceedings{douillard2021plop,
  title={PLOP: Learning without Forgetting for Continual Semantic Segmentation},
  authors={Douillard, Arthur and Chen, Yifu and Dapogny, Arnaud and Cord, Matthieu},
  booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2021}
}

Requirements

You need to install the following libraries:

  • Python (3.6)
  • Pytorch (1.8.1+cu102)
  • torchvision (0.9.1+cu102)
  • tensorboardX (1.8)
  • apex (0.1)
  • matplotlib (3.3.1)
  • numpy (1.17.2)
  • inplace-abn (1.0.7)

Note also that apex seems to only work with some CUDA versions, therefore try to install Pytorch (and torchvision) with the 10.2 CUDA version. You'll probably need anaconda instead of pip in that case, sorry! Do:

conda install -y pytorch torchvision cudatoolkit=10.2 -c pytorch
cd apex
pip3 install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

Note that while the code should be runnable without mixed precision (apex), some have reported lower perfs without it. So try with it!

Dataset

Two scripts are available to download ADE20k and Pascal-VOC 2012, please see in the data folder. For Cityscapes, you need to do it yourself, because you have to ask "permission" to the holders; but be reassured, it's only a formality, you can get the link in a few days by mail.

Performance on VOC

How to perform training

The most important file is run.py, that is in charge to start the training or test procedure. To run it, simpy use the following command:

python -m torch.distributed.launch --nproc_per_node=<num_GPUs> run.py --data_root <data_folder> --name <exp_name> .. other args ..

The default is to use a pretraining for the backbone used, that is searched in the pretrained folder of the project. We used the pretrained model released by the authors of In-place ABN (as said in the paper), that can be found here: link. I've also upload those weights there: link.

Since the pretrained are made on multiple-gpus, they contain a prefix "module." in each key of the network. Please, be sure to remove them to be compatible with this code (simply rename them using key = key[7:]) (if you're working on single gpu). If you don't want to use pretrained, please use --no-pretrained.

There are many options (you can see them all by using --help option), but we arranged the code to being straightforward to test the reported methods. Leaving all the default parameters, you can replicate the experiments by setting the following options.

  • please specify the data folder using: --data_root <data_root>
  • dataset: --dataset voc (Pascal-VOC 2012) | ade (ADE20K)
  • task: --task <task>, where tasks are
    • 15-5, 15-5s, 19-1 (VOC), 100-50, 100-10, 50, 100-50b, 100-10b, 50b (ADE, b indicates the order)
  • step (each step is run separately): --step <N>, where N is the step number, starting from 0
  • (only for Pascal-VOC) disjoint is default setup, to enable overlapped: --overlapped
  • learning rate: --lr 0.01 (for step 0) | 0.001 (for step > 0)
  • batch size: --batch_size <24/num_GPUs>
  • epochs: --epochs 30 (Pascal-VOC 2012) | 60 (ADE20K)
  • method: --method <method name>, where names are
    • FT, LWF, LWF-MC, ILT, EWC, RW, PI, MIB

For all details please follow the information provided using the help option.

Example commands

LwF on the 100-50 setting of ADE20K, step 0:

python -m torch.distributed.launch --nproc_per_node=2 run.py --data_root data --batch_size 12 --dataset ade --name LWF --task 100-50 --step 0 --lr 0.01 --epochs 60 --method LWF

MIB on the 50b setting of ADE20K, step 2:

python -m torch.distributed.launch --nproc_per_node=2 run.py --data_root data --batch_size 12 --dataset ade --name MIB --task 100-50 --step 2 --lr 0.001 --epochs 60 --method MIB

LWF-MC on 15-5 disjoint setting of VOC, step 1:

python -m torch.distributed.launch --nproc_per_node=2 run.py --data_root data --batch_size 12 --dataset voc --name LWF-MC --task 15-5 --step 1 --lr 0.001 --epochs 30 --method LWF-MC

PLOP on 15-1 overlapped setting of VOC, step 1:

python -m torch.distributed.launch --nproc_per_node=2 run.py --data_root data --batch_size 12 --dataset voc --name PLOP --task 15-5s --overlapped --step 1 --lr 0.001 --epochs 30 --method FT --pod local --pod_factor 0.01 --pod_logits --pseudo entropy --threshold 0.001 --classif_adaptive_factor --init_balanced --pod_options "{"switch": {"after": {"extra_channels": "sum", "factor": 0.0005, "type": "local"}}}"

Once you trained the model, you can see the result on tensorboard (we perform the test after the whole training) or you can test it by using the same script and parameters but using the command

--test

that will skip all the training procedure and test the model on test data.

Or more simply you can use one of the provided script that will launch every step of a continual training.

For example, do

bash scripts/voc/plop_15-1.sh

Note that you will need to modify those scripts to include the path where your data.

More Repositories

1

incremental_learning.pytorch

A collection of incremental learning paper implementations including PODNet (ECCV20) and Ghost (CVPR-W21).
Python
383
star
2

dytox

Dynamic Token Expansion with Continual Transformers, accepted at CVPR 2022
Python
133
star
3

deepcourse

Learn the Deep Learning for Computer Vision in three steps: theory from base to SotA, code in PyTorch, and space-repetition with Anki
Jupyter Notebook
133
star
4

keras-snapshot_ensembles

Implementation in Keras of: Snapshot Ensembles: Train 1, get M for free (https://arxiv.org/abs/1704.00109)
Python
25
star
5

keras-mobilenet

Implementation in Keras of MobileNet (https://arxiv.org/abs/1704.04861)
Python
23
star
6

keras-effnet

Implementation in Keras of Effnet (https://arxiv.org/abs/1801.06434)
Python
21
star
7

keras-shufflenet

Implementation in Keras of ShuffleNet (https://arxiv.org/abs/1707.01083)
Python
19
star
8

nalu.pytorch

Implementation of NALU & NAC (https://arxiv.org/abs/1808.00508 | DeepMind) in PyTorch.
Jupyter Notebook
17
star
9

mada.pytorch

Unfinished Work: Implementation of Multi-Adversarial Domain Adaptation (https://arxiv.org/abs/1809.02176) in Pytorch
Python
16
star
10

turing_pattern_generator

A generator of Turing patterns from an image
Jupyter Notebook
11
star
11

continual-learning-terminology

10
star
12

water_simulation

Water simulation with OpenGL
C
10
star
13

tensorflow-faceid

Faceid-like in Tensorflow using a Siamese network with contrastive loss
Python
10
star
14

awesome-deeplearning-papers

A collection of Deep Learning papers I read, sorted by category.
Python
9
star
15

keras-squeeze_and_excitation_network

Implementation in Keras of Squeeze and Excitation (https://arxiv.org/abs/1709.01507)
Python
6
star
16

Continual_Learning_Leaderboards

Learderboards of Continual Learning for various benchmarks.
4
star
17

optimizers.pytorch

A collection of Optimizers, from famous to exotic, implemented in PyTorch
Python
4
star
18

teledetection

Implementation in C of a custom k-means for clouds detection in satellite images.
C
4
star
19

FastRadixTree

Orthographic Corrector in CPP using a Trie.
C++
2
star
20

distributed_memory_mpi

Distributed memory with MPI in Python, features also map/reduce/filter!
Python
1
star
21

quiz

JavaScript
1
star
22

phd_thesis

TeX
1
star
23

Soundrain

Soundcloud music downloader
Python
1
star
24

MoviesPopularity

An app that rates movies according to its comments, incremental learning is also done.
Scala
1
star
25

Reflex-Tap

A small website (used to practice) about a fictive mobile app (english & Korean version)
HTML
1
star
26

Smart-Saleman

Basic solution for the saleman problem.
Python
1
star
27

arthurdouillard.github.io

My current blog, auto-updated from the template https://github.com/arthurdouillard/hugo-website
HTML
1
star
28

Blind-Mouse-in-a-Maze

Blind Mouse in a Maze - Interview question
C++
1
star
29

elix_anki_scrapper

Scrapper of Elix (French's Sign Language) for Anki
Jupyter Notebook
1
star
30

coursera-R-programming

Assignements of the `R Programming` course on coursera
R
1
star
31

algo_with_mpi

Some basic algos with mpi for Python (mpi4py)
Python
1
star