Awesome
<div align="center">Continuum: Simple Management of Complex Continual Learning Scenarios
</div>A library for PyTorch's loading of datasets in the field of Continual Learning
Aka Continual Learning, Lifelong-Learning, Incremental Learning, etc.
Read the documentation. <br> Test Continuum on Colab !
Example:
Install from and PyPi:
pip3 install continuum
And run!
from torch.utils.data import DataLoader
from continuum import ClassIncremental
from continuum.datasets import MNIST
from continuum.tasks import split_train_val
dataset = MNIST("my/data/path", download=True, train=True)
scenario = ClassIncremental(
dataset,
increment=1,
initial_increment=5
)
print(f"Number of classes: {scenario.nb_classes}.")
print(f"Number of tasks: {scenario.nb_tasks}.")
for task_id, train_taskset in enumerate(scenario):
train_taskset, val_taskset = split_train_val(train_taskset, val_split=0.1)
train_loader = DataLoader(train_taskset, batch_size=32, shuffle=True)
val_loader = DataLoader(val_taskset, batch_size=32, shuffle=True)
for x, y, t in train_loader:
# Do your cool stuff here
Supported Types of Scenarios
Name | Acronym | Supported | Scenario |
---|---|---|---|
New Instances | NI | :white_check_mark: | Instances Incremental |
New Classes | NC | :white_check_mark: | Classes Incremental |
New Instances & Classes | NIC | :white_check_mark: | Data Incremental |
Supported Datasets:
Most dataset from torchvision.dasasets are supported, for the complete list, look at the documentation page on datasets here.
Furthermore some "Meta"-datasets are can be create or used from numpy array or any torchvision.datasets or from a folder for datasets having a tree-like structure or by combining several dataset and creating dataset fellowships!
Indexing
All our continual loader are iterable (i.e. you can for loop on them), and are also indexable.
Meaning that clloader[2]
returns the third task (index starts at 0). Likewise,
if you want to evaluate after each task, on all seen tasks do clloader_test[:n]
.
Example of Sample Images from a Continuum scenario
CIFAR10:
<img src="https://github.com/Continvvm/continuum/blob/master/images/cifar10_0.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/cifar10_1.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/cifar10_2.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/cifar10_3.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/cifar10_4.jpg" width="150"> |
---|---|---|---|---|
Task 0 | Task 1 | Task 2 | Task 3 | Task 4 |
MNIST Fellowship (MNIST + FashionMNIST + KMNIST):
<img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_fellowship_0.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_fellowship_1.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_fellowship_2.jpg" width="150"> |
---|---|---|
Task 0 | Task 1 | Task 2 |
PermutedMNIST:
<img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_permuted_0.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_permuted_1.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_permuted_2.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_permuted_3.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_permuted_4.jpg" width="150"> |
---|---|---|---|---|
Task 0 | Task 1 | Task 2 | Task 3 | Task 4 |
RotatedMNIST:
<img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_rotated_0.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_rotated_1.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_rotated_2.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_rotated_3.jpg" width="150"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/mnist_rotated_4.jpg" width="150"> |
---|---|---|---|---|
Task 0 | Task 1 | Task 2 | Task 3 | Task 4 |
TransformIncremental + BackgroundSwap:
<img src="https://github.com/Continvvm/continuum/blob/master/images/background_0.jpg" width="250"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/background_1.jpg" width="250"> | <img src="https://github.com/Continvvm/continuum/blob/master/images/background_2.jpg" width="250"> |
---|---|---|
Task 0 | Task 1 | Task 2 |
Citation
If you find this library useful in your work, please consider citing it:
@misc{douillardlesort2021continuum,
author={Douillard, Arthur and Lesort, Timothée},
title={Continuum: Simple Management of Complex Continual Learning Scenarios},
publisher={arXiv: 2102.06253},
year={2021}
}
Maintainers
This project was started by a joint effort from Arthur Douillard & Timothée Lesort, and we are currently the two maintainers.
Feel free to contribute! If you want to propose new features, please create an issue.
Contributors: Lucas Caccia Lucas Cecchi Pau Rodriguez, Yury Antonov, psychicmario, fcld94, Ashok Arjun, Md Rifat Arefin, DanieleMugnai, Xiaohan Zou, Umberto Cappellazzo.
On PyPi
Our project is available on PyPi!
pip3 install continuum
Note that previously another project, a CI tool, was using that name. It is now there continuum_ci.