Giter VIP home page Giter VIP logo

gdumb's Introduction

GDumb

This repository contains simplified code for the paper:

GDumb: A Simple Approach that Questions Our Progress in Continual Learning, ECCV 2020 (Oral: Top 2%)
Ameya Prabhu, Philip Torr, Puneet Dokania

[Arxiv] [PDF] [Slides] [Bibtex]

Installation and Dependencies

  • Install all requirements required to run the code on a Python 3.x by:
# First, activate a new virtual environment
$ pip3 install -r requirements.txt
  • Create two additional folders in the repository data/ and logs/ which will store the datasets and logs of experiments. Point --data_dir and --log_dir in src/opts.py to locations of these folders.

  • Select Imagenet100 from Imagenet using this link and TinyImagenet from this link and convert them to ImageFolder format with train and test splits.

Usage

  • To run the GDumb model you can simply specify conditions from argument, an example command below:
$ python main.py --dataset CIFAR100 --num_classes_per_task 5 --num_tasks 20 --memory_size 500 --num_passes 256 --regularization cutmix --model ResNet --depth 32 --exp_name my_experiment_name

Arguments you can freely tweak given a dataset and model:

  • Number of classes per task (--num_classes_per_task)
  • Number of tasks (--num_tasks)
  • Maximum memory size (--memory_size)
  • Number of classes to pretrain a dumb model (--num_pretrain_classes)
  • Number of passes through the memory for learning the dumb model and pretraining (--num_passes and --num_pretrain_passes)

To add your favorite dataset:

  • Convert it to ImageFolder format (as in imagenet) with train and test folders
  • Add the dataset folder name exactly to src/opts.py
  • Add dataset details to get_statistics() function in src/dataloader.py
  • Run you model with --dataset your_fav_dataset!

Additional details and default hyperparameters can be found in src/opts.py

  • To replicate the complete set of experiments, copy scripts/replicate.sh to src/ and run with substituting $SEED with {0,1,2}:
$ bash replicate.sh $SEED

Similarly, other scripts can replicate results for specific formulations.

Results

After running replicate.sh you should get results somewhat like these:

GDumb Model Mem (k) Table Accuracy
MNIST-MLP-100 300 3,8 89.1 ± 0.4
MNIST-MLP-100 500 3 90.2 ± 0.4
MNIST-MLP-400 500 4 91.9 ± 0.5
MNIST-MLP-400 4400 5,6 97.8 ± 0.1
SVHN-ResNet18 4400 3 93.4 ± 0.1
CIFAR10-ResNet18 200 3 35.0 ± 0.4
CIFAR10-ResNet18 500 3,4,8 45.4 ± 1.9
CIFAR10-ResNet18 1000 3,4 61.2 ± 1.0
CIFAR100-ResNet32 2000 5 24.3 ± 0.4
TinyImageNet-DenseNet-100-12-BC 9000 6 57.32 (best of 3)

Extensibility to other setups

  • Settings can be tweaked by adjusting the above parameters. Additionally, GDumb can be used in a wide-variety of settings beyond current CL formulations:
    • GDumb is sortof robust against drastic variations in sample orders given the same/similar set of samples land in memory, hence this implementation abstracts the sampling process out.
    • Masking is to be used to handle dynamic variations to likely subset of classes, adding class-priors, handling scenarios like cost-sensitive classification
If you discover any bugs in the code please contact me, I will cross-check them with my nightmares.

Citation

We hope GDumb is a strong baseline and comparison, and the sampler or masking introduced are useful for your cool CL formulation! To cite our work:

@inproceedings{prabhu2020greedy,
  title={GDumb: A Simple Approach that Questions Our Progress in Continual Learning},
  author={Prabhu, Ameya and Torr, Philip and Dokania, Puneet},
  booktitle={The European Conference on Computer Vision (ECCV)},
  month={August},
  year={2020}
}

gdumb's People

Contributors

dependabot[bot] avatar drimpossible avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.