From 00c866031088314651cd1db9bf67eeb71f2ec70c Mon Sep 17 00:00:00 2001 From: Divyam Madaan Date: Sat, 19 Feb 2022 11:11:39 -0500 Subject: [PATCH] Initial commit --- .gitignore | 4 + LICENSE | 24 ++ README.md | 76 ++++++ arguments.py | 112 ++++++++ augmentations/__init__.py | 23 ++ augmentations/eval_aug.py | 26 ++ augmentations/gaussian_blur.py | 228 ++++++++++++++++ augmentations/simsiam_aug.py | 132 ++++++++++ concept.png | Bin 0 -> 405595 bytes configs/__init__.py | 0 configs/barlow_c10.yaml | 54 ++++ configs/barlow_c100.yaml | 54 ++++ configs/barlow_tinyimagenet.yaml | 54 ++++ configs/simsiam_c10.yaml | 54 ++++ configs/simsiam_c100.yaml | 54 ++++ configs/simsiam_tinyimagenet.yaml | 54 ++++ datasets/__init__.py | 43 +++ datasets/datasets_utils.py | 26 ++ datasets/random_dataset.py | 16 ++ datasets/seq_cifar10.py | 77 ++++++ datasets/seq_cifar100.py | 79 ++++++ datasets/seq_fmnist.py | 55 ++++ datasets/seq_mnist.py | 63 +++++ datasets/seq_svhn.py | 56 ++++ datasets/seq_tinyimagenet.py | 147 +++++++++++ datasets/transforms/__init__.py | 0 datasets/transforms/denormalization.py | 21 ++ datasets/transforms/permutation.py | 55 ++++ datasets/transforms/rotation.py | 92 +++++++ datasets/utils/__init__.py | 0 datasets/utils/continual_dataset.py | 194 ++++++++++++++ datasets/utils/validation.py | 74 ++++++ datasets/val_permutations/seq-cifar10.pt | Bin 0 -> 400760 bytes linear_eval_alltasks.py | 61 +++++ main.py | 123 +++++++++ models/__init__.py | 44 ++++ models/agem.py | 68 +++++ models/backbones/ResNet18.py | 320 +++++++++++++++++++++++ models/backbones/ResNet18_PNN.py | 161 ++++++++++++ models/backbones/__init__.py | 8 + models/backbones/utils/__init__.py | 0 models/backbones/utils/modules.py | 52 ++++ models/barlowtwins.py | 158 +++++++++++ models/der.py | 41 +++ models/finetune.py | 32 +++ models/gem.py | 149 +++++++++++ models/gss.py | 73 ++++++ models/mixup.py | 62 +++++ models/optimizers/__init__.py | 27 ++ models/optimizers/lars.py | 97 +++++++ models/optimizers/lr_scheduler.py | 51 ++++ models/pnn.py | 97 +++++++ models/si.py | 58 ++++ models/simsiam.py | 148 +++++++++++ models/utils/__init__.py | 0 models/utils/continual_model.py | 66 +++++ requirements.txt | 14 + tools/__init__.py | 5 + tools/accuracy.py | 15 ++ tools/average_meter.py | 32 +++ tools/file_exist_fn.py | 17 ++ tools/knn_monitor.py | 70 +++++ tools/logger.py | 35 +++ tools/plotter.py | 35 +++ utils/__init__.py | 15 ++ utils/args.py | 60 +++++ utils/buffer.py | 144 ++++++++++ utils/conf.py | 32 +++ utils/continual_training.py | 76 ++++++ utils/gss_buffer.py | 185 +++++++++++++ utils/loggers.py | 149 +++++++++++ utils/metrics.py | 58 ++++ utils/status.py | 78 ++++++ utils/tb_logger.py | 86 ++++++ 74 files changed, 4949 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 arguments.py create mode 100644 augmentations/__init__.py create mode 100644 augmentations/eval_aug.py create mode 100644 augmentations/gaussian_blur.py create mode 100644 augmentations/simsiam_aug.py create mode 100644 concept.png create mode 100644 configs/__init__.py create mode 100644 configs/barlow_c10.yaml create mode 100644 configs/barlow_c100.yaml create mode 100644 configs/barlow_tinyimagenet.yaml create mode 100644 configs/simsiam_c10.yaml create mode 100644 configs/simsiam_c100.yaml create mode 100644 configs/simsiam_tinyimagenet.yaml create mode 100644 datasets/__init__.py create mode 100644 datasets/datasets_utils.py create mode 100644 datasets/random_dataset.py create mode 100644 datasets/seq_cifar10.py create mode 100644 datasets/seq_cifar100.py create mode 100644 datasets/seq_fmnist.py create mode 100644 datasets/seq_mnist.py create mode 100644 datasets/seq_svhn.py create mode 100644 datasets/seq_tinyimagenet.py create mode 100644 datasets/transforms/__init__.py create mode 100644 datasets/transforms/denormalization.py create mode 100644 datasets/transforms/permutation.py create mode 100644 datasets/transforms/rotation.py create mode 100644 datasets/utils/__init__.py create mode 100644 datasets/utils/continual_dataset.py create mode 100644 datasets/utils/validation.py create mode 100644 datasets/val_permutations/seq-cifar10.pt create mode 100644 linear_eval_alltasks.py create mode 100644 main.py create mode 100644 models/__init__.py create mode 100644 models/agem.py create mode 100644 models/backbones/ResNet18.py create mode 100644 models/backbones/ResNet18_PNN.py create mode 100644 models/backbones/__init__.py create mode 100644 models/backbones/utils/__init__.py create mode 100644 models/backbones/utils/modules.py create mode 100644 models/barlowtwins.py create mode 100644 models/der.py create mode 100644 models/finetune.py create mode 100644 models/gem.py create mode 100644 models/gss.py create mode 100644 models/mixup.py create mode 100644 models/optimizers/__init__.py create mode 100644 models/optimizers/lars.py create mode 100644 models/optimizers/lr_scheduler.py create mode 100644 models/pnn.py create mode 100644 models/si.py create mode 100644 models/simsiam.py create mode 100644 models/utils/__init__.py create mode 100644 models/utils/continual_model.py create mode 100644 requirements.txt create mode 100644 tools/__init__.py create mode 100644 tools/accuracy.py create mode 100644 tools/average_meter.py create mode 100644 tools/file_exist_fn.py create mode 100644 tools/knn_monitor.py create mode 100644 tools/logger.py create mode 100644 tools/plotter.py create mode 100644 utils/__init__.py create mode 100644 utils/args.py create mode 100644 utils/buffer.py create mode 100644 utils/conf.py create mode 100644 utils/continual_training.py create mode 100644 utils/gss_buffer.py create mode 100644 utils/loggers.py create mode 100644 utils/metrics.py create mode 100644 utils/status.py create mode 100644 utils/tb_logger.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0171ad3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.npy +__pycache__/ +checkpoints/ +data/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8411a05 --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +MIT License + +Portions of this software are copyright of their respective authors and released +under the MIT license: +- Mammoth, Copyright 2020 Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara +- SimSiam, Copyright 2020 PatrickHua + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..71bcbd8 --- /dev/null +++ b/README.md @@ -0,0 +1,76 @@ +# Representational Continuity
for Unsupervised Continual Learning +This is the *Pytorch Implementation* for the paper Representational Continuity for Unsupervised Continual Learning + +**Authors**: [Divyam Madaan](https://dmadaan.com/), [Jaehong Yoon](https://jaehong31.github.io), [Yuanchun Li](http://yuanchun-li.github.io), [Yunxin Liu](https://yunxinliu.github.io), [Sung Ju Hwang](http://sungjuhwang.com/) + +## Abstract + + +Continual learning (CL) aims to learn a sequence of tasks without forgetting the previously acquired knowledge. However, recent advances in continual learning are restricted to supervised continual learning (SCL) scenarios. Consequently, they are not scalable to real-world applications where the data distribution is often biased and unannotated. In this work, we focus on *unsupervised continual learning (UCL)*, where we learn the feature representations on an unlabelled sequence of tasks and show that the reliance on annotated data is not necessary for continual learning. We conduct a systematic study analyzing the learned feature representations and show that unsupervised visual representations are surprisingly more robust to catastrophic forgetting, consistently achieve better performance, and generalize better to out-of-distribution tasks than SCL. Furthermore, we find that UCL achieves a smoother loss landscape through qualitative analysis of the learned representations and learns meaningful feature representations. +Additionally, we propose Lifelong Unsupervised Mixup (Lump), a simple yet effective technique that leverages the interpolation between the current task and previous tasks' instances to alleviate catastrophic forgetting for unsupervised representations. + +__Contribution of this work__ +- We attempt to bridge the gap between continual learning and representation learning and tackle the two important problems of continual learning with unlabelled data and representation learning on a sequence of tasks. +- Systematic quantitative analysis show that UCL achieves better performance over SCL with significantly lower catastrophic forgetting on Sequential CIFAR-10, CIFAR-100 and Tiny-ImageNet. Additionally, we evaluate on out of distribution tasks and few-shot continually learning demonstrating the expressive power of unsupervised representations. +- We provide visualization of the representations and loss landscapes that UCL learns discriminative, human perceptual patterns and achieves a flatter and smoother loss landscape. Furthermore, we propose Lifelong Unsupervised Mixup (Lump) for UCL, which effectively alleviates catastrophic forgetting and provides better qualitative interpretations. + + +## Prerequisites +``` +$ pip install -r requirements.txt +``` + +## Run +* __Split CIFAR-10__ experiment with SimSiam +``` +$ python main.py --data_dir ../Data/ --log_dir ../logs/ -c configs/simsiam_c10.yaml --ckpt_dir ./checkpoints/cifar10_results/ --hide_progress +``` + +* __Split CIFAR-100__ experiment with SimSiam + +``` +$ python main.py --data_dir ../Data/ --log_dir ../logs/ -c configs/simsiam_c100.yaml --ckpt_dir ./checkpoints/cifar100_results/ --hide_progress +``` + +* __Split Tiny-ImageNet__ experiment with SimSiam + +``` +$ python main.py --data_dir ../Data/ --log_dir ../logs/ -c configs/simsiam_tinyimagenet.yaml --ckpt_dir ./checkpoints/tinyimagenet_results/ --hide_progress +``` + +* __Split CIFAR-10__ experiment with BarlowTwins +``` +$ python main.py --data_dir ../Data/ --log_dir ../logs/ -c configs/barlow_c10.yaml --ckpt_dir ./checkpoints/cifar10_results/ --hide_progress +``` + +* __Split CIFAR-100__ experiment with BarlowTwins + +``` +$ python main.py --data_dir ../Data/ --log_dir ../logs/ -c configs/barlowm_c100.yaml --ckpt_dir ./checkpoints/cifar100_results/ --hide_progress +``` + +* __Split Tiny-ImageNet__ experiment with BarlowTwins + +``` +$ python main.py --data_dir ../Data/ --log_dir ../logs/ -c configs/barlowm_tinyimagenet.yaml --ckpt_dir ./checkpoints/tinyimagenet_results/ --hide_progress +``` + +## Contributing +We'd love to accept your contributions to this project. Please feel free to open an issue, or submit a pull request as necessary. If you have implementations of this repository in other ML frameworks, please reach out so we may highlight them here. + +## Acknowledgment +The code is build upon [aimagelab/mammoth](https://github.com/aimagelab/mammoth) and [PatrickHua/SimSiam](https://github.com/PatrickHua/SimSiam) + +## Citation +If you found the provided code useful, please cite our work. + +```bibtex +@inproceedings{ + madaan2022rethinking, + title={Representational Continuity for Unsupervised Continual Learning}, + author={Divyam Madaan and Jaehong Yoon and Yuanchun Li and Yunxin Liu and Sung Ju Hwang}, + booktitle={International Conference on Learning Representations}, + year={2022}, + url={https://openreview.net/forum?id=9Hrka5PA7LW} +} +``` diff --git a/arguments.py b/arguments.py new file mode 100644 index 0000000..d5a792d --- /dev/null +++ b/arguments.py @@ -0,0 +1,112 @@ +import argparse +import os +import torch + +import numpy as np +import torch +import random + +import re +import yaml + +import shutil +import warnings + +from datetime import datetime + + +class Namespace(object): + def __init__(self, somedict): + for key, value in somedict.items(): + assert isinstance(key, str) and re.match("[A-Za-z_-]", key) + if isinstance(value, dict): + self.__dict__[key] = Namespace(value) + else: + self.__dict__[key] = value + + def __getattr__(self, attribute): + + raise AttributeError(f"Can not find {attribute} in namespace. Please write {attribute} in your config file(xxx.yaml)!") + + +def set_deterministic(seed): + # seed by default is None + if seed is not None: + print(f"Deterministic with seed = {seed}") + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.benchmark = False + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument('-c', '--config-file', required=True, type=str, help="xxx.yaml") + parser.add_argument('--debug', action='store_true') + parser.add_argument('--debug_subset_size', type=int, default=8) + parser.add_argument('--download', action='store_true', help="if can't find dataset, download from web") + parser.add_argument('--data_dir', type=str, default=os.getenv('DATA')) + parser.add_argument('--log_dir', type=str, default=os.getenv('LOG')) + parser.add_argument('--ckpt_dir', type=str, default=os.getenv('CHECKPOINT')) + parser.add_argument('--ckpt_dir_1', type=str, default=os.getenv('CHECKPOINT')) + parser.add_argument('--device', type=str, default='cuda' if torch.cuda.is_available() else 'cpu') + parser.add_argument('--eval_from', type=str, default=None) + parser.add_argument('--hide_progress', action='store_true') + parser.add_argument('--cl_default', action='store_true') + parser.add_argument('--validation', action='store_true', + help='Test on the validation set') + parser.add_argument('--ood_eval', action='store_true', + help='Test on the OOD set') + args = parser.parse_args() + + + with open(args.config_file, 'r') as f: + for key, value in Namespace(yaml.load(f, Loader=yaml.FullLoader)).__dict__.items(): + vars(args)[key] = value + + if args.debug: + if args.train: + args.train.batch_size = 2 + args.train.num_epochs = 1 + args.train.stop_at_epoch = 1 + if args.eval: + args.eval.batch_size = 2 + args.eval.num_epochs = 1 # train only one epoch + args.dataset.num_workers = 0 + + + assert not None in [args.log_dir, args.data_dir, args.ckpt_dir, args.name] + + args.log_dir = os.path.join(args.log_dir, 'in-progress_'+datetime.now().strftime('%m%d%H%M%S_')+args.name) + + os.makedirs(args.log_dir, exist_ok=False) + print(f'creating file {args.log_dir}') + os.makedirs(args.ckpt_dir, exist_ok=True) + + shutil.copy2(args.config_file, args.log_dir) + set_deterministic(args.seed) + + + vars(args)['aug_kwargs'] = { + 'name':args.model.name, + 'image_size': args.dataset.image_size + } + vars(args)['dataset_kwargs'] = { + # 'name':args.model.name, + # 'image_size': args.dataset.image_size, + 'dataset':args.dataset.name, + 'data_dir': args.data_dir, + 'download':args.download, + 'debug_subset_size': args.debug_subset_size if args.debug else None, + # 'drop_last': True, + # 'pin_memory': True, + # 'num_workers': args.dataset.num_workers, + } + vars(args)['dataloader_kwargs'] = { + 'drop_last': True, + 'pin_memory': True, + 'num_workers': args.dataset.num_workers, + } + + return args diff --git a/augmentations/__init__.py b/augmentations/__init__.py new file mode 100644 index 0000000..6787915 --- /dev/null +++ b/augmentations/__init__.py @@ -0,0 +1,23 @@ +from .simsiam_aug import SimSiamTransform +from .eval_aug import Transform_single + + +def get_aug(name='simsiam', image_size=224, train=True, train_classifier=None): + if train==True: + augmentation = SimSiamTransform(image_size) + elif train==False: + if train_classifier is None: + raise Exception + augmentation = Transform_single(image_size, train=train_classifier) + else: + raise Exception + + return augmentation + + + + + + + + diff --git a/augmentations/eval_aug.py b/augmentations/eval_aug.py new file mode 100644 index 0000000..74e42a3 --- /dev/null +++ b/augmentations/eval_aug.py @@ -0,0 +1,26 @@ +from torchvision import transforms +from PIL import Image + +# imagenet_norm = [[0.485, 0.456, 0.406],[0.229, 0.224, 0.225]] +imagenet_norm = [[0.4914, 0.4822, 0.4465],[0.2470, 0.2435, 0.2615]] + +class Transform_single(): + def __init__(self, image_size, train, normalize=imagenet_norm): + if train == True: + self.transform = transforms.Compose([ + transforms.RandomResizedCrop(image_size, scale=(0.08, 1.0), ratio=(3.0/4.0,4.0/3.0), interpolation=Image.BICUBIC), + # transforms.RandomCrop(image_size, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(*normalize) + ]) + else: + self.transform = transforms.Compose([ + # transforms.Resize(int(image_size*(8/7)), interpolation=Image.BICUBIC), # 224 -> 256 + # transforms.CenterCrop(image_size), + transforms.ToTensor(), + transforms.Normalize(*normalize) + ]) + + def __call__(self, x): + return self.transform(x) diff --git a/augmentations/gaussian_blur.py b/augmentations/gaussian_blur.py new file mode 100644 index 0000000..2fdcc73 --- /dev/null +++ b/augmentations/gaussian_blur.py @@ -0,0 +1,228 @@ +import torch +from torch import Tensor +from torchvision.transforms.functional import to_pil_image, to_tensor +from torch.nn.functional import conv2d, pad as torch_pad +from typing import Any, List, Sequence, Optional +import numbers +import numpy as np +import torch +from PIL import Image +from typing import Tuple + +class GaussianBlur(torch.nn.Module): + """Blurs image with randomly chosen Gaussian blur. + The image can be a PIL Image or a Tensor, in which case it is expected + to have [..., C, H, W] shape, where ... means an arbitrary number of leading + dimensions + + Args: + kernel_size (int or sequence): Size of the Gaussian kernel. + sigma (float or tuple of float (min, max)): Standard deviation to be used for + creating kernel to perform blurring. If float, sigma is fixed. If it is tuple + of float (min, max), sigma is chosen uniformly at random to lie in the + given range. + + Returns: + PIL Image or Tensor: Gaussian blurred version of the input image. + + """ + + def __init__(self, kernel_size, sigma=(0.1, 2.0)): + super().__init__() + self.kernel_size = _setup_size(kernel_size, "Kernel size should be a tuple/list of two integers") + for ks in self.kernel_size: + if ks <= 0 or ks % 2 == 0: + raise ValueError("Kernel size value should be an odd and positive number.") + + if isinstance(sigma, numbers.Number): + if sigma <= 0: + raise ValueError("If sigma is a single number, it must be positive.") + sigma = (sigma, sigma) + elif isinstance(sigma, Sequence) and len(sigma) == 2: + if not 0. < sigma[0] <= sigma[1]: + raise ValueError("sigma values should be positive and of the form (min, max).") + else: + raise ValueError("sigma should be a single number or a list/tuple with length 2.") + + self.sigma = sigma + + @staticmethod + def get_params(sigma_min: float, sigma_max: float) -> float: + """Choose sigma for random gaussian blurring. + + Args: + sigma_min (float): Minimum standard deviation that can be chosen for blurring kernel. + sigma_max (float): Maximum standard deviation that can be chosen for blurring kernel. + + Returns: + float: Standard deviation to be passed to calculate kernel for gaussian blurring. + """ + return torch.empty(1).uniform_(sigma_min, sigma_max).item() + + def forward(self, img: Tensor) -> Tensor: + """ + Args: + img (PIL Image or Tensor): image to be blurred. + + Returns: + PIL Image or Tensor: Gaussian blurred image + """ + sigma = self.get_params(self.sigma[0], self.sigma[1]) + return gaussian_blur(img, self.kernel_size, [sigma, sigma]) + + def __repr__(self): + s = '(kernel_size={}, '.format(self.kernel_size) + s += 'sigma={})'.format(self.sigma) + return self.__class__.__name__ + s + +@torch.jit.unused +def _is_pil_image(img: Any) -> bool: + return isinstance(img, Image.Image) +def _setup_size(size, error_msg): + if isinstance(size, numbers.Number): + return int(size), int(size) + + if isinstance(size, Sequence) and len(size) == 1: + return size[0], size[0] + + if len(size) != 2: + raise ValueError(error_msg) + + return size +def _is_tensor_a_torch_image(x: Tensor) -> bool: + return x.ndim >= 2 +def _get_gaussian_kernel1d(kernel_size: int, sigma: float) -> Tensor: + ksize_half = (kernel_size - 1) * 0.5 + + x = torch.linspace(-ksize_half, ksize_half, steps=kernel_size) + pdf = torch.exp(-0.5 * (x / sigma).pow(2)) + kernel1d = pdf / pdf.sum() + + return kernel1d + +def _cast_squeeze_in(img: Tensor, req_dtype: torch.dtype) -> Tuple[Tensor, bool, bool, torch.dtype]: + need_squeeze = False + # make image NCHW + if img.ndim < 4: + img = img.unsqueeze(dim=0) + need_squeeze = True + + out_dtype = img.dtype + need_cast = False + if out_dtype != req_dtype: + need_cast = True + img = img.to(req_dtype) + return img, need_cast, need_squeeze, out_dtype +def _cast_squeeze_out(img: Tensor, need_cast: bool, need_squeeze: bool, out_dtype: torch.dtype): + if need_squeeze: + img = img.squeeze(dim=0) + + if need_cast: + # it is better to round before cast + img = torch.round(img).to(out_dtype) + + return img +def _get_gaussian_kernel2d( + kernel_size: List[int], sigma: List[float], dtype: torch.dtype, device: torch.device +) -> Tensor: + kernel1d_x = _get_gaussian_kernel1d(kernel_size[0], sigma[0]).to(device, dtype=dtype) + kernel1d_y = _get_gaussian_kernel1d(kernel_size[1], sigma[1]).to(device, dtype=dtype) + kernel2d = torch.mm(kernel1d_y[:, None], kernel1d_x[None, :]) + return kernel2d +def _gaussian_blur(img: Tensor, kernel_size: List[int], sigma: List[float]) -> Tensor: + """PRIVATE METHOD. Performs Gaussian blurring on the img by given kernel. + + .. warning:: + + Module ``transforms.functional_tensor`` is private and should not be used in user application. + Please, consider instead using methods from `transforms.functional` module. + + Args: + img (Tensor): Image to be blurred + kernel_size (sequence of int or int): Kernel size of the Gaussian kernel ``(kx, ky)``. + sigma (sequence of float or float, optional): Standard deviation of the Gaussian kernel ``(sx, sy)``. + + Returns: + Tensor: An image that is blurred using gaussian kernel of given parameters + """ + if not (isinstance(img, torch.Tensor) or _is_tensor_a_torch_image(img)): + raise TypeError('img should be Tensor Image. Got {}'.format(type(img))) + + dtype = img.dtype if torch.is_floating_point(img) else torch.float32 + kernel = _get_gaussian_kernel2d(kernel_size, sigma, dtype=dtype, device=img.device) + kernel = kernel.expand(img.shape[-3], 1, kernel.shape[0], kernel.shape[1]) + + img, need_cast, need_squeeze, out_dtype = _cast_squeeze_in(img, kernel.dtype) + + # padding = (left, right, top, bottom) + padding = [kernel_size[0] // 2, kernel_size[0] // 2, kernel_size[1] // 2, kernel_size[1] // 2] + img = torch_pad(img, padding, mode="reflect") + img = conv2d(img, kernel, groups=img.shape[-3]) + + img = _cast_squeeze_out(img, need_cast, need_squeeze, out_dtype) + return img + +def gaussian_blur(img: Tensor, kernel_size: List[int], sigma: Optional[List[float]] = None) -> Tensor: + """Performs Gaussian blurring on the img by given kernel. + The image can be a PIL Image or a Tensor, in which case it is expected + to have [..., H, W] shape, where ... means an arbitrary number of leading dimensions + + Args: + img (PIL Image or Tensor): Image to be blurred + kernel_size (sequence of ints or int): Gaussian kernel size. Can be a sequence of integers + like ``(kx, ky)`` or a single integer for square kernels. + In torchscript mode kernel_size as single int is not supported, use a tuple or + list of length 1: ``[ksize, ]``. + sigma (sequence of floats or float, optional): Gaussian kernel standard deviation. Can be a + sequence of floats like ``(sigma_x, sigma_y)`` or a single float to define the + same sigma in both X/Y directions. If None, then it is computed using + ``kernel_size`` as ``sigma = 0.3 * ((kernel_size - 1) * 0.5 - 1) + 0.8``. + Default, None. In torchscript mode sigma as single float is + not supported, use a tuple or list of length 1: ``[sigma, ]``. + + Returns: + PIL Image or Tensor: Gaussian Blurred version of the image. + """ + if not isinstance(kernel_size, (int, list, tuple)): + raise TypeError('kernel_size should be int or a sequence of integers. Got {}'.format(type(kernel_size))) + if isinstance(kernel_size, int): + kernel_size = [kernel_size, kernel_size] + if len(kernel_size) != 2: + raise ValueError('If kernel_size is a sequence its length should be 2. Got {}'.format(len(kernel_size))) + for ksize in kernel_size: + if ksize % 2 == 0 or ksize < 0: + raise ValueError('kernel_size should have odd and positive integers. Got {}'.format(kernel_size)) + + if sigma is None: + sigma = [ksize * 0.15 + 0.35 for ksize in kernel_size] + + if sigma is not None and not isinstance(sigma, (int, float, list, tuple)): + raise TypeError('sigma should be either float or sequence of floats. Got {}'.format(type(sigma))) + if isinstance(sigma, (int, float)): + sigma = [float(sigma), float(sigma)] + if isinstance(sigma, (list, tuple)) and len(sigma) == 1: + sigma = [sigma[0], sigma[0]] + if len(sigma) != 2: + raise ValueError('If sigma is a sequence, its length should be 2. Got {}'.format(len(sigma))) + for s in sigma: + if s <= 0.: + raise ValueError('sigma should have positive values. Got {}'.format(sigma)) + + t_img = img + if not isinstance(img, torch.Tensor): + if not _is_pil_image(img): + raise TypeError('img should be PIL Image or Tensor. Got {}'.format(type(img))) + + t_img = to_tensor(img) + + output = _gaussian_blur(t_img, kernel_size, sigma) + + if not isinstance(img, torch.Tensor): + output = to_pil_image(output) + return output + + + + +# if __name__ == "__main__": +# gaussian_blur = GaussianBlur(kernel_size=23) diff --git a/augmentations/simsiam_aug.py b/augmentations/simsiam_aug.py new file mode 100644 index 0000000..897a0c0 --- /dev/null +++ b/augmentations/simsiam_aug.py @@ -0,0 +1,132 @@ +import torchvision.transforms as T +from PIL import Image +try: + from torchvision.transforms import GaussianBlur +except ImportError: + from .gaussian_blur import GaussianBlur + T.GaussianBlur = GaussianBlur + +# imagenet_mean_std = [[0.485, 0.456, 0.406],[0.229, 0.224, 0.225]] +imagenet_mean_std = [[0.4914, 0.4822, 0.4465],[0.2470, 0.2435, 0.2615]] + +class SimSiamTransform(): + def __init__(self, image_size, mean_std=imagenet_mean_std): + image_size = 224 if image_size is None else image_size # by default simsiam use image size 224 + p_blur = 0.5 if image_size > 32 else 0 # exclude cifar + # the paper didn't specify this, feel free to change this value + # I use the setting from simclr which is 50% chance applying the gaussian blur + # the 32 is prepared for cifar training where they disabled gaussian blur + self.not_aug_transform = T.Compose([T.ToTensor()]) + + self.transform = T.Compose([ + # T.RandomCrop(64, padding=4), + T.RandomResizedCrop(image_size, scale=(0.2, 1.0)), + T.RandomHorizontalFlip(), + T.RandomApply([T.ColorJitter(0.4,0.4,0.4,0.1)], p=0.8), + T.RandomGrayscale(p=0.2), + T.RandomApply([T.GaussianBlur(kernel_size=image_size//20*2+1, sigma=(0.1, 2.0))], p=p_blur), + T.ToTensor(), + T.Normalize(*mean_std) + ]) + def __call__(self, x): + x1 = self.transform(x) + x2 = self.transform(x) + not_aug_x = self.not_aug_transform(x) + return x1, x2, not_aug_x + + +def to_pil_image(pic, mode=None): + """Convert a tensor or an ndarray to PIL Image. + + See :class:`~torchvision.transforms.ToPILImage` for more details. + + Args: + pic (Tensor or numpy.ndarray): Image to be converted to PIL Image. + mode (`PIL.Image mode`_): color space and pixel depth of input data (optional). + + .. _PIL.Image mode: https://pillow.readthedocs.io/en/latest/handbook/concepts.html#concept-modes + + Returns: + PIL Image: Image converted to PIL Image. + """ + if not(isinstance(pic, torch.Tensor) or isinstance(pic, np.ndarray)): + raise TypeError('pic should be Tensor or ndarray. Got {}.'.format(type(pic))) + + elif isinstance(pic, torch.Tensor): + if pic.ndimension() not in {2, 3}: + raise ValueError('pic should be 2/3 dimensional. Got {} dimensions.'.format(pic.ndimension())) + + elif pic.ndimension() == 2: + # if 2D image, add channel dimension (CHW) + pic = pic.unsqueeze(0) + + elif isinstance(pic, np.ndarray): + if pic.ndim not in {2, 3}: + raise ValueError('pic should be 2/3 dimensional. Got {} dimensions.'.format(pic.ndim)) + + elif pic.ndim == 2: + # if 2D image, add channel dimension (HWC) + pic = np.expand_dims(pic, 2) + + npimg = pic + if isinstance(pic, torch.Tensor): + if pic.is_floating_point() and mode != 'F': + pic = pic.mul(255).byte() + npimg = np.transpose(pic.cpu().numpy(), (1, 2, 0)) + + if not isinstance(npimg, np.ndarray): + raise TypeError('Input pic must be a torch.Tensor or NumPy ndarray, ' + + 'not {}'.format(type(npimg))) + + if npimg.shape[2] == 1: + expected_mode = None + npimg = npimg[:, :, 0] + if npimg.dtype == np.uint8: + expected_mode = 'L' + elif npimg.dtype == np.int16: + expected_mode = 'I;16' + elif npimg.dtype == np.int32: + expected_mode = 'I' + elif npimg.dtype == np.float32: + expected_mode = 'F' + if mode is not None and mode != expected_mode: + raise ValueError("Incorrect mode ({}) supplied for input type {}. Should be {}" + .format(mode, np.dtype, expected_mode)) + mode = expected_mode + + elif npimg.shape[2] == 2: + permitted_2_channel_modes = ['LA'] + if mode is not None and mode not in permitted_2_channel_modes: + raise ValueError("Only modes {} are supported for 2D inputs".format(permitted_2_channel_modes)) + + if mode is None and npimg.dtype == np.uint8: + mode = 'LA' + + elif npimg.shape[2] == 4: + permitted_4_channel_modes = ['RGBA', 'CMYK', 'RGBX'] + if mode is not None and mode not in permitted_4_channel_modes: + raise ValueError("Only modes {} are supported for 4D inputs".format(permitted_4_channel_modes)) + + if mode is None and npimg.dtype == np.uint8: + mode = 'RGBA' + else: + permitted_3_channel_modes = ['RGB', 'YCbCr', 'HSV'] + if mode is not None and mode not in permitted_3_channel_modes: + raise ValueError("Only modes {} are supported for 3D inputs".format(permitted_3_channel_modes)) + if mode is None and npimg.dtype == np.uint8: + mode = 'RGB' + + if mode is None: + raise TypeError('Input type {} is not supported'.format(npimg.dtype)) + + return Image.fromarray(npimg, mode=mode) + + + + + + + + + + diff --git a/concept.png b/concept.png new file mode 100644 index 0000000000000000000000000000000000000000..741cbe3689fb5f62183234e01914b6fce09a4881 GIT binary patch literal 405595 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 z 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%0AZ`1@P6r4N+#PZRJCd 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

DEa0|-v@RpviuM9j;%8UB0uj6&cO}A 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

;ab!D$5=V~98?s9TLLhFh7IgHfce$BT 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 literal 0 HcmV?d00001 diff --git a/configs/__init__.py b/configs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/configs/barlow_c10.yaml b/configs/barlow_c10.yaml new file mode 100644 index 0000000..926ff04 --- /dev/null +++ b/configs/barlow_c10.yaml @@ -0,0 +1,54 @@ +name: barlow-c10-experiment-resnet18 +dataset: + name: seq-cifar10 + image_size: 32 + num_workers: 4 + +model: + name: barlowtwins + backbone: resnet18 + cl_model: finetune + proj_layers: 2 + buffer_size: 256 + +train: + optimizer: + name: sgd + weight_decay: 0.0005 + momentum: 0.9 + warmup_epochs: 10 + warmup_lr: 0 + base_lr: 0.03 + final_lr: 0 + num_epochs: 200 # this parameter influence the lr decay + stop_at_epoch: 200 # has to be smaller than num_epochs + batch_size: 256 + knn_monitor: True # knn monitor will take more time + knn_interval: 1 + knn_k: 200 + alpha: 0.4 +eval: # linear evaluation, False will turn off automatic evaluation after training + optimizer: + name: sgd + weight_decay: 0 + momentum: 0.9 + warmup_lr: 0 + warmup_epochs: 0 + base_lr: 30 + final_lr: 0 + batch_size: 256 + num_epochs: 100 + +logger: + csv_log: True + tensorboard: True + matplotlib: True + +seed: null # None type for yaml file +# two things might lead to stochastic behavior other than seed: +# worker_init_fn from dataloader and torch.nn.functional.interpolate +# (keep this in mind if you want to achieve 100% deterministic) + + + + diff --git a/configs/barlow_c100.yaml b/configs/barlow_c100.yaml new file mode 100644 index 0000000..f6b3f48 --- /dev/null +++ b/configs/barlow_c100.yaml @@ -0,0 +1,54 @@ +name: simsiam-c100-experiment-resnet18 +dataset: + name: seq-cifar100 + image_size: 32 + num_workers: 4 + +model: + name: barlowtwins + backbone: resnet18 + cl_model: finetune + proj_layers: 2 + buffer_size: 256 + +train: + optimizer: + name: sgd + weight_decay: 0.0005 + momentum: 0.9 + warmup_epochs: 10 + warmup_lr: 0 + base_lr: 0.03 + final_lr: 0 + num_epochs: 200 # this parameter influence the lr decay + stop_at_epoch: 200 # has to be smaller than num_epochs + batch_size: 256 + knn_monitor: True # knn monitor will take more time + knn_interval: 1 + knn_k: 200 + alpha: 0.4 +eval: # linear evaluation, False will turn off automatic evaluation after training + optimizer: + name: sgd + weight_decay: 0 + momentum: 0.9 + warmup_lr: 0 + warmup_epochs: 0 + base_lr: 30 + final_lr: 0 + batch_size: 256 + num_epochs: 100 + +logger: + csv_log: True + tensorboard: True + matplotlib: True + +seed: null # None type for yaml file +# two things might lead to stochastic behavior other than seed: +# worker_init_fn from dataloader and torch.nn.functional.interpolate +# (keep this in mind if you want to achieve 100% deterministic) + + + + diff --git a/configs/barlow_tinyimagenet.yaml b/configs/barlow_tinyimagenet.yaml new file mode 100644 index 0000000..e587c67 --- /dev/null +++ b/configs/barlow_tinyimagenet.yaml @@ -0,0 +1,54 @@ +name: simsiam-tinyimg-experiment-resnet18 +dataset: + name: seq-tinyimg + image_size: 64 + num_workers: 4 + +model: + name: barlowtwins + backbone: resnet18 + cl_model: finetune + proj_layers: 2 + buffer_size: 256 + +train: + optimizer: + name: sgd + weight_decay: 0.0005 + momentum: 0.9 + warmup_epochs: 10 + warmup_lr: 0 + base_lr: 0.03 + final_lr: 0 + num_epochs: 200 # this parameter influence the lr decay + stop_at_epoch: 200 # has to be smaller than num_epochs + batch_size: 256 + knn_monitor: True # knn monitor will take more time + knn_interval: 1 + knn_k: 200 + alpha: 0.4 +eval: # linear evaluation, False will turn off automatic evaluation after training + optimizer: + name: sgd + weight_decay: 0 + momentum: 0.9 + warmup_lr: 0 + warmup_epochs: 0 + base_lr: 30 + final_lr: 0 + batch_size: 256 + num_epochs: 100 + +logger: + csv_log: True + tensorboard: True + matplotlib: True + +seed: null # None type for yaml file +# two things might lead to stochastic behavior other than seed: +# worker_init_fn from dataloader and torch.nn.functional.interpolate +# (keep this in mind if you want to achieve 100% deterministic) + + + + diff --git a/configs/simsiam_c10.yaml b/configs/simsiam_c10.yaml new file mode 100644 index 0000000..cb63981 --- /dev/null +++ b/configs/simsiam_c10.yaml @@ -0,0 +1,54 @@ +name: simsiam-c10-experiment-resnet18 +dataset: + name: seq-cifar10 + image_size: 32 + num_workers: 4 + +model: + name: simsiam + backbone: resnet18 + cl_model: finetune + proj_layers: 2 + buffer_size: 256 + +train: + optimizer: + name: sgd + weight_decay: 0.0005 + momentum: 0.9 + warmup_epochs: 10 + warmup_lr: 0 + base_lr: 0.03 + final_lr: 0 + num_epochs: 200 # this parameter influence the lr decay + stop_at_epoch: 200 # has to be smaller than num_epochs + batch_size: 256 + knn_monitor: True # knn monitor will take more time + knn_interval: 1 + knn_k: 200 + alpha: 0.4 +eval: # linear evaluation, False will turn off automatic evaluation after training + optimizer: + name: sgd + weight_decay: 0 + momentum: 0.9 + warmup_lr: 0 + warmup_epochs: 0 + base_lr: 30 + final_lr: 0 + batch_size: 256 + num_epochs: 100 + +logger: + csv_log: True + tensorboard: True + matplotlib: True + +seed: null # None type for yaml file +# two things might lead to stochastic behavior other than seed: +# worker_init_fn from dataloader and torch.nn.functional.interpolate +# (keep this in mind if you want to achieve 100% deterministic) + + + + diff --git a/configs/simsiam_c100.yaml b/configs/simsiam_c100.yaml new file mode 100644 index 0000000..7fa03cb --- /dev/null +++ b/configs/simsiam_c100.yaml @@ -0,0 +1,54 @@ +name: simsiam-c100-experiment-resnet18 +dataset: + name: seq-cifar100 + image_size: 32 + num_workers: 4 + +model: + name: simsiam + backbone: resnet18 + cl_model: finetune + proj_layers: 2 + buffer_size: 256 + +train: + optimizer: + name: sgd + weight_decay: 0.0005 + momentum: 0.9 + warmup_epochs: 10 + warmup_lr: 0 + base_lr: 0.03 + final_lr: 0 + num_epochs: 200 # this parameter influence the lr decay + stop_at_epoch: 200 # has to be smaller than num_epochs + batch_size: 256 + knn_monitor: True # knn monitor will take more time + knn_interval: 1 + knn_k: 200 + alpha: 0.4 +eval: # linear evaluation, False will turn off automatic evaluation after training + optimizer: + name: sgd + weight_decay: 0 + momentum: 0.9 + warmup_lr: 0 + warmup_epochs: 0 + base_lr: 30 + final_lr: 0 + batch_size: 256 + num_epochs: 100 + +logger: + csv_log: True + tensorboard: True + matplotlib: True + +seed: null # None type for yaml file +# two things might lead to stochastic behavior other than seed: +# worker_init_fn from dataloader and torch.nn.functional.interpolate +# (keep this in mind if you want to achieve 100% deterministic) + + + + diff --git a/configs/simsiam_tinyimagenet.yaml b/configs/simsiam_tinyimagenet.yaml new file mode 100644 index 0000000..a723e50 --- /dev/null +++ b/configs/simsiam_tinyimagenet.yaml @@ -0,0 +1,54 @@ +name: simsiam-tinyimg-experiment-resnet18 +dataset: + name: seq-tinyimg + image_size: 64 + num_workers: 4 + +model: + name: simsiam + backbone: resnet18 + cl_model: finetune + proj_layers: 2 + buffer_size: 256 + +train: + optimizer: + name: sgd + weight_decay: 0.0005 + momentum: 0.9 + warmup_epochs: 10 + warmup_lr: 0 + base_lr: 0.03 + final_lr: 0 + num_epochs: 200 # this parameter influence the lr decay + stop_at_epoch: 200 # has to be smaller than num_epochs + batch_size: 256 + knn_monitor: True # knn monitor will take more time + knn_interval: 1 + knn_k: 200 + alpha: 0.4 +eval: # linear evaluation, False will turn off automatic evaluation after training + optimizer: + name: sgd + weight_decay: 0 + momentum: 0.9 + warmup_lr: 0 + warmup_epochs: 0 + base_lr: 30 + final_lr: 0 + batch_size: 256 + num_epochs: 100 + +logger: + csv_log: True + tensorboard: True + matplotlib: True + +seed: null # None type for yaml file +# two things might lead to stochastic behavior other than seed: +# worker_init_fn from dataloader and torch.nn.functional.interpolate +# (keep this in mind if you want to achieve 100% deterministic) + + + + diff --git a/datasets/__init__.py b/datasets/__init__.py new file mode 100644 index 0000000..0afc62d --- /dev/null +++ b/datasets/__init__.py @@ -0,0 +1,43 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from datasets.seq_mnist import SequentialMNIST +from datasets.seq_fmnist import SequentialFMNIST +from datasets.seq_cifar10 import SequentialCIFAR10 +from datasets.seq_cifar100 import SequentialCIFAR100 +from datasets.seq_tinyimagenet import SequentialTinyImagenet +from datasets.seq_svhn import SequentialSVHN +from datasets.utils.continual_dataset import ContinualDataset +from argparse import Namespace +import torchvision + +NAMES = { + SequentialMNIST.NAME: SequentialMNIST, + SequentialFMNIST.NAME: SequentialFMNIST, + SequentialSVHN.NAME: SequentialSVHN, + SequentialCIFAR10.NAME: SequentialCIFAR10, + SequentialCIFAR100.NAME: SequentialCIFAR100, + SequentialTinyImagenet.NAME: SequentialTinyImagenet, +} + + +def get_dataset(args: Namespace) -> ContinualDataset: + """ + Creates and returns a continual dataset. + :param args: the arguments which contains the hyperparameters + :return: the continual dataset + """ + assert args.dataset_kwargs['dataset'] in NAMES.keys() + return NAMES[args.dataset_kwargs['dataset']](args) + + +def get_gcl_dataset(args: Namespace): + """ + Creates and returns a GCL dataset. + :param args: the arguments which contains the hyperparameters + :return: the continual dataset + """ + assert args.dataset in GCL_NAMES.keys() + return GCL_NAMES[args.dataset](args) diff --git a/datasets/datasets_utils.py b/datasets/datasets_utils.py new file mode 100644 index 0000000..20da444 --- /dev/null +++ b/datasets/datasets_utils.py @@ -0,0 +1,26 @@ +########################################## +# Code from https://github.com/joansj/hat +########################################## + +import os,sys +import os.path +import numpy as np +import torch +import torch.utils.data +from torchvision import datasets,transforms +from sklearn.utils import shuffle +import urllib.request +from PIL import Image +import pickle + + +class FashionMNIST(datasets.MNIST): + """`Fashion MNIST `_ Dataset. + """ + urls = [ + 'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz', + 'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz', + 'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz', + 'http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz', + ] + diff --git a/datasets/random_dataset.py b/datasets/random_dataset.py new file mode 100644 index 0000000..f54f8eb --- /dev/null +++ b/datasets/random_dataset.py @@ -0,0 +1,16 @@ +import torch + +class RandomDataset(torch.utils.data.Dataset): + def __init__(self, root=None, train=True, transform=None, target_transform=None): + self.transform = transform + self.target_transform = target_transform + + self.size = 1000 + def __getitem__(self, idx): + if idx < self.size: + return [torch.randn((3, 224, 224)), torch.randn((3, 224, 224))], [0,0,0] + else: + raise Exception + + def __len__(self): + return self.size diff --git a/datasets/seq_cifar10.py b/datasets/seq_cifar10.py new file mode 100644 index 0000000..804c289 --- /dev/null +++ b/datasets/seq_cifar10.py @@ -0,0 +1,77 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from torchvision.datasets import CIFAR10 +import torchvision.transforms as transforms +import torch.nn.functional as F +from datasets.seq_tinyimagenet import base_path +from PIL import Image +from datasets.utils.validation import get_train_val +from datasets.utils.continual_dataset import ContinualDataset, store_masked_loaders +from datasets.utils.continual_dataset import get_previous_train_loader +from typing import Tuple +from datasets.transforms.denormalization import DeNormalize +import torch +from augmentations import get_aug +from PIL import Image + + +class SequentialCIFAR10(ContinualDataset): + + NAME = 'seq-cifar10' + SETTING = 'class-il' + N_CLASSES_PER_TASK = 2 + N_TASKS = 5 + + def get_data_loaders(self, args): + transform = get_aug(train=True, **args.aug_kwargs) + test_transform = get_aug(train=False, train_classifier=False, **args.aug_kwargs) + + train_dataset = CIFAR10(base_path() + 'CIFAR10', train=True, + download=True, transform=transform) + + memory_dataset = CIFAR10(base_path() + 'CIFAR10', train=True, + download=True, transform=test_transform) + if self.args.validation: + train_dataset, test_dataset = get_train_val(train_dataset, test_transform, self.NAME) + memory_dataset, _ = get_train_val(memory_dataset, test_transform, self.NAME) + else: + test_dataset = CIFAR10(base_path() + 'CIFAR10',train=False, + download=True, transform=test_transform) + + train, memory, test = store_masked_loaders(train_dataset, test_dataset, memory_dataset, self) + return train, memory, test + + def get_transform(self, args): + cifar_norm = [[0.4914, 0.4822, 0.4465], [0.2470, 0.2435, 0.2615]] + if args.cl_default: + transform = transforms.Compose( + [transforms.ToPILImage(), + transforms.RandomCrop(32, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(*cifar_norm) + ]) + else: + transform = transforms.Compose( + [transforms.ToPILImage(), + transforms.RandomResizedCrop(32, scale=(0.08, 1.0), ratio=(3.0/4.0,4.0/3.0), interpolation=Image.BICUBIC), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(*cifar_norm) + ]) + + return transform + + def not_aug_dataloader(self, batch_size): + cifar_norm = [[0.4914, 0.4822, 0.4465], [0.2470, 0.2435, 0.2615]] + transform = transforms.Compose([transforms.ToTensor(), + transforms.Normalize(*cifar_norm)]) + + train_dataset = CIFAR10(base_path() + 'CIFAR10', train=True, + download=True, transform=transform) + train_loader = get_previous_train_loader(train_dataset, batch_size, self) + + return train_loader diff --git a/datasets/seq_cifar100.py b/datasets/seq_cifar100.py new file mode 100644 index 0000000..81daaa6 --- /dev/null +++ b/datasets/seq_cifar100.py @@ -0,0 +1,79 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from torchvision.datasets import CIFAR100 +import torchvision.transforms as transforms +import torch.nn.functional as F +from datasets.seq_tinyimagenet import base_path +from PIL import Image +from datasets.utils.validation import get_train_val +from datasets.utils.continual_dataset import ContinualDataset, store_masked_loaders +from datasets.utils.continual_dataset import get_previous_train_loader +from typing import Tuple +from datasets.transforms.denormalization import DeNormalize +import torch +from augmentations import get_aug +from PIL import Image + + +class SequentialCIFAR100(ContinualDataset): + + NAME = 'seq-cifar100' + SETTING = 'class-il' + N_CLASSES_PER_TASK = 5 + N_TASKS = 20 + + def get_data_loaders(self, args): + transform = get_aug(train=True, **args.aug_kwargs) + test_transform = get_aug(train=False, train_classifier=False, **args.aug_kwargs) + + train_dataset = CIFAR100(base_path() + 'CIFAR100', train=True, + download=True, transform=transform) + + memory_dataset = CIFAR100(base_path() + 'CIFAR100', train=True, + download=True, transform=test_transform) + if self.args.validation: + train_dataset, test_dataset = get_train_val(train_dataset, test_transform, self.NAME) + memory_dataset, _ = get_train_val(memory_dataset, test_transform, self.NAME) + else: + test_dataset = CIFAR100(base_path() + 'CIFAR100',train=False, + download=True, transform=test_transform) + + train, memory, test = store_masked_loaders(train_dataset, test_dataset, memory_dataset, self) + return train, memory, test + + def get_transform(self, args): + cifar_norm = [[0.4914, 0.4822, 0.4465], [0.2470, 0.2435, 0.2615]] + if args.cl_default: + transform = transforms.Compose( + [transforms.ToPILImage(), + transforms.RandomCrop(32, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(*cifar_norm) + ]) + else: + transform = transforms.Compose( + [transforms.ToPILImage(), + transforms.RandomResizedCrop(32, scale=(0.08, 1.0), ratio=(3.0/4.0,4.0/3.0), interpolation=Image.BICUBIC), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(*cifar_norm) + ]) + + return transform + + + + def not_aug_dataloader(self, batch_size): + cifar_norm = [[0.4914, 0.4822, 0.4465], [0.2470, 0.2435, 0.2615]] + transform = transforms.Compose([transforms.ToTensor(), + transforms.Normalize(*cifar_norm)]) + + train_dataset = CIFAR100(base_path() + 'CIFAR100', train=True, + download=True, transform=transform) + train_loader = get_previous_train_loader(train_dataset, batch_size, self) + + return train_loader diff --git a/datasets/seq_fmnist.py b/datasets/seq_fmnist.py new file mode 100644 index 0000000..94db4e7 --- /dev/null +++ b/datasets/seq_fmnist.py @@ -0,0 +1,55 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from torchvision.datasets import FashionMNIST +import torchvision.transforms as transforms +import torch.nn.functional as F +from datasets.seq_tinyimagenet import base_path +from PIL import Image +from datasets.utils.validation import get_train_val +from datasets.utils.continual_dataset import ContinualDataset, store_masked_loaders +from datasets.utils.continual_dataset import get_previous_train_loader +from typing import Tuple +from datasets.transforms.denormalization import DeNormalize +import torch +from augmentations import get_aug +from PIL import Image + + +class SequentialFMNIST(ContinualDataset): + + NAME = 'seq-fmnist' + SETTING = 'class-il' + N_CLASSES_PER_TASK = 10 + N_TASKS = 1 + + def get_data_loaders(self, args): + mean=(0.2190,) # Mean and std including the padding + std=(0.3318,) + train_dataset = FashionMNIST(base_path() + 'FMNIST', train=True, + download=True, transform=transforms.Compose([ + transforms.Pad(padding=2,fill=0),transforms.ToTensor(), + transforms.Lambda(lambda x: x.repeat(3,1,1)), + transforms.Normalize(mean,std)])) + + memory_dataset = FashionMNIST(base_path() + 'FMNIST', train=True, + download=True, transform=transforms.Compose([ + transforms.Pad(padding=2,fill=0),transforms.ToTensor(), + transforms.Lambda(lambda x: x.repeat(3,1,1)), + transforms.Normalize(mean,std)])) + + if self.args.validation: + train_dataset, test_dataset = get_train_val(train_dataset, test_transform, self.NAME) + memory_dataset, _ = get_train_val(memory_dataset, test_transform, self.NAME) + else: + test_dataset = FashionMNIST(base_path() + 'FMNIST',train=False, + download=True, transform=transforms.Compose([ + transforms.Pad(padding=2,fill=0),transforms.ToTensor(), + transforms.Lambda(lambda x: x.repeat(3,1,1)), + transforms.Normalize(mean,std)])) + + train, memory, test = store_masked_loaders(train_dataset, test_dataset, memory_dataset, self) + return train, memory, test + diff --git a/datasets/seq_mnist.py b/datasets/seq_mnist.py new file mode 100644 index 0000000..1ae1ce6 --- /dev/null +++ b/datasets/seq_mnist.py @@ -0,0 +1,63 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from torchvision.datasets import MNIST +import torchvision.transforms as transforms +import torch.nn.functional as F +from datasets.seq_tinyimagenet import base_path +from PIL import Image +from datasets.utils.validation import get_train_val +from datasets.utils.continual_dataset import ContinualDataset, store_masked_loaders +from datasets.utils.continual_dataset import get_previous_train_loader +from typing import Tuple +from datasets.transforms.denormalization import DeNormalize +import torch +from augmentations import get_aug +from PIL import Image + + +class SequentialMNIST(ContinualDataset): + + NAME = 'seq-mnist' + SETTING = 'class-il' + N_CLASSES_PER_TASK = 10 + N_TASKS = 1 + + def get_data_loaders(self, args): + mean = (0.1,) + std = (0.2752,) + train_dataset = MNIST(base_path() + 'MNIST', train=True, + download=True, transform=transforms.Compose([ + transforms.Pad(padding=2,fill=0),transforms.ToTensor(), + transforms.Lambda(lambda x: x.repeat(3,1,1)), + transforms.Normalize(mean,std)])) + + memory_dataset = MNIST(base_path() + 'MNIST', train=True, + download=True, transform=transforms.Compose([ + transforms.Pad(padding=2,fill=0),transforms.ToTensor(), + transforms.Lambda(lambda x: x.repeat(3,1,1)), + transforms.Normalize(mean,std)])) + + if self.args.validation: + train_dataset, test_dataset = get_train_val(train_dataset, test_transform, self.NAME) + memory_dataset, _ = get_train_val(memory_dataset, test_transform, self.NAME) + else: + test_dataset = MNIST(base_path() + 'MNIST',train=False, + download=True, transform=transforms.Compose([ + transforms.Pad(padding=2,fill=0),transforms.ToTensor(), + transforms.Lambda(lambda x: x.repeat(3,1,1)), + transforms.Normalize(mean,std)])) + + train, memory, test = store_masked_loaders(train_dataset, test_dataset, memory_dataset, self) + return train, memory, test + + def get_transform(self, ags): + transform = transforms.Compose( + [transforms.Pad(padding=2,fill=0), + transforms.ToTensor(), + transforms.Lambda(lambda x: x.repeat(3,1,1)), + transforms.Normalize(mean, std) + ]) + return transform diff --git a/datasets/seq_svhn.py b/datasets/seq_svhn.py new file mode 100644 index 0000000..c4999e1 --- /dev/null +++ b/datasets/seq_svhn.py @@ -0,0 +1,56 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from torchvision.datasets import SVHN +import torchvision.transforms as transforms +import torch.nn.functional as F +from datasets.seq_tinyimagenet import base_path +from PIL import Image +from datasets.utils.validation import get_train_val +from datasets.utils.continual_dataset import ContinualDataset, store_masked_label_loaders +from datasets.utils.continual_dataset import get_previous_train_loader +from typing import Tuple +from datasets.transforms.denormalization import DeNormalize +import torch +from augmentations import get_aug +from PIL import Image + + +class SequentialSVHN(ContinualDataset): + + NAME = 'seq-svhn' + SETTING = 'class-il' + N_CLASSES_PER_TASK = 10 + N_TASKS = 1 + + def get_data_loaders(self, args): + transform = get_aug(train=True, **args.aug_kwargs) + test_transform = get_aug(train=False, train_classifier=False, **args.aug_kwargs) + + train_dataset = SVHN(base_path() + 'SVHN', split='train', + download=True, transform=transform) + + memory_dataset = SVHN(base_path() + 'SVHN', split='train', + download=True, transform=test_transform) + if self.args.validation: + train_dataset, test_dataset = get_train_val(train_dataset, test_transform, self.NAME) + memory_dataset, _ = get_train_val(memory_dataset, test_transform, self.NAME) + else: + test_dataset = SVHN(base_path() + 'SVHN', split='test', + download=True, transform=test_transform) + + train, memory, test = store_masked_label_loaders(train_dataset, test_dataset, memory_dataset, self) + return train, memory, test + + def get_transform(self, args): + svhn_norm = [[0.4377,0.4438,0.4728], [0.198,0.201,0.197]] + transform = transforms.Compose( + [transforms.ToPILImage(), + transforms.RandomResizedCrop(32, scale=(0.08, 1.0), ratio=(3.0/4.0,4.0/3.0), interpolation=Image.BICUBIC), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(*svhn_norm) + ]) + return transform diff --git a/datasets/seq_tinyimagenet.py b/datasets/seq_tinyimagenet.py new file mode 100644 index 0000000..a9669b9 --- /dev/null +++ b/datasets/seq_tinyimagenet.py @@ -0,0 +1,147 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import numpy as np +import torchvision.transforms as transforms +from torch.utils.data import Dataset +import torch.nn.functional as F +from utils.conf import base_path +from PIL import Image +import os +from datasets.utils.validation import get_train_val +from datasets.utils.continual_dataset import ContinualDataset, store_masked_loaders +from datasets.utils.continual_dataset import get_previous_train_loader +from datasets.transforms.denormalization import DeNormalize +from augmentations import get_aug + + +class TinyImagenet(Dataset): + """ + Defines Tiny Imagenet as for the others pytorch datasets. + """ + def __init__(self, root: str, train: bool=True, transform: transforms=None, + target_transform: transforms=None, download: bool=False) -> None: + self.not_aug_transform = transforms.Compose([transforms.ToTensor()]) + self.root = root + self.train = train + self.transform = transform + self.target_transform = target_transform + self.download = download + + if download: + if os.path.isdir(root) and len(os.listdir(root)) > 0: + print('Download not needed, files already on disk.') + else: + from google_drive_downloader import GoogleDriveDownloader as gdd + + # https://drive.google.com/file/d/1Sy3ScMBr0F4se8VZ6TAwDYF-nNGAAdxj/view + print('Downloading dataset') + gdd.download_file_from_google_drive( + file_id='1Sy3ScMBr0F4se8VZ6TAwDYF-nNGAAdxj', + + dest_path=os.path.join(root, 'tiny-imagenet-processed.zip'), + unzip=True) + + self.data = [] + for num in range(20): + self.data.append(np.load(os.path.join( + root, 'processed/x_%s_%02d.npy' % + ('train' if self.train else 'val', num+1)))) + self.data = np.concatenate(np.array(self.data)) + + self.targets = [] + for num in range(20): + self.targets.append(np.load(os.path.join( + root, 'processed/y_%s_%02d.npy' % + ('train' if self.train else 'val', num+1)))) + self.targets = np.concatenate(np.array(self.targets)) + + def __len__(self): + return len(self.data) + + def __getitem__(self, index): + img, target = self.data[index], self.targets[index] + + # doing this so that it is consistent with all other datasets + # to return a PIL Image + img = Image.fromarray(np.uint8(255 * img)) + original_img = img.copy() + + if self.transform is not None: + img = self.transform(img) + + if self.target_transform is not None: + target = self.target_transform(target) + + if hasattr(self, 'logits'): + return img, target, original_img, self.logits[index] + + return img, target + + +class SequentialTinyImagenet(ContinualDataset): + + NAME = 'seq-tinyimg' + SETTING = 'class-il' + N_CLASSES_PER_TASK = 5 + N_TASKS = 20 + TRANSFORM = transforms.Compose( + [transforms.RandomCrop(64, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize((0.4802, 0.4480, 0.3975), + (0.2770, 0.2691, 0.2821))]) + + def get_data_loaders(self, args): + transform = get_aug(train=True, **args.aug_kwargs) + test_transform = get_aug(train=False, train_classifier=False, **args.aug_kwargs) + + train_dataset = TinyImagenet(base_path() + 'TINYIMG', + train=True, download=True, transform=transform) + + memory_dataset = TinyImagenet(base_path() + 'TINYIMG', + train=True, download=True, transform=test_transform) + if self.args.validation: + train_dataset, test_dataset = get_train_val(train_dataset, + test_transform, self.NAME) + memory_dataset, _ = get_train_val(memory_dataset, test_transform, self.NAME) + else: + test_dataset = TinyImagenet(base_path() + 'TINYIMG', + train=False, download=True, transform=test_transform) + + train, memory, test = store_masked_loaders(train_dataset, test_dataset, memory_dataset, self) + return train, memory, test + + def get_transform(self, args): + imagenet_norm = [[0.4802, 0.4480, 0.3975], [0.2770, 0.2691, 0.2821]] + if args.cl_default: + transform = transforms.Compose( + [transforms.ToPILImage(), + transforms.RandomCrop(64, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(*imagenet_norm) + ]) + else: + transform = transforms.Compose( + [transforms.ToPILImage(), + transforms.RandomResizedCrop(64, scale=(0.08, 1.0), ratio=(3.0/4.0,4.0/3.0), interpolation=Image.BICUBIC), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(*imagenet_norm) + ]) + + return transform + + def not_aug_dataloader(self, batch_size): + imagenet_norm = [[0.4802, 0.4480, 0.3975], [0.2770, 0.2691, 0.2821]] + transform = transforms.Compose([transforms.ToTensor(), + transforms.Normalize(*imagenet_norm)]) + + train_dataset = TinyImagenet(base_path() + 'TINYIMG', + train=True, download=True, transform=transform) + train_loader = get_previous_train_loader(train_dataset, batch_size, self) + + return train_loader diff --git a/datasets/transforms/__init__.py b/datasets/transforms/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/datasets/transforms/denormalization.py b/datasets/transforms/denormalization.py new file mode 100644 index 0000000..637df01 --- /dev/null +++ b/datasets/transforms/denormalization.py @@ -0,0 +1,21 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + + +class DeNormalize(object): + def __init__(self, mean, std): + self.mean = mean + self.std = std + + def __call__(self, tensor): + """ + Args: + tensor (Tensor): Tensor image of size (C, H, W) to be normalized. + Returns: + Tensor: Normalized image. + """ + for t, m, s in zip(tensor, self.mean, self.std): + t.mul_(s).add_(m) + return tensor diff --git a/datasets/transforms/permutation.py b/datasets/transforms/permutation.py new file mode 100644 index 0000000..12411f8 --- /dev/null +++ b/datasets/transforms/permutation.py @@ -0,0 +1,55 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import numpy as np + + +class Permutation(object): + """ + Defines a fixed permutation for a numpy array. + """ + def __init__(self) -> None: + """ + Initializes the permutation. + """ + self.perm = None + + def __call__(self, sample: np.ndarray) -> np.ndarray: + """ + Randomly defines the permutation and applies the transformation. + :param sample: image to be permuted + :return: permuted image + """ + old_shape = sample.shape + if self.perm is None: + self.perm = np.random.permutation(len(sample.flatten())) + + return sample.flatten()[self.perm].reshape(old_shape) + + +class FixedPermutation(object): + """ + Defines a fixed permutation (given the seed) for a numpy array. + """ + def __init__(self, seed: int) -> None: + """ + Defines the seed. + :param seed: seed of the permutation + """ + self.perm = None + self.seed = seed + + def __call__(self, sample: np.ndarray) -> np.ndarray: + """ + Defines the permutation and applies the transformation. + :param sample: image to be permuted + :return: permuted image + """ + old_shape = sample.shape + if self.perm is None: + np.random.seed(self.seed) + self.perm = np.random.permutation(len(sample.flatten())) + + return sample.flatten()[self.perm].reshape(old_shape) diff --git a/datasets/transforms/rotation.py b/datasets/transforms/rotation.py new file mode 100644 index 0000000..f03b831 --- /dev/null +++ b/datasets/transforms/rotation.py @@ -0,0 +1,92 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import numpy as np +import torchvision.transforms.functional as F + + +class Rotation(object): + """ + Defines a fixed rotation for a numpy array. + """ + + def __init__(self, deg_min: int = 0, deg_max: int = 180) -> None: + """ + Initializes the rotation with a random angle. + :param deg_min: lower extreme of the possible random angle + :param deg_max: upper extreme of the possible random angle + """ + self.deg_min = deg_min + self.deg_max = deg_max + self.degrees = np.random.uniform(self.deg_min, self.deg_max) + + def __call__(self, x: np.ndarray) -> np.ndarray: + """ + Applies the rotation. + :param x: image to be rotated + :return: rotated image + """ + return F.rotate(x, self.degrees) + + +class FixedRotation(object): + """ + Defines a fixed rotation for a numpy array. + """ + + def __init__(self, seed: int, deg_min: int = 0, deg_max: int = 180) -> None: + """ + Initializes the rotation with a random angle. + :param seed: seed of the rotation + :param deg_min: lower extreme of the possible random angle + :param deg_max: upper extreme of the possible random angle + """ + self.seed = seed + self.deg_min = deg_min + self.deg_max = deg_max + + np.random.seed(seed) + self.degrees = np.random.uniform(self.deg_min, self.deg_max) + + def __call__(self, x: np.ndarray) -> np.ndarray: + """ + Applies the rotation. + :param x: image to be rotated + :return: rotated image + """ + return F.rotate(x, self.degrees) + + +class IncrementalRotation(object): + """ + Defines an incremental rotation for a numpy array. + """ + + def __init__(self, init_deg: int = 0, increase_per_iteration: float = 0.006) -> None: + """ + Defines the initial angle as well as the increase for each rotation + :param init_deg: + :param increase_per_iteration: + """ + self.increase_per_iteration = increase_per_iteration + self.iteration = 0 + self.degrees = init_deg + + def __call__(self, x: np.ndarray) -> np.ndarray: + """ + Applies the rotation. + :param x: image to be rotated + :return: rotated image + """ + degs = (self.iteration * self.increase_per_iteration + self.degrees) % 360 + self.iteration += 1 + return F.rotate(x, degs) + + def set_iteration(self, x: int) -> None: + """ + Set the iteration to a given integer + :param x: iteration index + """ + self.iteration = x diff --git a/datasets/utils/__init__.py b/datasets/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/datasets/utils/continual_dataset.py b/datasets/utils/continual_dataset.py new file mode 100644 index 0000000..bdb9de2 --- /dev/null +++ b/datasets/utils/continual_dataset.py @@ -0,0 +1,194 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from abc import abstractmethod +from argparse import Namespace +from torch import nn as nn +from torchvision.transforms import transforms +from torch.utils.data import DataLoader +from typing import Tuple +from torchvision import datasets +import numpy as np + + +class ContinualDataset: + """ + Continual learning evaluation setting. + """ + NAME = None + SETTING = None + N_CLASSES_PER_TASK = None + N_TASKS = None + TRANSFORM = None + + def __init__(self, args: Namespace) -> None: + """ + Initializes the train and test lists of dataloaders. + :param args: the arguments which contains the hyperparameters + """ + self.train_loader = None + self.test_loaders = [] + self.memory_loaders = [] + self.train_loaders = [] + self.i = 0 + self.args = args + + @abstractmethod + def get_data_loaders(self) -> Tuple[DataLoader, DataLoader]: + """ + Creates and returns the training and test loaders for the current task. + The current training loader and all test loaders are stored in self. + :return: the current training and test loaders + """ + pass + + @abstractmethod + def not_aug_dataloader(self, batch_size: int) -> DataLoader: + """ + Returns the dataloader of the current task, + not applying data augmentation. + :param batch_size: the batch size of the loader + :return: the current training loader + """ + pass + + @staticmethod + @abstractmethod + def get_backbone() -> nn.Module: + """ + Returns the backbone to be used for to the current dataset. + """ + pass + + @staticmethod + @abstractmethod + def get_transform() -> transforms: + """ + Returns the transform to be used for to the current dataset. + """ + pass + + @staticmethod + @abstractmethod + def get_loss() -> nn.functional: + """ + Returns the loss to be used for to the current dataset. + """ + pass + + @staticmethod + @abstractmethod + def get_normalization_transform() -> transforms: + """ + Returns the transform used for normalizing the current dataset. + """ + pass + + @staticmethod + @abstractmethod + def get_denormalization_transform() -> transforms: + """ + Returns the transform used for denormalizing the current dataset. + """ + pass + + +def store_masked_loaders(train_dataset: datasets, test_dataset: datasets, memory_dataset: datasets, + setting: ContinualDataset) -> Tuple[DataLoader, DataLoader]: + """ + Divides the dataset into tasks. + :param train_dataset: train dataset + :param test_dataset: test dataset + :param setting: continual learning setting + :return: train and test loaders + """ + train_mask = np.logical_and(np.array(train_dataset.targets) >= setting.i, + np.array(train_dataset.targets) < setting.i + setting.N_CLASSES_PER_TASK) + test_mask = np.logical_and(np.array(test_dataset.targets) >= setting.i, + np.array(test_dataset.targets) < setting.i + setting.N_CLASSES_PER_TASK) + + train_dataset.data = train_dataset.data[train_mask] + test_dataset.data = test_dataset.data[test_mask] + + train_dataset.targets = np.array(train_dataset.targets)[train_mask] + test_dataset.targets = np.array(test_dataset.targets)[test_mask] + + memory_dataset.data = memory_dataset.data[train_mask] + memory_dataset.targets = np.array(memory_dataset.targets)[train_mask] + + train_loader = DataLoader(train_dataset, + batch_size=setting.args.train.batch_size, shuffle=True, num_workers=4) + test_loader = DataLoader(test_dataset, + batch_size=setting.args.train.batch_size, shuffle=False, num_workers=4) + memory_loader = DataLoader(memory_dataset, + batch_size=setting.args.train.batch_size, shuffle=False, num_workers=4) + + setting.test_loaders.append(test_loader) + setting.train_loaders.append(train_loader) + setting.memory_loaders.append(memory_loader) + setting.train_loader = train_loader + + setting.i += setting.N_CLASSES_PER_TASK + return train_loader, memory_loader, test_loader + + +def store_masked_label_loaders(train_dataset: datasets, test_dataset: datasets, memory_dataset: datasets, + setting: ContinualDataset) -> Tuple[DataLoader, DataLoader]: + """ + Divides the dataset into tasks. + :param train_dataset: train dataset + :param test_dataset: test dataset + :param setting: continual learning setting + :return: train and test loaders + """ + train_mask = np.logical_and(np.array(train_dataset.labels) >= setting.i, + np.array(train_dataset.labels) < setting.i + setting.N_CLASSES_PER_TASK) + test_mask = np.logical_and(np.array(test_dataset.labels) >= setting.i, + np.array(test_dataset.labels) < setting.i + setting.N_CLASSES_PER_TASK) + + train_dataset.data = train_dataset.data[train_mask] + test_dataset.data = test_dataset.data[test_mask] + + train_dataset.targets = np.array(train_dataset.labels)[train_mask] + test_dataset.targets = np.array(test_dataset.labels)[test_mask] + + memory_dataset.data = memory_dataset.data[train_mask] + memory_dataset.targets = np.array(memory_dataset.labels)[train_mask] + + train_loader = DataLoader(train_dataset, + batch_size=setting.args.train.batch_size, shuffle=True, num_workers=4) + test_loader = DataLoader(test_dataset, + batch_size=setting.args.train.batch_size, shuffle=False, num_workers=4) + memory_loader = DataLoader(memory_dataset, + batch_size=setting.args.train.batch_size, shuffle=False, num_workers=4) + + setting.test_loaders.append(test_loader) + setting.train_loaders.append(train_loader) + setting.memory_loaders.append(memory_loader) + setting.train_loader = train_loader + + setting.i += setting.N_CLASSES_PER_TASK + return train_loader, memory_loader, test_loader + + + + +def get_previous_train_loader(train_dataset: datasets, batch_size: int, + setting: ContinualDataset) -> DataLoader: + """ + Creates a dataloader for the previous task. + :param train_dataset: the entire training set + :param batch_size: the desired batch size + :param setting: the continual dataset at hand + :return: a dataloader + """ + train_mask = np.logical_and(np.array(train_dataset.targets) >= + setting.i - setting.N_CLASSES_PER_TASK, np.array(train_dataset.targets) + < setting.i - setting.N_CLASSES_PER_TASK + setting.N_CLASSES_PER_TASK) + + train_dataset.data = train_dataset.data[train_mask] + train_dataset.targets = np.array(train_dataset.targets)[train_mask] + + return DataLoader(train_dataset, batch_size=batch_size, shuffle=True) diff --git a/datasets/utils/validation.py b/datasets/utils/validation.py new file mode 100644 index 0000000..465378d --- /dev/null +++ b/datasets/utils/validation.py @@ -0,0 +1,74 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch +from PIL import Image +import numpy as np +import os +from utils import create_if_not_exists +import torchvision.transforms.transforms as transforms +from torchvision import datasets + + +class ValidationDataset(torch.utils.data.Dataset): + def __init__(self, data: torch.Tensor, targets: np.ndarray, + transform: transforms=None, target_transform: transforms=None) -> None: + self.data = data + self.targets = targets + self.transform = transform + self.target_transform = target_transform + + def __len__(self): + return self.data.shape[0] + + def __getitem__(self, index): + img, target = self.data[index], self.targets[index] + + # doing this so that it is consistent with all other datasets + # to return a PIL Image + if isinstance(img, np.ndarray): + if np.max(img) < 2: + img = Image.fromarray(np.uint8(img * 255)) + else: + img = Image.fromarray(img) + else: + img = Image.fromarray(img.numpy()) + + if self.transform is not None: + img = self.transform(img) + + if self.target_transform is not None: + target = self.target_transform(target) + + return img, target + +def get_train_val(train: datasets, test_transform: transforms, + dataset: str, val_perc: float=0.1): + """ + Extract val_perc% of the training set as the validation set. + :param train: training dataset + :param test_transform: transformation of the test dataset + :param dataset: dataset name + :param val_perc: percentage of the training set to be extracted + :return: the training set and the validation set + """ + dataset_length = train.data.shape[0] + directory = 'datasets/val_permutations/' + create_if_not_exists(directory) + file_name = dataset + '.pt' + if os.path.exists(directory + file_name): + perm = torch.load(directory + file_name) + else: + perm = torch.randperm(dataset_length) + torch.save(perm, directory + file_name) + train.data = train.data[perm] + train.targets = np.array(train.targets)[perm] + test_dataset = ValidationDataset(train.data[:int(val_perc * dataset_length)], + train.targets[:int(val_perc * dataset_length)], + transform=test_transform) + train.data = train.data[int(val_perc * dataset_length):] + train.targets = train.targets[int(val_perc * dataset_length):] + + return train, test_dataset diff --git a/datasets/val_permutations/seq-cifar10.pt b/datasets/val_permutations/seq-cifar10.pt new file mode 100644 index 0000000000000000000000000000000000000000..2bc2f06a6a76ea7a6421318e001774bd99320b80 GIT binary patch literal 400760 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�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

    HF-=&R=Q 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 z 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 Tuple[list, list, list, list]: + accs, accs_mask_classes = [], [] + knn_accs, knn_accs_mask_classes = [], [] + correct = correct_mask_classes = total = 0 + knn_acc, knn_acc_mask = knn_monitor(model.net.module.backbone, dataset, memory_loader, test_loader, device, args.cl_default, task_id=k, k=min(args.train.knn_k, len(dataset.memory_loaders[k].dataset))) + + return knn_acc + + +def main(device, args): + + dataset_copy = get_dataset(args) + train_loader, memory_loader, test_loader = dataset_copy.get_data_loaders(args) + model = get_model(args, device, len(train_loader), get_aug(train=False, train_classifier=False, **args.aug_kwargs)) + + for t in range(dataset_copy.N_TASKS - 1): + _, _, _ = dataset_copy.get_data_loaders(args) + + knn_acc = [] + for t in tqdm(range(0, dataset_copy.N_TASKS), desc='Evaluatinng'): + dataset = get_dataset(args) + model_path = os.path.join(args.ckpt_dir, f"{args.model.cl_model}_{args.name}_{t}.pth") + save_dict = torch.load(model_path, map_location='cpu') + + msg = model.net.module.backbone.load_state_dict({k[16:]:v for k, v in save_dict['state_dict'].items() if 'backbone.' in k}, strict=True) + model = model.to(args.device) + + task_knn_acc = [] + for t1 in tqdm(range(0, dataset_copy.N_TASKS), desc='Inner tasks'): + train_loader, memory_loader, test_loader = dataset.get_data_loaders(args) + t1_knn_acc = evaluate_single(model, dataset, test_loader, memory_loader, device, t1) + task_knn_acc.append(t1_knn_acc) + knn_acc.append(task_knn_acc) + print(f'Task {t}: {task_knn_acc}') + + mean_knn_acc = sum(knn_acc[-1][:len(knn_acc[-1])]) / len(knn_acc[-1]) + print(f'KNN accuracy on Task {t1}: {mean_knn_acc}') + + max_knn_acc = [max(idx) for idx in zip(*knn_acc)] + mean_knn_fgt = sum([x1 - x2 for (x1, x2) in zip(max_knn_acc, knn_acc[-1])]) / len(knn_acc[-1]) + print(f'KNN Forgetting: {mean_knn_fgt}') + + +if __name__ == "__main__": + args = get_args() + main(device=args.device, args=args) diff --git a/main.py b/main.py new file mode 100644 index 0000000..adda2a0 --- /dev/null +++ b/main.py @@ -0,0 +1,123 @@ +import os +import torch +import torch.nn as nn +import torch.nn.functional as F +import torchvision +import numpy as np +from tqdm import tqdm +from arguments import get_args +from augmentations import get_aug +from models import get_model +from tools import AverageMeter, knn_monitor, Logger, file_exist_check +from datasets import get_dataset +from datetime import datetime +from utils.loggers import * +from utils.metrics import mask_classes +from utils.loggers import CsvLogger +from datasets.utils.continual_dataset import ContinualDataset +from models.utils.continual_model import ContinualModel +from typing import Tuple + + +def evaluate(model: ContinualModel, dataset: ContinualDataset, device, classifier=None) -> Tuple[list, list]: + """ + Evaluates the accuracy of the model for each past task. + :param model: the model to be evaluated + :param dataset: the continual dataset at hand + :return: a tuple of lists, containing the class-il + and task-il accuracy for each task + """ + status = model.training + model.eval() + accs, accs_mask_classes = [], [] + for k, test_loader in enumerate(dataset.test_loaders): + correct, correct_mask_classes, total = 0.0, 0.0, 0.0 + for data in test_loader: + inputs, labels = data + inputs, labels = inputs.to(device), labels.to(device) + outputs = model(inputs) + if classifier is not None: + outputs = classifier(outputs) + + _, pred = torch.max(outputs.data, 1) + correct += torch.sum(pred == labels).item() + total += labels.shape[0] + + if dataset.SETTING == 'class-il': + mask_classes(outputs, dataset, k) + _, pred = torch.max(outputs.data, 1) + correct_mask_classes += torch.sum(pred == labels).item() + + accs.append(correct / total * 100) + accs_mask_classes.append(correct_mask_classes / total * 100) + + model.train(status) + return accs, accs_mask_classes + + +def main(device, args): + + dataset = get_dataset(args) + dataset_copy = get_dataset(args) + train_loader, memory_loader, test_loader = dataset_copy.get_data_loaders(args) + + # define model + model = get_model(args, device, len(train_loader), dataset.get_transform(args)) + + logger = Logger(matplotlib=args.logger.matplotlib, log_dir=args.log_dir) + accuracy = 0 + + for t in range(dataset.N_TASKS): + train_loader, memory_loader, test_loader = dataset.get_data_loaders(args) + global_progress = tqdm(range(0, args.train.stop_at_epoch), desc=f'Training') + for epoch in global_progress: + model.train() + results, results_mask_classes = [], [] + + local_progress=tqdm(train_loader, desc=f'Epoch {epoch}/{args.train.num_epochs}', disable=args.hide_progress) + for idx, ((images1, images2, notaug_images), labels) in enumerate(local_progress): + data_dict = model.observe(images1, labels, images2, notaug_images) + logger.update_scalers(data_dict) + + global_progress.set_postfix(data_dict) + + if args.train.knn_monitor and epoch % args.train.knn_interval == 0: + for i in range(len(dataset.test_loaders)): + acc, acc_mask = knn_monitor(model.net.module.backbone, dataset, dataset.memory_loaders[i], dataset.test_loaders[i], device, args.cl_default, task_id=t, k=min(args.train.knn_k, len(memory_loader.dataset))) + results.append(acc) + mean_acc = np.mean(results) + + epoch_dict = {"epoch":epoch, "accuracy": mean_acc} + global_progress.set_postfix(epoch_dict) + logger.update_scalers(epoch_dict) + + if args.cl_default: + accs = evaluate(model.net.module.backbone, dataset, device) + results.append(accs[0]) + results_mask_classes.append(accs[1]) + mean_acc = np.mean(accs, axis=1) + print_mean_accuracy(mean_acc, t + 1, dataset.SETTING) + + model_path = os.path.join(args.ckpt_dir, f"{args.model.cl_model}_{args.name}_{t}.pth") + torch.save({ + 'epoch': epoch+1, + 'state_dict':model.net.state_dict() + }, model_path) + print(f"Task Model saved to {model_path}") + with open(os.path.join(args.log_dir, f"checkpoint_path.txt"), 'w+') as f: + f.write(f'{model_path}') + + if hasattr(model, 'end_task'): + model.end_task(dataset) + + if args.eval is not False and args.cl_default is False: + args.eval_from = model_path + +if __name__ == "__main__": + args = get_args() + main(device=args.device, args=args) + completed_log_dir = args.log_dir.replace('in-progress', 'debug' if args.debug else 'completed') + os.rename(args.log_dir, completed_log_dir) + print(f'Log file has been saved to {completed_log_dir}') + + diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..5ae8099 --- /dev/null +++ b/models/__init__.py @@ -0,0 +1,44 @@ +import os +import importlib +from .simsiam import SimSiam +from .barlowtwins import BarlowTwins +from torchvision.models import resnet50, resnet18 +import torch +from .backbones import resnet18 + +def get_backbone(backbone, dataset, castrate=True): + backbone = eval(f"{backbone}()") + if dataset == 'seq-cifar100': + backbone.n_classes = 100 + elif dataset == 'seq-cifar10': + backbone.n_classes = 10 + backbone.output_dim = backbone.fc.in_features + if not castrate: + backbone.fc = torch.nn.Identity() + + return backbone + + +def get_all_models(): + return [model.split('.')[0] for model in os.listdir('models') + if not model.find('__') > -1 and 'py' in model] + +def get_model(args, device, len_train_loader, transform): + loss = torch.nn.CrossEntropyLoss() + if args.model.name == 'simsiam': + backbone = SimSiam(get_backbone(args.model.backbone, args.dataset.name, args.cl_default)).to(device) + if args.model.proj_layers is not None: + backbone.projector.set_layers(args.model.proj_layers) + elif args.model.name == 'barlowtwins': + backbone = BarlowTwins(get_backbone(args.model.backbone, args.dataset.name, args.cl_default), device).to(device) + if args.model.proj_layers is not None: + backbone.projector.set_layers(args.model.proj_layers) + + names = {} + for model in get_all_models(): + mod = importlib.import_module('models.' + model) + class_name = {x.lower():x for x in mod.__dir__()}[model.replace('_', '')] + names[model] = getattr(mod, class_name) + + return names[args.model.cl_model](backbone, loss, args, len_train_loader, transform) + diff --git a/models/agem.py b/models/agem.py new file mode 100644 index 0000000..2da6547 --- /dev/null +++ b/models/agem.py @@ -0,0 +1,68 @@ +import torch +import numpy as np +from utils.buffer import Buffer +from models.gem import overwrite_grad +from models.gem import store_grad +from models.utils.continual_model import ContinualModel + + +def project(gxy: torch.Tensor, ger: torch.Tensor) -> torch.Tensor: + corr = torch.dot(gxy, ger) / torch.dot(ger, ger) + return gxy - corr * ger + + +class AGem(ContinualModel): + NAME = 'agem' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] + + def __init__(self, backbone, loss, args, len_train_loader, transform): + super(AGem, self).__init__(backbone, loss, args, len_train_loader, transform) + + self.buffer = Buffer(self.args.model.buffer_size, self.device) + self.grad_dims = [] + for param in self.parameters(): + self.grad_dims.append(param.data.numel()) + self.grad_xy = torch.Tensor(np.sum(self.grad_dims)).to(self.device) + self.grad_er = torch.Tensor(np.sum(self.grad_dims)).to(self.device) + + def end_task(self, dataset): + samples_per_task = self.args.model.buffer_size // dataset.N_TASKS + loader = dataset.not_aug_dataloader(samples_per_task) + cur_x, cur_y = next(iter(loader)) + self.buffer.add_data( + examples=cur_x.to(self.device), + labels=cur_y.to(self.device) + ) + + def observe(self, inputs1, labels, inputs2, notaug_inputs): + + self.zero_grad() + labels = labels.to(self.device) + p = self.net.module.backbone(inputs1.to(self.device)) + loss = self.loss(p, labels) + loss.backward() + data_dict = {'loss': loss, 'penalty': 0} + + if not self.buffer.is_empty(): + store_grad(self.parameters, self.grad_xy, self.grad_dims) + + buf_inputs, buf_labels = self.buffer.get_data(self.args.train.batch_size, transform=self.transform) + self.net.zero_grad() + buf_outputs = self.net.module.backbone(buf_inputs) + penalty = self.loss(buf_outputs, buf_labels) + penalty.backward() + data_dict['penalty'] = penalty + store_grad(self.parameters, self.grad_er, self.grad_dims) + + dot_prod = torch.dot(self.grad_xy, self.grad_er) + if dot_prod.item() < 0: + g_tilde = project(gxy=self.grad_xy, ger=self.grad_er) + overwrite_grad(self.parameters, g_tilde, self.grad_dims) + else: + overwrite_grad(self.parameters, self.grad_xy, self.grad_dims) + + self.opt.step() + data_dict.update({'lr': self.args.train.base_lr}) + + return data_dict + diff --git a/models/backbones/ResNet18.py b/models/backbones/ResNet18.py new file mode 100644 index 0000000..8ecd800 --- /dev/null +++ b/models/backbones/ResNet18.py @@ -0,0 +1,320 @@ +import torch +import torch.nn as nn +import os +# https://raw.githubusercontent.com/huyvnphan/PyTorch_CIFAR10/master/cifar10_models/resnet.py +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', + 'resnet152', 'resnext50_32x4d', 'resnext101_32x8d'] + +def conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=dilation, groups=groups, bias=False, dilation=dilation) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1, + base_width=64, dilation=1, norm_layer=None): + super(BasicBlock, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + if groups != 1 or base_width != 64: + raise ValueError('BasicBlock only supports groups=1 and base_width=64') + if dilation > 1: + raise NotImplementedError("Dilation > 1 not supported in BasicBlock") + # Both self.conv1 and self.downsample layers downsample the input when stride != 1 + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = norm_layer(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = norm_layer(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1, + base_width=64, dilation=1, norm_layer=None): + super(Bottleneck, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + width = int(planes * (base_width / 64.)) * groups + # Both self.conv2 and self.downsample layers downsample the input when stride != 1 + self.conv1 = conv1x1(inplanes, width) + self.bn1 = norm_layer(width) + self.conv2 = conv3x3(width, width, stride, groups, dilation) + self.bn2 = norm_layer(width) + self.conv3 = conv1x1(width, planes * self.expansion) + self.bn3 = norm_layer(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + + def __init__(self, block, layers, num_classes=100, zero_init_residual=False, + groups=1, width_per_group=64, replace_stride_with_dilation=None, + norm_layer=None): + super(ResNet, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + self._norm_layer = norm_layer + + self.inplanes = 64 + self.dilation = 1 + self.n_classes = num_classes + if replace_stride_with_dilation is None: + # each element in the tuple indicates if we should replace + # the 2x2 stride with a dilated convolution instead + replace_stride_with_dilation = [False, False, False] + if len(replace_stride_with_dilation) != 3: + raise ValueError("replace_stride_with_dilation should be None " + "or a 3-element tuple, got {}".format(replace_stride_with_dilation)) + self.groups = groups + self.base_width = width_per_group + + ## CIFAR10: kernel_size 7 -> 3, stride 2 -> 1, padding 3->1 + self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=3, stride=1, padding=1, bias=False) + ## END + + self.bn1 = norm_layer(self.inplanes) + self.relu = nn.ReLU(inplace=True) + # self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2, + dilate=replace_stride_with_dilation[0]) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2, + dilate=replace_stride_with_dilation[1]) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2, + dilate=replace_stride_with_dilation[2]) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, self.n_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1, dilate=False): + norm_layer = self._norm_layer + downsample = None + previous_dilation = self.dilation + if dilate: + self.dilation *= stride + stride = 1 + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + norm_layer(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample, self.groups, + self.base_width, previous_dilation, norm_layer)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes, groups=self.groups, + base_width=self.base_width, dilation=self.dilation, + norm_layer=norm_layer)) + + return nn.Sequential(*layers) + + def embed(self, x): + x1 = self.conv1(x) + x = self.bn1(x1) + x = self.relu(x) + # x = self.maxpool(x) + + x2 = self.layer1(x) + x3 = self.layer2(x2) + x4 = self.layer3(x3) + x5 = self.layer4(x4) + + x = self.avgpool(x5) + x = x.reshape(x.size(0), -1) + return x, [x1, x2, x3, x4, x5] + + def forward(self, x, return_features=False, plot_metrics=False): + x, features_list = self.embed(x) + if return_features: + return x + else: + x = self.fc(x) + + if plot_metrics: + return x, features_list + return x + + def get_params(self): + params = [] + for pp in list(self.parameters()): + # print(pp[0]) + # if pp.grad is not None: + params.append(pp.view(-1)) + return torch.cat(params) + + def get_grads(self): + grads = [] + for pp in list(self.parameters()): + # if pp.grad is not None: + grads.append(pp.grad.view(-1)) + return torch.cat(grads) + + +def _resnet(arch, block, layers, pretrained, progress, device, **kwargs): + model = ResNet(block, layers, **kwargs) + if pretrained: + script_dir = os.path.dirname(__file__) + state_dict = torch.load(script_dir + '/state_dicts/'+arch+'.pt', map_location=device) + model.load_state_dict(state_dict) + return model + + +def resnet18(pretrained=False, progress=True, device='cpu', **kwargs): + """Constructs a ResNet-18 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet18', BasicBlock, [2, 2, 2, 2], pretrained, progress, device, + **kwargs) + + +def resnet34(pretrained=False, progress=True, device='cpu', **kwargs): + """Constructs a ResNet-34 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet34', BasicBlock, [3, 4, 6, 3], pretrained, progress, device, + **kwargs) + + +def resnet50(pretrained=False, progress=True, device='cpu', **kwargs): + """Constructs a ResNet-50 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet50', Bottleneck, [3, 4, 6, 3], pretrained, progress, device, + **kwargs) + + +def resnet101(pretrained=False, progress=True, device='cpu', **kwargs): + """Constructs a ResNet-101 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet101', Bottleneck, [3, 4, 23, 3], pretrained, progress, device, + **kwargs) + + +def resnet152(pretrained=False, progress=True, device='cpu', **kwargs): + """Constructs a ResNet-152 model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet152', Bottleneck, [3, 8, 36, 3], pretrained, progress, device, + **kwargs) + + +def resnext50_32x4d(pretrained=False, progress=True, device='cpu', **kwargs): + """Constructs a ResNeXt-50 32x4d model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + kwargs['groups'] = 32 + kwargs['width_per_group'] = 4 + return _resnet('resnext50_32x4d', Bottleneck, [3, 4, 6, 3], + pretrained, progress, device, **kwargs) + + +def resnext101_32x8d(pretrained=False, progress=True, device='cpu', **kwargs): + """Constructs a ResNeXt-101 32x8d model. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + kwargs['groups'] = 32 + kwargs['width_per_group'] = 8 + return _resnet('resnext101_32x8d', Bottleneck, [3, 4, 23, 3], + pretrained, progress, device, **kwargs) + + +if __name__ == "__main__": + model = resnet18() + print(sum(p.numel() for p in model.parameters() if p.requires_grad)) # 11173962 + y = model(torch.randn(64, 3, 32, 32), 1) + print(y.size(), model) + diff --git a/models/backbones/ResNet18_PNN.py b/models/backbones/ResNet18_PNN.py new file mode 100644 index 0000000..c981f6d --- /dev/null +++ b/models/backbones/ResNet18_PNN.py @@ -0,0 +1,161 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.nn.functional import relu, avg_pool2d +from .utils.modules import ListModule, AlphaModule +from .ResNet18 import conv3x3 +from .ResNet18 import BasicBlock +from .ResNet18 import ResNet +from typing import List + + +class BasicBlockPnn(BasicBlock): + """ + The basic block of ResNet. Modified for PNN. + """ + def forward(self, x: torch.Tensor) -> torch.Tensor: + """ + Compute a forward pass. + :param x: input tensor (batch_size, input_size) + :return: output tensor (10) + """ + out = relu(self.bn1(self.conv1(x))) + out = self.bn2(self.conv2(out)) + out += self.shortcut(x) + return out + + +class ResNetPNN(ResNet): + """ + ResNet network architecture modified for PNN. + """ + + def __init__(self, block: BasicBlock, num_blocks: List[int], + num_classes: int, nf: int, old_cols: List[nn.Module]=None, + x_shape: torch.Size=None): + """ + Instantiates the layers of the network. + :param block: the basic ResNet block + :param num_blocks: the number of blocks per layer + :param num_classes: the number of output classes + :param nf: the number of filters + """ + super(ResNetPNN, self).__init__(block, num_blocks, num_classes, nf) + if old_cols is None: + old_cols = [] + + self.old_cols = old_cols + self.x_shape = x_shape + self.classifier = self.linear + if len(old_cols) == 0: + return + + assert self.x_shape is not None + self.in_planes = self.nf + self.lateral_classifier = nn.Linear(nf * 8, num_classes) + self.adaptor4 = nn.Sequential( + AlphaModule((nf * 8 * len(old_cols), 1, 1)), + nn.Conv2d(nf * 8 * len(old_cols), nf * 8, 1), + nn.ReLU() + ) + for i in range(5): + setattr(self, 'old_layer' + str(i) + 's', ListModule()) + + for i in range(1, 4): + factor = 2 ** (i-1) + setattr(self, 'lateral_layer' + str(i + 1), + self._make_layer(block, nf * (2 ** i), num_blocks[i], stride=2) + ) + setattr(self, 'adaptor' + str(i), + nn.Sequential( + AlphaModule((nf * len(old_cols) * factor, + self.x_shape[2] // factor, self.x_shape[3] // factor)), + nn.Conv2d(nf * len(old_cols) * factor, nf * factor, 1), + nn.ReLU(), + getattr(self, 'lateral_layer' + str(i+1)) + )) + for old_col in old_cols: + self.in_planes = self.nf + self.old_layer0s.append(conv3x3(3, nf * 1)) + self.old_layer0s[-1].load_state_dict(old_col.conv1.state_dict()) + for i in range(1, 5): + factor = (2 ** (i - 1)) + layer = getattr(self, 'old_layer' + str(i) + 's') + layer.append(self._make_layer(block, nf * factor, + num_blocks[i-1], stride=(1 if i == 1 else 2))) + old_layer = getattr(old_col, 'layer' + str(i)) + layer[-1].load_state_dict(old_layer.state_dict()) + + def _make_layer(self, block: BasicBlock, planes: int, + num_blocks: int, stride: int) -> nn.Module: + """ + Instantiates a ResNet layer. + :param block: ResNet basic block + :param planes: channels across the network + :param num_blocks: number of blocks + :param stride: stride + :return: ResNet layer + """ + strides = [stride] + [1] * (num_blocks - 1) + layers = [] + for stride in strides: + layers.append(nn.ReLU()) + layers.append(block(self.in_planes, planes, stride)) + self.in_planes = planes * block.expansion + layers.append(nn.ReLU()) + return nn.Sequential(*(layers[1:])) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + """ + Compute a forward pass. + :param x: input tensor (batch_size, *input_shape) + :return: output tensor (output_classes) + """ + if self.x_shape is None: + self.x_shape = x.shape + if len(self.old_cols) == 0: + return super(ResNetPNN, self).forward(x) + else: + with torch.no_grad(): + out0_old = [relu(self.bn1(old(x))) for old in self.old_layer0s] + out1_old = [old(out0_old[i]) for i, old in enumerate(self.old_layer1s)] + out2_old = [old(out1_old[i]) for i, old in enumerate(self.old_layer2s)] + out3_old = [old(out2_old[i]) for i, old in enumerate(self.old_layer3s)] + out4_old = [old(out3_old[i]) for i, old in enumerate(self.old_layer4s)] + + out = relu(self.bn1(self.conv1(x))) + out = F.relu(self.layer1(out)) + y = self.adaptor1(torch.cat(out1_old, 1)) + out = F.relu(self.layer2(out) + y) + y = self.adaptor2(torch.cat(out2_old, 1)) + out = F.relu(self.layer3(out) + y) + y = self.adaptor3(torch.cat(out3_old, 1)) + out = F.relu(self.layer4(out) + y) + out = avg_pool2d(out, out.shape[2]) + out = out.view(out.size(0), -1) + + y = avg_pool2d(torch.cat(out4_old, 1), out4_old[0].shape[2]) + y = self.adaptor4(y) + y = y.view(out.size(0), -1) + y = self.lateral_classifier(y) + out = self.linear(out) + y + return out + + +def resnet18_pnn(nclasses: int, nf: int=64, + old_cols: List[nn.Module]=None, x_shape: torch.Size=None): + """ + Instantiates a ResNet18 network. + :param nclasses: number of output classes + :param nf: number of filters + :return: ResNet network + """ + if old_cols is None: + old_cols = [] + return ResNetPNN(BasicBlockPnn, [2, 2, 2, 2], nclasses, nf, + old_cols=old_cols, x_shape=x_shape) diff --git a/models/backbones/__init__.py b/models/backbones/__init__.py new file mode 100644 index 0000000..c121ba6 --- /dev/null +++ b/models/backbones/__init__.py @@ -0,0 +1,8 @@ +from .ResNet18 import resnet18 as resnet18 +from .ResNet18_PNN import resnet18_pnn as resnet18_pnn + + + + + + diff --git a/models/backbones/utils/__init__.py b/models/backbones/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/models/backbones/utils/modules.py b/models/backbones/utils/modules.py new file mode 100644 index 0000000..c89725a --- /dev/null +++ b/models/backbones/utils/modules.py @@ -0,0 +1,52 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch +import torch.nn as nn +from torch.nn.parameter import Parameter + + +class AlphaModule(nn.Module): + def __init__(self, shape): + super(AlphaModule, self).__init__() + if not isinstance(shape, tuple): + shape = (shape,) + self.alpha = Parameter(torch.rand(tuple([1] + list(shape))) * 0.1, + requires_grad=True) + + def forward(self, x): + return x * self.alpha + + def parameters(self, recurse: bool = True): + yield self.alpha + + +class ListModule(nn.Module): + def __init__(self, *args): + super(ListModule, self).__init__() + self.idx = 0 + for module in args: + self.add_module(str(self.idx), module) + self.idx += 1 + + def append(self, module): + self.add_module(str(self.idx), module) + self.idx += 1 + + def __getitem__(self, idx): + if idx < 0: + idx += self.idx + if idx >= len(self._modules): + raise IndexError('index {} is out of range'.format(idx)) + it = iter(self._modules.values()) + for i in range(idx): + next(it) + return next(it) + + def __iter__(self): + return iter(self._modules.values()) + + def __len__(self): + return len(self._modules) diff --git a/models/barlowtwins.py b/models/barlowtwins.py new file mode 100644 index 0000000..3322a33 --- /dev/null +++ b/models/barlowtwins.py @@ -0,0 +1,158 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from torchvision.models import resnet50 + + +def D(p, z, version='simplified'): # negative cosine similarity + if version == 'original': + z = z.detach() # stop gradient + p = F.normalize(p, dim=1) # l2-normalize + z = F.normalize(z, dim=1) # l2-normalize + return -(p*z).sum(dim=1).mean() + + elif version == 'simplified':# same thing, much faster. Scroll down, speed test in __main__ + return - F.cosine_similarity(p, z.detach(), dim=-1).mean() + else: + raise Exception + + + +class projection_MLP(nn.Module): + def __init__(self, in_dim, hidden_dim=2048, out_dim=2048): + super().__init__() + ''' page 3 baseline setting + Projection MLP. The projection MLP (in f) has BN ap- + plied to each fully-connected (fc) layer, including its out- + put fc. Its output fc has no ReLU. The hidden fc is 2048-d. + This MLP has 3 layers. + ''' + self.layer1 = nn.Sequential( + nn.Linear(in_dim, hidden_dim), + nn.BatchNorm1d(hidden_dim), + nn.ReLU(inplace=True) + ) + self.layer2 = nn.Sequential( + nn.Linear(hidden_dim, hidden_dim), + nn.BatchNorm1d(hidden_dim), + nn.ReLU(inplace=True) + ) + self.layer3 = nn.Sequential( + nn.Linear(hidden_dim, out_dim), + nn.BatchNorm1d(hidden_dim) + ) + self.num_layers = 3 + def set_layers(self, num_layers): + self.num_layers = num_layers + + def forward(self, x): + if self.num_layers == 3: + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + elif self.num_layers == 2: + x = self.layer1(x) + x = self.layer3(x) + else: + raise Exception + return x + + +class prediction_MLP(nn.Module): + def __init__(self, in_dim=2048, hidden_dim=512, out_dim=2048): # bottleneck structure + super().__init__() + ''' page 3 baseline setting + Prediction MLP. The prediction MLP (h) has BN applied + to its hidden fc layers. Its output fc does not have BN + (ablation in Sec. 4.4) or ReLU. This MLP has 2 layers. + The dimension of h’s input and output (z and p) is d = 2048, + and h’s hidden layer’s dimension is 512, making h a + bottleneck structure (ablation in supplement). + ''' + self.layer1 = nn.Sequential( + nn.Linear(in_dim, hidden_dim), + nn.BatchNorm1d(hidden_dim), + nn.ReLU(inplace=True) + ) + self.layer2 = nn.Linear(hidden_dim, out_dim) + """ + Adding BN to the output of the prediction MLP h does not work + well (Table 3d). We find that this is not about collapsing. + The training is unstable and the loss oscillates. + """ + + def forward(self, x): + x = self.layer1(x) + x = self.layer2(x) + return x + + +class BarlowTwinsLoss(torch.nn.Module): + + def __init__(self, device, lambda_param=5e-3): + super(BarlowTwinsLoss, self).__init__() + self.lambda_param = lambda_param + self.device = device + + def forward(self, z_a: torch.Tensor, z_b: torch.Tensor): + # normalize repr. along the batch dimension + z_a_norm = (z_a - z_a.mean(0)) / z_a.std(0) # NxD + z_b_norm = (z_b - z_b.mean(0)) / z_b.std(0) # NxD + + N = z_a.size(0) + D = z_a.size(1) + + # cross-correlation matrix + c = torch.mm(z_a_norm.T, z_b_norm) / N # DxD + # loss + c_diff = (c - torch.eye(D,device=self.device)).pow(2) # DxD + # multiply off-diagonal elems of c_diff by lambda + c_diff[~torch.eye(D, dtype=bool)] *= self.lambda_param + loss = c_diff.sum() + + return loss + + +class BarlowTwins(nn.Module): + def __init__(self, backbone, device): + super().__init__() + + self.backbone = backbone + self.projector = projection_MLP(backbone.output_dim) + + self.encoder = nn.Sequential( # f encoder + self.backbone, + self.projector + ) + self.predictor = prediction_MLP() + self.criterion = BarlowTwinsLoss(device=device) + + def forward(self, x1, x2): + + f, h = self.encoder, self.predictor + z1, z2 = f(x1), f(x2) + p1, p2 = h(z1), h(z2) + L = self.criterion(z1, z2) + return {'loss': L} + +if __name__ == "__main__": + model = SimSiam() + model = torch.nn.DataParallel(model).cuda() + x1 = torch.randn((128, 3, 32, 32)) + x2 = torch.randn_like(x1) + + for i in range(50): + model.forward(x1, x2).backward() + print("forward backwork check") + + z1 = torch.randn((200, 2560)) + z2 = torch.randn_like(z1) + import time + tic = time.time() + print(D(z1, z2, version='original')) + toc = time.time() + print(toc - tic) + tic = time.time() + print(D(z1, z2, version='simplified')) + toc = time.time() + diff --git a/models/der.py b/models/der.py new file mode 100644 index 0000000..7ae3453 --- /dev/null +++ b/models/der.py @@ -0,0 +1,41 @@ +from utils.buffer import Buffer +from torch.nn import functional as F +from models.utils.continual_model import ContinualModel +from augmentations import get_aug + +class Der(ContinualModel): + NAME = 'der' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + + def __init__(self, backbone, loss, args, len_train_loader, transform): + super(Der, self).__init__(backbone, loss, args, len_train_loader, transform) + self.buffer = Buffer(self.args.model.buffer_size, self.device) + + def observe(self, inputs1, labels, inputs2, notaug_inputs): + + self.opt.zero_grad() + if self.args.cl_default: + labels = labels.to(self.device) + outputs = self.net.module.backbone(inputs1.to(self.device)) + loss = self.loss(outputs, labels).mean() + data_dict = {'loss': loss, 'penalty': 0} + else: + data_dict = self.net.forward(inputs1.to(self.device, non_blocking=True), inputs2.to(self.device, non_blocking=True)) + loss = data_dict['loss'].mean() + data_dict['loss'] = data_dict['loss'].mean() + outputs = self.net.module.backbone(inputs1.to(self.device)) + data_dict['penalty'] = 0 + + if not self.buffer.is_empty(): + buf_inputs, buf_logits = self.buffer.get_data( + self.args.train.batch_size, transform=self.transform) + buf_outputs = self.net.module.backbone(buf_inputs) + data_dict['penalty'] = self.args.train.alpha * F.mse_loss(buf_outputs, buf_logits) + loss += data_dict['penalty'] + + loss.backward() + self.opt.step() + data_dict.update({'lr': self.args.train.base_lr}) + self.buffer.add_data(examples=notaug_inputs, logits=outputs.data) + + return data_dict diff --git a/models/finetune.py b/models/finetune.py new file mode 100644 index 0000000..388aa5c --- /dev/null +++ b/models/finetune.py @@ -0,0 +1,32 @@ +from utils.buffer import Buffer +from torch.nn import functional as F +from models.utils.continual_model import ContinualModel +from augmentations import get_aug + +class Finetune(ContinualModel): + NAME = 'finetune' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + + def __init__(self, backbone, loss, args, len_train_loader, transform): + super(Finetune, self).__init__(backbone, loss, args, len_train_loader, transform) + + def observe(self, inputs1, labels, inputs2, notaug_inputs): + + self.opt.zero_grad() + if self.args.cl_default: + labels = labels.to(self.device) + outputs = self.net.module.backbone(inputs1.to(self.device)) + loss = self.loss(outputs, labels).mean() + data_dict = {'loss': loss} + data_dict['penalty'] = 0.0 + else: + data_dict = self.net.forward(inputs1.to(self.device, non_blocking=True), inputs2.to(self.device, non_blocking=True)) + data_dict['loss'] = data_dict['loss'].mean() + loss = data_dict['loss'] + data_dict['penalty'] = 0.0 + + loss.backward() + self.opt.step() + data_dict.update({'lr': self.args.train.base_lr}) + + return data_dict diff --git a/models/gem.py b/models/gem.py new file mode 100644 index 0000000..afbe789 --- /dev/null +++ b/models/gem.py @@ -0,0 +1,149 @@ +# Copyright 2017-present, Facebook, Inc. +# All rights reserved. +# +# This source code is licensed under the license found in the +# LICENSE file in the gem_license file in the root of this source tree. + +import quadprog + +import numpy as np +import torch +from models.utils.continual_model import ContinualModel + +from utils.buffer import Buffer + + +def store_grad(params, grads, grad_dims): + """ + This stores parameter gradients of past tasks. + pp: parameters + grads: gradients + grad_dims: list with number of parameters per layers + """ + # store the gradients + grads.fill_(0.0) + count = 0 + for param in params(): + if param.grad is not None: + begin = 0 if count == 0 else sum(grad_dims[:count]) + end = np.sum(grad_dims[:count + 1]) + grads[begin: end].copy_(param.grad.data.view(-1)) + count += 1 + + +def overwrite_grad(params, newgrad, grad_dims): + """ + This is used to overwrite the gradients with a new gradient + vector, whenever violations occur. + pp: parameters + newgrad: corrected gradient + grad_dims: list storing number of parameters at each layer + """ + count = 0 + for param in params(): + if param.grad is not None: + begin = 0 if count == 0 else sum(grad_dims[:count]) + end = sum(grad_dims[:count + 1]) + this_grad = newgrad[begin: end].contiguous().view( + param.grad.data.size()) + param.grad.data.copy_(this_grad) + count += 1 + + +def project2cone2(gradient, memories, margin=0.5, eps=1e-3): + """ + Solves the GEM dual QP described in the paper given a proposed + gradient "gradient", and a memory of task gradients "memories". + Overwrites "gradient" with the final projected update. + + input: gradient, p-vector + input: memories, (t * p)-vector + output: x, p-vector + """ + memories_np = memories.cpu().t().double().numpy() + gradient_np = gradient.cpu().contiguous().view(-1).double().numpy() + n_rows = memories_np.shape[0] + self_prod = np.dot(memories_np, memories_np.transpose()) + self_prod = 0.5 * (self_prod + self_prod.transpose()) + np.eye(n_rows) * eps + grad_prod = np.dot(memories_np, gradient_np) * -1 + G = np.eye(n_rows) + h = np.zeros(n_rows) + margin + v = quadprog.solve_qp(self_prod, grad_prod, G, h)[0] + x = np.dot(v, memories_np) + gradient_np + gradient.copy_(torch.from_numpy(x).view(-1, 1)) + + +class Gem(ContinualModel): + NAME = 'gem' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] + + def __init__(self, backbone, loss, args, transform): + super(Gem, self).__init__(backbone, loss, args, transform) + self.current_task = 0 + self.buffer = Buffer(self.args.buffer_size, self.device) + + # Allocate temporary synaptic memory + self.grad_dims = [] + for pp in self.parameters(): + self.grad_dims.append(pp.data.numel()) + + self.grads_cs = [] + self.grads_da = torch.zeros(np.sum(self.grad_dims)).to(self.device) + + def end_task(self, dataset): + self.current_task += 1 + self.grads_cs.append(torch.zeros( + np.sum(self.grad_dims)).to(self.device)) + + # add data to the buffer + samples_per_task = self.args.buffer_size // dataset.N_TASKS + + loader = dataset.not_aug_dataloader(samples_per_task) + cur_y, cur_x = next(iter(loader))[1:] + self.buffer.add_data( + examples=cur_x.to(self.device), + labels=cur_y.to(self.device), + task_labels=torch.ones(samples_per_task, + dtype=torch.long).to(self.device) * (self.current_task - 1) + ) + + def observe(self, inputs, labels, not_aug_inputs): + + if not self.buffer.is_empty(): + buf_inputs, buf_labels, buf_task_labels = self.buffer.get_data( + self.args.buffer_size, transform=self.transform) + + for tt in buf_task_labels.unique(): + # compute gradient on the memory buffer + self.opt.zero_grad() + cur_task_inputs = buf_inputs[buf_task_labels == tt] + cur_task_labels = buf_labels[buf_task_labels == tt] + cur_task_outputs = self.forward(cur_task_inputs) + penalty = self.loss(cur_task_outputs, cur_task_labels) + penalty.backward() + store_grad(self.parameters, self.grads_cs[tt], self.grad_dims) + + # now compute the grad on the current data + self.opt.zero_grad() + outputs = self.forward(inputs) + loss = self.loss(outputs, labels) + loss.backward() + + # check if gradient violates buffer constraints + if not self.buffer.is_empty(): + # copy gradient + store_grad(self.parameters, self.grads_da, self.grad_dims) + + dot_prod = torch.mm(self.grads_da.unsqueeze(0), + torch.stack(self.grads_cs).T) + if (dot_prod < 0).sum() != 0: + project2cone2(self.grads_da.unsqueeze(1), + torch.stack(self.grads_cs).T, margin=self.args.gamma) + # copy gradients back + overwrite_grad(self.parameters, self.grads_da, + self.grad_dims) + + self.opt.step() + + return loss.item() + diff --git a/models/gss.py b/models/gss.py new file mode 100644 index 0000000..543dd84 --- /dev/null +++ b/models/gss.py @@ -0,0 +1,73 @@ +import torch +from utils.gss_buffer import Buffer as Buffer +from utils.args import * +from models.utils.continual_model import ContinualModel + + +def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Gradient based sample selection' + 'for online continual learning') + add_management_args(parser) + add_experiment_args(parser) + add_rehearsal_args(parser) + parser.add_argument('--batch_num', type=int, required=True, + help='Number of batches extracted from the buffer.') + parser.add_argument('--gss_minibatch_size', type=int, default=None, + help='The batch size of the gradient comparison.') + return parser + + +class Gss(ContinualModel): + NAME = 'gss' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + + def __init__(self, backbone, loss, args, len_train_loader, transform): + super(Gss, self).__init__(backbone, loss, args, len_train_loader, transform) + self.buffer = Buffer(self.args.model.buffer_size, self.device, + self.args.train.batch_size, self) + self.alj_nepochs = 1 # batch_num parameter + + def get_grads(self, inputs, labels): + self.net.eval() + self.opt.zero_grad() + labels = labels.to(self.device) + outputs = self.net.module.backbone(inputs.to(self.device)) + loss = self.loss(outputs, labels) + loss.backward() + grads = self.net.module.backbone.get_grads().clone().detach() + self.opt.zero_grad() + self.net.train() + if len(grads.shape) == 1: + grads = grads.unsqueeze(0) + return grads + + def observe(self, inputs1, labels, inputs2, notaug_inputs): + + real_batch_size = inputs1.shape[0] + self.buffer.drop_cache() + self.buffer.reset_fathom() + labels = labels.to(self.device) + + for _ in range(self.alj_nepochs): + self.opt.zero_grad() + if not self.buffer.is_empty(): + buf_inputs, buf_labels = self.buffer.get_data( + self.args.train.batch_size, transform=self.transform) + tinputs = torch.cat((inputs1.to(self.device), buf_inputs)) + tlabels = torch.cat((labels, buf_labels)) + else: + tinputs = inputs1.to(self.device) + tlabels = labels + + outputs = self.net.module.backbone(tinputs) + loss = self.loss(outputs, tlabels) + loss.backward() + self.opt.step() + + self.buffer.add_data(examples=notaug_inputs, + labels=labels[:real_batch_size]) + data_dict = {'loss': loss, 'penalty': 0} + data_dict.update({'lr': self.args.train.base_lr}) + + return data_dict + diff --git a/models/mixup.py b/models/mixup.py new file mode 100644 index 0000000..c6abbe4 --- /dev/null +++ b/models/mixup.py @@ -0,0 +1,62 @@ +from utils.buffer import Buffer +from torch.nn import functional as F +from models.utils.continual_model import ContinualModel +from augmentations import get_aug +import numpy as np + +class Mixup(ContinualModel): + NAME = 'mixup' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + + def __init__(self, backbone, loss, args, len_train_lodaer, transform): + super(Mixup, self).__init__(backbone, loss, args, len_train_lodaer, transform) + self.buffer = Buffer(self.args.model.buffer_size, self.device) + + def observe(self, inputs1, labels, inputs2, notaug_inputs): + + self.opt.zero_grad() + if self.buffer.is_empty(): + if self.args.cl_default: + labels = labels.to(self.device) + outputs = self.net.module.backbone(inputs1.to(self.device)) + loss = self.loss(outputs, labels).mean() + data_dict = {'loss': loss} + + else: + data_dict = self.net.forward(inputs1.to(self.device, non_blocking=True), inputs2.to(self.device, non_blocking=True)) + loss = data_dict['loss'].mean() + data_dict['loss'] = data_dict['loss'].mean() + + else: + if self.args.cl_default: + buf_inputs, buf_labels = self.buffer.get_data( + self.args.train.batch_size, transform=self.transform) + buf_labels = buf_labels.to(self.device).long() + labels = labels.to(self.device).long() + lam = np.random.beta(self.args.train.alpha, self.args.train.alpha) + mixed_x = lam * inputs1.to(self.device) + (1 - lam) * buf_inputs[:inputs1.shape[0]].to(self.device) + net_output = self.net.module.backbone(mixed_x.to(self.device, non_blocking=True)) + buf_labels = buf_labels[:inputs1.shape[0]].to(self.device) + loss = self.loss(net_output, labels) + (1 - lam) * self.loss(net_output, buf_labels) + data_dict = {'loss': loss} + data_dict['penalty'] = 0.0 + else: + buf_inputs, buf_inputs1 = self.buffer.get_data( + self.args.train.batch_size, transform=self.transform) + lam = np.random.beta(self.args.train.alpha, self.args.train.alpha) + mixed_x = lam * inputs1.to(self.device) + (1 - lam) * buf_inputs[:inputs1.shape[0]].to(self.device) + mixed_x_aug = lam * inputs2.to(self.device) + (1 - lam) * buf_inputs1[:inputs1.shape[0]].to(self.device) + data_dict = self.net.forward(mixed_x.to(self.device, non_blocking=True), mixed_x_aug.to(self.device, non_blocking=True)) + loss = data_dict['loss'].mean() + data_dict['loss'] = data_dict['loss'].mean() + data_dict['penalty'] = 0.0 + + loss.backward() + self.opt.step() + data_dict.update({'lr': self.args.train.base_lr}) + if self.args.cl_default: + self.buffer.add_data(examples=notaug_inputs, logits=labels) + else: + self.buffer.add_data(examples=notaug_inputs, logits=inputs2) + + return data_dict diff --git a/models/optimizers/__init__.py b/models/optimizers/__init__.py new file mode 100644 index 0000000..4fd88fe --- /dev/null +++ b/models/optimizers/__init__.py @@ -0,0 +1,27 @@ +from .lars import LARS +import torch +from .lr_scheduler import LR_Scheduler + + +def get_optimizer(name, model, lr, momentum, weight_decay): + + predictor_prefix = ('module.predictor', 'predictor') + parameters = [{ + 'name': 'base', + 'params': [param for name, param in model.named_parameters() if not name.startswith(predictor_prefix)], + 'lr': lr + },{ + 'name': 'predictor', + 'params': [param for name, param in model.named_parameters() if name.startswith(predictor_prefix)], + 'lr': lr + }] + if name == 'lars': + optimizer = LARS(parameters, lr=lr, momentum=momentum, weight_decay=weight_decay) + elif name == 'sgd': + optimizer = torch.optim.SGD(parameters, lr=lr, momentum=momentum, weight_decay=weight_decay) + else: + raise NotImplementedError + return optimizer + + + diff --git a/models/optimizers/lars.py b/models/optimizers/lars.py new file mode 100644 index 0000000..b8211bc --- /dev/null +++ b/models/optimizers/lars.py @@ -0,0 +1,97 @@ +""" Layer-wise adaptive rate scaling for SGD in PyTorch! """ +import torch +from torch.optim.optimizer import Optimizer, required + +class LARS(Optimizer): + r"""Implements layer-wise adaptive rate scaling for SGD. + + Args: + params (iterable): iterable of parameters to optimize or dicts defining + parameter groups + lr (float): base learning rate (\gamma_0) + momentum (float, optional): momentum factor (default: 0) ("m") + weight_decay (float, optional): weight decay (L2 penalty) (default: 0) + ("\beta") + eta (float, optional): LARS coefficient + max_epoch: maximum training epoch to determine polynomial LR decay. + + Based on Algorithm 1 of the following paper by You, Gitman, and Ginsburg. + Large Batch Training of Convolutional Networks: + https://arxiv.org/abs/1708.03888 + + Example: + >>> optimizer = LARS(model.parameters(), lr=0.1, eta=1e-3) + >>> optimizer.zero_grad() + >>> loss_fn(model(input), target).backward() + >>> optimizer.step() + """ + def __init__(self, params, lr=required, momentum=.9, + weight_decay=.0005, eta=0.001, max_epoch=200): + if lr is not required and lr < 0.0: + raise ValueError("Invalid learning rate: {}".format(lr)) + if momentum < 0.0: + raise ValueError("Invalid momentum value: {}".format(momentum)) + if weight_decay < 0.0: + raise ValueError("Invalid weight_decay value: {}" + .format(weight_decay)) + if eta < 0.0: + raise ValueError("Invalid LARS coefficient value: {}".format(eta)) + + self.epoch = 0 + defaults = dict(lr=lr, momentum=momentum, + weight_decay=weight_decay, + eta=eta, max_epoch=max_epoch) + super(LARS, self).__init__(params, defaults) + + def step(self, epoch=None, closure=None): + """Performs a single optimization step. + + Arguments: + closure (callable, optional): A closure that reevaluates the model + and returns the loss. + epoch: current epoch to calculate polynomial LR decay schedule. + if None, uses self.epoch and increments it. + """ + loss = None + if closure is not None: + loss = closure() + + if epoch is None: + epoch = self.epoch + self.epoch += 1 + + for group in self.param_groups: + weight_decay = group['weight_decay'] + momentum = group['momentum'] + eta = group['eta'] + lr = group['lr'] + max_epoch = group['max_epoch'] + + for p in group['params']: + if p.grad is None: + continue + + param_state = self.state[p] + d_p = p.grad.data + + weight_norm = torch.norm(p.data) + grad_norm = torch.norm(d_p) + + # Global LR computed on polynomial decay schedule + decay = (1 - float(epoch) / max_epoch) ** 2 + global_lr = lr * decay + + # Compute local learning rate for this layer + local_lr = eta * weight_norm / (grad_norm + weight_decay * weight_norm) + + # Update the momentum term + actual_lr = local_lr * global_lr + + if 'momentum_buffer' not in param_state: + buf = param_state['momentum_buffer'] = torch.zeros_like(p.data) + else: + buf = param_state['momentum_buffer'] + buf.mul_(momentum).add_(d_p + weight_decay * p.data, alpha=actual_lr) + p.data.add_(-buf) + + return loss \ No newline at end of file diff --git a/models/optimizers/lr_scheduler.py b/models/optimizers/lr_scheduler.py new file mode 100644 index 0000000..c95baba --- /dev/null +++ b/models/optimizers/lr_scheduler.py @@ -0,0 +1,51 @@ +import torch +import numpy as np + + +class LR_Scheduler(object): + def __init__(self, optimizer, warmup_epochs, warmup_lr, num_epochs, base_lr, final_lr, iter_per_epoch, constant_predictor_lr=False): + self.base_lr = base_lr + self.constant_predictor_lr = constant_predictor_lr + warmup_iter = iter_per_epoch * warmup_epochs + warmup_lr_schedule = np.linspace(warmup_lr, base_lr, warmup_iter) + decay_iter = iter_per_epoch * (num_epochs - warmup_epochs) + cosine_lr_schedule = final_lr+0.5*(base_lr-final_lr)*(1+np.cos(np.pi*np.arange(decay_iter)/decay_iter)) + + self.lr_schedule = np.concatenate((warmup_lr_schedule, cosine_lr_schedule)) + self.optimizer = optimizer + self.iter = 0 + self.current_lr = 0 + def step(self): + for param_group in self.optimizer.param_groups: + + if self.constant_predictor_lr and param_group['name'] == 'predictor': + param_group['lr'] = self.base_lr + else: + lr = param_group['lr'] = self.lr_schedule[self.iter] + + self.iter += 1 + self.current_lr = lr + return lr + + def reset(self): + self.iter = 0 + self.current_lr = 0 + + def get_lr(self): + return self.current_lr + +if __name__ == "__main__": + import torchvision + model = torchvision.models.resnet50() + optimizer = torch.optim.SGD(model.parameters(), lr=999) + epochs = 100 + n_iter = 1000 + scheduler = LR_Scheduler(optimizer, 10, 1, epochs, 3, 0, n_iter) + import matplotlib.pyplot as plt + lrs = [] + for epoch in range(epochs): + for it in range(n_iter): + lr = scheduler.step() + lrs.append(lr) + plt.plot(lrs) + plt.show() diff --git a/models/pnn.py b/models/pnn.py new file mode 100644 index 0000000..e5803e2 --- /dev/null +++ b/models/pnn.py @@ -0,0 +1,97 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch.optim as optim +from torch.optim import SGD +import torch +import torch.nn as nn +from utils.conf import get_device +from utils.args import * +from datasets import get_dataset +from .utils.continual_model import ContinualModel +from .optimizers import get_optimizer, LR_Scheduler + + +def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual Learning via' + ' Progressive Neural Networks.') + add_management_args(parser) + add_experiment_args(parser) + return parser + + +def get_backbone(bone, old_cols=None, x_shape=None): + from .backbones import resnet18 + from .backbones import resnet18_pnn + print(bone) + + return resnet18_pnn(bone.n_classes, bone.inplanes, old_cols, x_shape) + + +class Pnn(ContinualModel): + NAME = 'pnn' + COMPATIBILITY = ['task-il'] + + def __init__(self, backbone, loss, args, len_train_lodaer, transform): + super(Pnn, self).__init__(backbone, loss, args, len_train_lodaer, transform) + self.loss = loss + self.args = args + self.transform = transform + self.device = get_device() + self.x_shape = None + self.nets = [self.net] + self.net = self.nets[-1] + + self.soft = torch.nn.Softmax(dim=0) + self.logsoft = torch.nn.LogSoftmax(dim=0) + self.dataset = get_dataset(args) + self.task_idx = 0 + + def forward(self, x, task_label): + if self.x_shape is None: + self.x_shape = x.shape + + if self.task_idx == 0: + out = self.net(x) + else: + self.nets[task_label].to(self.device) + out = self.nets[task_label](x) + if self.task_idx != task_label: + self.nets[task_label].cpu() + return out + + def end_task(self, dataset): + # instantiate new column + if self.task_idx == 4: + return + self.task_idx += 1 + self.nets[-1].cpu() + self.nets.append(self.net) + self.net = self.nets[-1] + self.opt = get_optimizer( + self.args.train.optimizer.name, self.net, + lr=self.args.train.base_lr*self.args.train.batch_size/256, + momentum=self.args.train.optimizer.momentum, + weight_decay=self.args.train.optimizer.weight_decay) + + def observe(self, inputs1, labels, inputs2, notaug_inputs): + if self.x_shape is None: + self.x_shape = inputs1.shape + + self.opt.zero_grad() + if self.args.cl_default: + outputs = self.net.module.backbone(inputs1) + loss = self.loss(outputs, labels) + data_dict = {'loss': loss, 'penalty': 0.0} + else: + data_dict = self.net.forward(inputs1.to(self.device, non_blocking=True), inputs2.to(self.device, non_blocking=True)) + data_dict['loss'] = data_dict['loss'][0].mean() + data_dict['penalty'] = 0.0 + loss = data_dict['loss'] + loss.backward() + self.opt.step() + data_dict.update({'lr': self.args.train.base_lr}) + + return data_dict diff --git a/models/si.py b/models/si.py new file mode 100644 index 0000000..3572c87 --- /dev/null +++ b/models/si.py @@ -0,0 +1,58 @@ +import torch +import torch.nn as nn +from utils.args import * +from .utils.continual_model import ContinualModel + + +class SI(ContinualModel): + NAME = 'si' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] + + def __init__(self, backbone, loss, args, len_train_loader, transform): + super(SI, self).__init__(backbone, loss, args, len_train_loader, transform) + + self.checkpoint = self.net.module.backbone.get_params().data.clone().to(self.device) + self.big_omega = None + self.small_omega = 0 + self.c = args.train.alpha + self.xi = 1.0 + + def penalty(self): + if self.big_omega is None: + return torch.tensor(0.0).to(self.device) + else: + penalty = (self.big_omega * ((self.net.module.backbone.get_params() - self.checkpoint) ** 2)).sum() + return penalty + + def end_task(self, dataset): + # big omega calculation step + if self.big_omega is None: + self.big_omega = torch.zeros_like(self.net.module.backbone.get_params()).to(self.device) + + self.big_omega = self.small_omega / ((self.net.module.backbone.get_params().data - self.checkpoint) ** 2 + self.xi) + + self.checkpoint = self.net.module.backbone.get_params().data.clone().to(self.device) + self.small_omega = 0 + + def observe(self, inputs1, labels, inputs2, notaug_inputs): + self.opt.zero_grad() + if self.args.cl_default: + labels = labels.to(self.device) + outputs = self.net.module.backbone(inputs1.to(self.device)) + penalty = self.c * self.penalty() + loss = self.loss(outputs, labels).mean() - penalty + data_dict = {'loss': loss, 'penalty': -penalty} + else: + data_dict = self.net.forward(inputs1.to(self.device, non_blocking=True), inputs2.to(self.device, non_blocking=True)) + data_dict['penalty'] = self.c * self.penalty() + data_dict['loss'] = data_dict['loss'].mean() + loss = data_dict['loss'] - data_dict['penalty'] + + loss.backward() + nn.utils.clip_grad.clip_grad_value_(self.net.parameters(), 1) + self.opt.step() + data_dict.update({'lr': self.args.train.base_lr}) + + self.small_omega += self.args.train.base_lr * self.net.module.backbone.get_grads().data ** 2 + + return data_dict diff --git a/models/simsiam.py b/models/simsiam.py new file mode 100644 index 0000000..8c2f1ef --- /dev/null +++ b/models/simsiam.py @@ -0,0 +1,148 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from torchvision.models import resnet50 + + +def D(p, z, version='simplified'): # negative cosine similarity + if version == 'original': + z = z.detach() # stop gradient + p = F.normalize(p, dim=1) # l2-normalize + z = F.normalize(z, dim=1) # l2-normalize + return -(p*z).sum(dim=1).mean() + + elif version == 'simplified':# same thing, much faster. Scroll down, speed test in __main__ + return - F.cosine_similarity(p, z.detach(), dim=-1).mean() + else: + raise Exception + + + +class projection_MLP(nn.Module): + def __init__(self, in_dim, hidden_dim=2048, out_dim=2048): + super().__init__() + ''' page 3 baseline setting + Projection MLP. The projection MLP (in f) has BN ap- + plied to each fully-connected (fc) layer, including its out- + put fc. Its output fc has no ReLU. The hidden fc is 2048-d. + This MLP has 3 layers. + ''' + self.layer1 = nn.Sequential( + nn.Linear(in_dim, hidden_dim), + nn.BatchNorm1d(hidden_dim), + nn.ReLU(inplace=True) + ) + self.layer2 = nn.Sequential( + nn.Linear(hidden_dim, hidden_dim), + nn.BatchNorm1d(hidden_dim), + nn.ReLU(inplace=True) + ) + self.layer3 = nn.Sequential( + nn.Linear(hidden_dim, out_dim), + nn.BatchNorm1d(hidden_dim) + ) + self.num_layers = 3 + def set_layers(self, num_layers): + self.num_layers = num_layers + + def forward(self, x): + if self.num_layers == 3: + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + elif self.num_layers == 2: + x = self.layer1(x) + x = self.layer3(x) + else: + raise Exception + return x + + +class prediction_MLP(nn.Module): + def __init__(self, in_dim=2048, hidden_dim=512, out_dim=2048): # bottleneck structure + super().__init__() + ''' page 3 baseline setting + Prediction MLP. The prediction MLP (h) has BN applied + to its hidden fc layers. Its output fc does not have BN + (ablation in Sec. 4.4) or ReLU. This MLP has 2 layers. + The dimension of h’s input and output (z and p) is d = 2048, + and h’s hidden layer’s dimension is 512, making h a + bottleneck structure (ablation in supplement). + ''' + self.layer1 = nn.Sequential( + nn.Linear(in_dim, hidden_dim), + nn.BatchNorm1d(hidden_dim), + nn.ReLU(inplace=True) + ) + self.layer2 = nn.Linear(hidden_dim, out_dim) + """ + Adding BN to the output of the prediction MLP h does not work + well (Table 3d). We find that this is not about collapsing. + The training is unstable and the loss oscillates. + """ + + def forward(self, x): + x = self.layer1(x) + x = self.layer2(x) + return x + +class SimSiam(nn.Module): + def __init__(self, backbone=resnet50()): + super().__init__() + + self.backbone = backbone + self.projector = projection_MLP(backbone.output_dim) + + self.encoder = nn.Sequential( # f encoder + self.backbone, + self.projector + ) + self.predictor = prediction_MLP() + + def forward(self, x1, x2): + + f, h = self.encoder, self.predictor + z1, z2 = f(x1), f(x2) + p1, p2 = h(z1), h(z2) + L = D(p1, z2) / 2 + D(p2, z1) / 2 + return {'loss': L} + +if __name__ == "__main__": + model = SimSiam() + model = torch.nn.DataParallel(model).cuda() + x1 = torch.randn((128, 3, 32, 32)) + x2 = torch.randn_like(x1) + + for i in range(50): + model.forward(x1, x2).backward() + print("forward backwork check") + + z1 = torch.randn((200, 2560)) + z2 = torch.randn_like(z1) + import time + tic = time.time() + print(D(z1, z2, version='original')) + toc = time.time() + print(toc - tic) + tic = time.time() + print(D(z1, z2, version='simplified')) + toc = time.time() + print(toc - tic) + +# Output: +# tensor(-0.0010) +# 0.005159854888916016 +# tensor(-0.0010) +# 0.0014872550964355469 + + + + + + + + + + + + diff --git a/models/utils/__init__.py b/models/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/models/utils/continual_model.py b/models/utils/continual_model.py new file mode 100644 index 0000000..a738829 --- /dev/null +++ b/models/utils/continual_model.py @@ -0,0 +1,66 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch.nn as nn +from torch.optim import SGD +import torch +import torchvision +from argparse import Namespace +from utils.conf import get_device +import numpy as np +from ..optimizers import get_optimizer, LR_Scheduler + + +class ContinualModel(nn.Module): + """ + Continual learning model. + """ + NAME = None + COMPATIBILITY = [] + + def __init__(self, backbone: nn.Module, loss: nn.Module, + args: Namespace, len_train_lodaer, transform: torchvision.transforms) -> None: + super(ContinualModel, self).__init__() + + self.net = backbone + self.net = nn.DataParallel(self.net) + self.loss = loss + self.args = args + self.transform = transform + + self.opt = get_optimizer( + args.train.optimizer.name, self.net, + lr=args.train.base_lr*args.train.batch_size/256, + momentum=args.train.optimizer.momentum, + weight_decay=args.train.optimizer.weight_decay) + + self.lr_scheduler = LR_Scheduler( + self.opt, + args.train.warmup_epochs, args.train.warmup_lr*args.train.batch_size/256, + args.train.num_epochs, args.train.base_lr*args.train.batch_size/256, args.train.final_lr*args.train.batch_size/256, + len_train_lodaer, + constant_predictor_lr=True # see the end of section 4.2 predictor + ) + self.device = get_device() + + def forward(self, x: torch.Tensor) -> torch.Tensor: + """ + Computes a forward pass. + :param x: batch of inputs + :param task_label: some models require the task label + :return: the result of the computation + """ + return self.net.module.backbone.forward(x) + + def observe(self, inputs: torch.Tensor, labels: torch.Tensor, + not_aug_inputs: torch.Tensor) -> float: + """ + Compute a training step over a given batch of examples. + :param inputs: batch of examples + :param labels: ground-truth labels + :param kwargs: some methods could require additional parameters + :return: the value of the loss function + """ + pass diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..df2a6de --- /dev/null +++ b/requirements.txt @@ -0,0 +1,14 @@ +cycler==0.10.0 +kiwisolver==1.3.2 +matplotlib==3.4.3 +numpy==1.21.2 +Pillow==8.3.2 +pyparsing==2.4.7 +python-dateutil==2.8.2 +PyYAML==5.4.1 +quadprog==0.1.10 +six==1.16.0 +torch==1.9.1 +torchvision==0.10.1 +tqdm==4.62.3 +typing-extensions==3.10.0.2 diff --git a/tools/__init__.py b/tools/__init__.py new file mode 100644 index 0000000..d16ccdd --- /dev/null +++ b/tools/__init__.py @@ -0,0 +1,5 @@ +from .average_meter import AverageMeter +from .accuracy import accuracy +from .knn_monitor import knn_monitor +from .logger import Logger +from .file_exist_fn import file_exist_check diff --git a/tools/accuracy.py b/tools/accuracy.py new file mode 100644 index 0000000..1fb4622 --- /dev/null +++ b/tools/accuracy.py @@ -0,0 +1,15 @@ +def accuracy(output, target, topk=(1,)): + """Computes the accuracy over the k top predictions for the specified values of k""" + with torch.no_grad(): + maxk = max(topk) + batch_size = target.size(0) + + _, pred = output.topk(maxk, 1, True, True) + pred = pred.t() + correct = pred.eq(target.view(1, -1).expand_as(pred)) + + res = [] + for k in topk: + correct_k = correct[:k].view(-1).float().sum(0, keepdim=True) + res.append(correct_k.mul_(100.0 / batch_size)) + return res diff --git a/tools/average_meter.py b/tools/average_meter.py new file mode 100644 index 0000000..92f0074 --- /dev/null +++ b/tools/average_meter.py @@ -0,0 +1,32 @@ +class AverageMeter(): + """Computes and stores the average and current value""" + def __init__(self, name, fmt=':f'): + self.name = name + self.fmt = fmt + self.log = [] + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + + def reset(self): + self.log.append(self.avg) + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + + def update(self, val, n=1): + self.val = val + self.sum += val * n + self.count += n + self.avg = self.sum / self.count + + def __str__(self): + fmtstr = '{name} {val' + self.fmt + '} ({avg' + self.fmt + '})' + return fmtstr.format(**self.__dict__) + +if __name__ == "__main__": + meter = AverageMeter('sldk') + print(meter.log) + diff --git a/tools/file_exist_fn.py b/tools/file_exist_fn.py new file mode 100644 index 0000000..cd8e118 --- /dev/null +++ b/tools/file_exist_fn.py @@ -0,0 +1,17 @@ +import os + + + +def file_exist_check(file_dir): + + if os.path.isdir(file_dir): + for i in range(2, 1000): + if not os.path.isdir(file_dir + f'({i})'): + file_dir += f'({i})' + break + return file_dir + + + + + diff --git a/tools/knn_monitor.py b/tools/knn_monitor.py new file mode 100644 index 0000000..8960652 --- /dev/null +++ b/tools/knn_monitor.py @@ -0,0 +1,70 @@ +from tqdm import tqdm +import torch.nn.functional as F +import torch +import numpy as np +from utils.metrics import mask_classes + +# code copied from https://colab.research.google.com/github/facebookresearch/moco/blob/colab-notebook/colab/moco_cifar10_demo.ipynb#scrollTo=RI1Y8bSImD7N +# test using a knn monitor +def knn_monitor(net, dataset, memory_data_loader, test_data_loader, device, cl_default, task_id, k=200, t=0.1, hide_progress=False): + net.eval() + # classes = len(memory_data_loader.dataset.classes) + classes = 100 + total_top1 = total_top1_mask = total_top5 = total_num = 0.0 + feature_bank = [] + with torch.no_grad(): + # generate feature bank + for data, target in tqdm(memory_data_loader, desc='Feature extracting', leave=False, disable=True): + if cl_default: + feature = net(data.cuda(non_blocking=True), return_features=True) + else: + feature = net(data.cuda(non_blocking=True)) + feature = F.normalize(feature, dim=1) + feature_bank.append(feature) + # [D, N] + feature_bank = torch.cat(feature_bank, dim=0).t().contiguous() + # [N] + # feature_labels = torch.tensor(memory_data_loader.dataset.targets - np.amin(memory_data_loader.dataset.targets), device=feature_bank.device) + feature_labels = torch.tensor(memory_data_loader.dataset.targets, device=feature_bank.device) + # loop test data to predict the label by weighted knn search + test_bar = tqdm(test_data_loader, desc='kNN', disable=True) + for data, target in test_bar: + data, target = data.cuda(non_blocking=True), target.cuda(non_blocking=True) + if cl_default: + feature = net(data, return_features=True) + else: + feature = net(data) + feature = F.normalize(feature, dim=1) + + pred_scores = knn_predict(feature, feature_bank, feature_labels, classes, k, t) + + total_num += data.shape[0] + _, preds = torch.max(pred_scores.data, 1) + total_top1 += torch.sum(preds == target).item() + + pred_scores = mask_classes(pred_scores, dataset, task_id) + _, preds = torch.max(pred_scores.data, 1) + total_top1_mask += torch.sum(preds == target).item() + + return total_top1 / total_num * 100, total_top1_mask / total_num * 100 + + +# knn monitor as in InstDisc https://arxiv.org/abs/1805.01978 +# implementation follows http://github.com/zhirongw/lemniscate.pytorch and https://github.com/leftthomas/SimCLR +def knn_predict(feature, feature_bank, feature_labels, classes, knn_k, knn_t): + # compute cos similarity between each feature vector and feature bank ---> [B, N] + sim_matrix = torch.mm(feature, feature_bank) + # [B, K] + sim_weight, sim_indices = sim_matrix.topk(k=knn_k, dim=-1) + # [B, K] + sim_labels = torch.gather(feature_labels.expand(feature.size(0), -1), dim=-1, index=sim_indices) + sim_weight = (sim_weight / knn_t).exp() + + # counts for each class + one_hot_label = torch.zeros(feature.size(0) * knn_k, classes, device=sim_labels.device) + # [B*K, C] + one_hot_label = one_hot_label.scatter(dim=-1, index=sim_labels.view(-1, 1), value=1.0) + # weighted score ---> [B, C] + pred_scores = torch.sum(one_hot_label.view(feature.size(0), -1, classes) * sim_weight.unsqueeze(dim=-1), dim=1) + + return pred_scores diff --git a/tools/logger.py b/tools/logger.py new file mode 100644 index 0000000..0523a03 --- /dev/null +++ b/tools/logger.py @@ -0,0 +1,35 @@ +from torch import Tensor +from collections import OrderedDict +import os +from .plotter import Plotter + + +class Logger(object): + def __init__(self, log_dir, matplotlib=True): + + self.reset(log_dir, matplotlib) + + def reset(self, log_dir=None, tensorboard=True, matplotlib=True): + + if log_dir is not None: self.log_dir=log_dir + self.plotter = Plotter() if matplotlib else None + self.counter = OrderedDict() + + def update_scalers(self, ordered_dict): + + for key, value in ordered_dict.items(): + if isinstance(value, Tensor): + ordered_dict[key] = value.item() + if self.counter.get(key) is None: + self.counter[key] = 1 + else: + self.counter[key] += 1 + + if self.plotter: + self.plotter.update(ordered_dict) + self.plotter.save(os.path.join(self.log_dir, 'plotter.svg')) + + + + + diff --git a/tools/plotter.py b/tools/plotter.py new file mode 100644 index 0000000..d84019a --- /dev/null +++ b/tools/plotter.py @@ -0,0 +1,35 @@ +import matplotlib +matplotlib.use('Agg') #https://stackoverflow.com/questions/49921721/runtimeerror-main-thread-is-not-in-main-loop-with-matplotlib-and-flask +import matplotlib.pyplot as plt +from collections import OrderedDict +from torch import Tensor + +class Plotter(object): + def __init__(self): + self.logger = OrderedDict() + def update(self, ordered_dict): + for key, value in ordered_dict.items(): + if isinstance(value, Tensor): + ordered_dict[key] = value.item() + if self.logger.get(key) is None: + self.logger[key] = [value] + else: + self.logger[key].append(value) + + def save(self, file, **kwargs): + fig, axes = plt.subplots(nrows=len(self.logger), ncols=1, figsize=(8,2*len(self.logger))) + fig.tight_layout() + for ax, (key, value) in zip(axes, self.logger.items()): + ax.plot(value) + ax.set_title(key) + + plt.savefig(file, **kwargs) + plt.close() + + + + + + + + diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..c00e6be --- /dev/null +++ b/utils/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import os + + +def create_if_not_exists(path: str) -> None: + """ + Creates the specified folder if it does not exist. + :param path: the complete path of the folder to be created + """ + if not os.path.exists(path): + os.makedirs(path) diff --git a/utils/args.py b/utils/args.py new file mode 100644 index 0000000..d009fad --- /dev/null +++ b/utils/args.py @@ -0,0 +1,60 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from argparse import ArgumentParser +from datasets import NAMES as DATASET_NAMES +from models import get_all_models + + +def add_experiment_args(parser: ArgumentParser) -> None: + """ + Adds the arguments used by all the models. + :param parser: the parser instance + """ + parser.add_argument('--dataset', type=str, required=True, + choices=DATASET_NAMES, + help='Which dataset to perform experiments on.') + parser.add_argument('--model', type=str, required=True, + help='Model name.', choices=get_all_models()) + + parser.add_argument('--lr', type=float, required=True, + help='Learning rate.') + parser.add_argument('--warmup_lr', default=0.0, type=float, + help='Warmup Learning rate') + parser.add_argument('--warmup_epochs', default=0, type=int, + help='Warmup epochs') + parser.add_argument('--final_lr', default=0.0, type=float, + help='Final Learning rate') + parser.add_argument('--batch_size', type=int, required=True, + help='Batch size.') + parser.add_argument('--n_epochs', type=int, required=True, + help='The number of epochs for each task.') + parser.add_argument('--sim_siam', action='store_true', + help='Use SimSiam') + + +def add_management_args(parser: ArgumentParser) -> None: + parser.add_argument('--seed', type=int, default=None, + help='The random seed.') + parser.add_argument('--notes', type=str, default=None, + help='Notes for this run.') + + parser.add_argument('--csv_log', action='store_true', + help='Enable csv logging') + parser.add_argument('--tensorboard', action='store_true', + help='Enable tensorboard logging') + parser.add_argument('--validation', action='store_true', + help='Test on the validation set') + + +def add_rehearsal_args(parser: ArgumentParser) -> None: + """ + Adds the arguments used by all the rehearsal-based methods + :param parser: the parser instance + """ + parser.add_argument('--buffer_size', type=int, required=True, + help='The size of the memory buffer.') + parser.add_argument('--minibatch_size', type=int, + help='The batch size of the memory buffer.') diff --git a/utils/buffer.py b/utils/buffer.py new file mode 100644 index 0000000..00f4409 --- /dev/null +++ b/utils/buffer.py @@ -0,0 +1,144 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch +import numpy as np +from typing import Tuple +from torchvision import transforms + + +def reservoir(num_seen_examples: int, buffer_size: int) -> int: + """ + Reservoir sampling algorithm. + :param num_seen_examples: the number of seen examples + :param buffer_size: the maximum buffer size + :return: the target index if the current image is sampled, else -1 + """ + if num_seen_examples < buffer_size: + return num_seen_examples + + rand = np.random.randint(0, num_seen_examples + 1) + if rand < buffer_size: + return rand + else: + return -1 + + +def ring(num_seen_examples: int, buffer_portion_size: int, task: int) -> int: + return num_seen_examples % buffer_portion_size + task * buffer_portion_size + + +class Buffer: + """ + The memory buffer of rehearsal method. + """ + def __init__(self, buffer_size, device, n_tasks=None, mode='reservoir'): + assert mode in ['ring', 'reservoir'] + self.buffer_size = buffer_size + self.device = device + self.num_seen_examples = 0 + self.functional_index = eval(mode) + if mode == 'ring': + assert n_tasks is not None + self.task_number = n_tasks + self.buffer_portion_size = buffer_size // n_tasks + self.attributes = ['examples', 'labels', 'logits', 'task_labels'] + + def init_tensors(self, examples: torch.Tensor, labels: torch.Tensor, + logits: torch.Tensor, task_labels: torch.Tensor) -> None: + """ + Initializes just the required tensors. + :param examples: tensor containing the images + :param labels: tensor containing the labels + :param logits: tensor containing the outputs of the network + :param task_labels: tensor containing the task labels + """ + for attr_str in self.attributes: + attr = eval(attr_str) + if attr is not None and not hasattr(self, attr_str): + typ = torch.int64 if attr_str.endswith('els') else torch.float32 + setattr(self, attr_str, torch.zeros((self.buffer_size, + *attr.shape[1:]), dtype=typ, device=self.device)) + + def add_data(self, examples, labels=None, logits=None, task_labels=None): + """ + Adds the data to the memory buffer according to the reservoir strategy. + :param examples: tensor containing the images + :param labels: tensor containing the labels + :param logits: tensor containing the outputs of the network + :param task_labels: tensor containing the task labels + :return: + """ + if not hasattr(self, 'examples'): + self.init_tensors(examples, labels, logits, task_labels) + + for i in range(examples.shape[0]): + index = reservoir(self.num_seen_examples, self.buffer_size) + self.num_seen_examples += 1 + if index >= 0: + self.examples[index] = examples[i].to(self.device) + if labels is not None: + self.labels[index] = labels[i].to(self.device) + if logits is not None: + self.logits[index] = logits[i].to(self.device) + if task_labels is not None: + self.task_labels[index] = task_labels[i].to(self.device) + + def get_data(self, size: int, transform: transforms=None) -> Tuple: + """ + Random samples a batch of size items. + :param size: the number of requested items + :param transform: the transformation to be applied (data augmentation) + :return: + """ + if size > min(self.num_seen_examples, self.examples.shape[0]): + size = min(self.num_seen_examples, self.examples.shape[0]) + + choice = np.random.choice(min(self.num_seen_examples, self.examples.shape[0]), + size=size, replace=False) + if transform is None: transform = lambda x: x + # import pdb + # pdb.set_trace() + ret_tuple = (torch.stack([transform(ee.cpu()) + for ee in self.examples[choice]]).to(self.device),) + for attr_str in self.attributes[1:]: + if hasattr(self, attr_str): + attr = getattr(self, attr_str) + ret_tuple += (attr[choice],) + + return ret_tuple + + def is_empty(self) -> bool: + """ + Returns true if the buffer is empty, false otherwise. + """ + if self.num_seen_examples == 0: + return True + else: + return False + + def get_all_data(self, transform: transforms=None) -> Tuple: + """ + Return all the items in the memory buffer. + :param transform: the transformation to be applied (data augmentation) + :return: a tuple with all the items in the memory buffer + """ + if transform is None: transform = lambda x: x + ret_tuple = (torch.stack([transform(ee.cpu()) + for ee in self.examples]).to(self.device),) + for attr_str in self.attributes[1:]: + if hasattr(self, attr_str): + attr = getattr(self, attr_str) + ret_tuple += (attr,) + return ret_tuple + + def empty(self) -> None: + """ + Set all the tensors to None. + """ + for attr_str in self.attributes: + if hasattr(self, attr_str): + delattr(self, attr_str) + self.num_seen_examples = 0 diff --git a/utils/conf.py b/utils/conf.py new file mode 100644 index 0000000..d001ad9 --- /dev/null +++ b/utils/conf.py @@ -0,0 +1,32 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import random +import torch +import numpy as np + +def get_device() -> torch.device: + """ + Returns the GPU device if available else CPU. + """ + return torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + + +def base_path() -> str: + """ + Returns the base bath where to log accuracies and tensorboard data. + """ + return './data/' + + +def set_random_seed(seed: int) -> None: + """ + Sets the seeds at a certain value. + :param seed: the value to be set + """ + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed_all(seed) diff --git a/utils/continual_training.py b/utils/continual_training.py new file mode 100644 index 0000000..7eb677f --- /dev/null +++ b/utils/continual_training.py @@ -0,0 +1,76 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch +from datasets import get_gcl_dataset +from models import get_model +from utils.status import progress_bar +from utils.tb_logger import * +from utils.status import create_fake_stash +from models.utils.continual_model import ContinualModel +from argparse import Namespace + + +def evaluate(model: ContinualModel, dataset) -> float: + """ + Evaluates the final accuracy of the model. + :param model: the model to be evaluated + :param dataset: the GCL dataset at hand + :return: a float value that indicates the accuracy + """ + model.net.eval() + correct, total = 0, 0 + while not dataset.test_over: + inputs, labels = dataset.get_test_data() + inputs, labels = inputs.to(model.device), labels.to(model.device) + outputs = model(inputs) + _, predicted = torch.max(outputs.data, 1) + correct += torch.sum(predicted == labels).item() + total += labels.shape[0] + + acc = correct / total * 100 + return acc + + +def train(args: Namespace): + """ + The training process, including evaluations and loggers. + :param model: the module to be trained + :param dataset: the continual dataset at hand + :param args: the arguments of the current execution + """ + if args.csv_log: + from utils.loggers import CsvLogger + + dataset = get_gcl_dataset(args) + backbone = dataset.get_backbone() + loss = dataset.get_loss() + model = get_model(args, backbone, loss, dataset.get_transform()) + model.net.to(model.device) + + model_stash = create_fake_stash(model, args) + + if args.csv_log: + csv_logger = CsvLogger(dataset.SETTING, dataset.NAME, model.NAME) + + model.net.train() + epoch, i = 0, 0 + while not dataset.train_over: + inputs, labels, not_aug_inputs = dataset.get_train_data() + inputs, labels = inputs.to(model.device), labels.to(model.device) + not_aug_inputs = not_aug_inputs.to(model.device) + loss = model.observe(inputs, labels, not_aug_inputs) + progress_bar(i, dataset.LENGTH // args.batch_size, epoch, 'C', loss) + i += 1 + + if model.NAME == 'joint_gcl': + model.end_task(dataset) + + acc = evaluate(model, dataset) + print('Accuracy:', acc) + + if args.csv_log: + csv_logger.log(acc) + csv_logger.write(vars(args)) diff --git a/utils/gss_buffer.py b/utils/gss_buffer.py new file mode 100644 index 0000000..f31ec21 --- /dev/null +++ b/utils/gss_buffer.py @@ -0,0 +1,185 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch +import torch.nn.functional as F +import numpy as np +from typing import Tuple +from torchvision import transforms + +class Buffer: + """ + The memory buffer of rehearsal method. + """ + def __init__(self, buffer_size, device, minibatch_size, model=None): + self.buffer_size = buffer_size + self.device = device + self.num_seen_examples = 0 + self.attributes = ['examples', 'labels'] + self.model = model + self.minibatch_size = minibatch_size + self.cache = {} + self.fathom = 0 + self.fathom_mask = None + self.reset_fathom() + + self.conterone = 0 + + def reset_fathom(self): + self.fathom = 0 + self.fathom_mask = torch.randperm(min(self.num_seen_examples, self.examples.shape[0] if hasattr(self, 'examples') else self.num_seen_examples)) + + def get_grad_score(self, x, y, X, Y, indices): + g = self.model.get_grads(x, y) + G = [] + for x, y, idx in zip(X, Y, indices): + if idx in self.cache: + grd = self.cache[idx] + else: + grd = self.model.get_grads(x.unsqueeze(0), y.unsqueeze(0)) + self.cache[idx] = grd + G.append(grd) + G = torch.cat(G).to(g.device) + c_score = 0 + grads_at_a_time = 5 + # let's split this so your gpu does not melt. You're welcome. + for it in range(int(np.ceil(G.shape[0] / grads_at_a_time))): + tmp = F.cosine_similarity(g, G[it*grads_at_a_time: (it+1)*grads_at_a_time], dim=1).max().item() + 1 + c_score = max(c_score, tmp) + return c_score + + def functional_reservoir(self, x, y, batch_c, bigX=None, bigY=None, indices=None): + if self.num_seen_examples < self.buffer_size: + return self.num_seen_examples, batch_c + + elif batch_c < 1: + single_c = self.get_grad_score(x.unsqueeze(0), y.unsqueeze(0), bigX, bigY, indices) + s = self.scores.cpu().numpy() + i = np.random.choice(np.arange(0, self.buffer_size), size=1, p=s / s.sum())[0] + rand = np.random.rand(1)[0] + # print(rand, s[i] / (s[i] + c)) + if rand < s[i] / (s[i] + single_c): + return i, single_c + + return -1, 0 + + def init_tensors(self, examples: torch.Tensor, labels: torch.Tensor) -> None: + """ + Initializes just the required tensors. + :param examples: tensor containing the images + :param labels: tensor containing the labels + :param logits: tensor containing the outputs of the network + :param task_labels: tensor containing the task labels + """ + for attr_str in self.attributes: + attr = eval(attr_str) + if attr is not None and not hasattr(self, attr_str): + typ = torch.int64 if attr_str.endswith('els') else torch.float32 + setattr(self, attr_str, torch.zeros((self.buffer_size, + *attr.shape[1:]), dtype=typ, device=self.device)) + self.scores = torch.zeros((self.buffer_size,*attr.shape[1:]), + dtype=torch.float32, device=self.device) + + def add_data(self, examples, labels=None): + """ + Adds the data to the memory buffer according to the reservoir strategy. + :param examples: tensor containing the images + :param labels: tensor containing the labels + :param logits: tensor containing the outputs of the network + :param task_labels: tensor containing the task labels + :return: + """ + if not hasattr(self, 'examples'): + self.init_tensors(examples, labels) + + # compute buffer score + if self.num_seen_examples > 0: + bigX, bigY, indices = self.get_data(min(self.minibatch_size, self.num_seen_examples), give_index=True, + random=True) + c = self.get_grad_score(examples, labels, bigX, bigY, indices) + else: + bigX, bigY, indices = None, None, None + c = 0.1 + + for i in range(examples.shape[0]): + index, score = self.functional_reservoir(examples[i], labels[i], c, bigX, bigY, indices) + self.num_seen_examples += 1 + if index >= 0: + self.examples[index] = examples[i].to(self.device) + if labels is not None: + self.labels[index] = labels[i].to(self.device) + self.scores[index] = score + if index in self.cache: + del self.cache[index] + + def drop_cache(self): + self.cache = {} + + def get_data(self, size: int, transform: transforms=None, give_index=False, random=False) -> Tuple: + """ + Random samples a batch of size items. + :param size: the number of requested items + :param transform: the transformation to be applied (data augmentation) + :return: + """ + + if size > self.examples.shape[0]: + size = self.examples.shape[0] + + if random: + choice = np.random.choice(min(self.num_seen_examples, self.examples.shape[0]), + size=min(size, self.num_seen_examples), + replace=False) + else: + choice = np.arange(self.fathom, min(self.fathom + size, self.examples.shape[0], self.num_seen_examples)) + choice = self.fathom_mask[choice] + self.fathom += len(choice) + if self.fathom >= self.examples.shape[0] or self.fathom >= self.num_seen_examples: + self.fathom = 0 + if transform is None: transform = lambda x: x + ret_tuple = (torch.stack([transform(ee.cpu()) + for ee in self.examples[choice]]).to(self.device),) + for attr_str in self.attributes[1:]: + if hasattr(self, attr_str): + attr = getattr(self, attr_str) + ret_tuple += (attr[choice],) + if give_index: + ret_tuple += (choice,) + + return ret_tuple + + def is_empty(self) -> bool: + """ + Returns true if the buffer is empty, false otherwise. + """ + if self.num_seen_examples == 0: + return True + else: + return False + + def get_all_data(self, transform: transforms=None) -> Tuple: + """ + Return all the items in the memory buffer. + :param transform: the transformation to be applied (data augmentation) + :return: a tuple with all the items in the memory buffer + """ + if transform is None: transform = lambda x: x + ret_tuple = (torch.stack([transform(ee.cpu()) + for ee in self.examples]).to(self.device),) + for attr_str in self.attributes[1:]: + if hasattr(self, attr_str): + attr = getattr(self, attr_str) + ret_tuple += (attr,) + return ret_tuple + + def empty(self) -> None: + """ + Set all the tensors to None. + """ + for attr_str in self.attributes: + if hasattr(self, attr_str): + delattr(self, attr_str) + self.num_seen_examples = 0 + diff --git a/utils/loggers.py b/utils/loggers.py new file mode 100644 index 0000000..6d6912b --- /dev/null +++ b/utils/loggers.py @@ -0,0 +1,149 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import csv +import os +import sys +from typing import Dict, Any +from utils.metrics import * + +from utils import create_if_not_exists +from utils.conf import base_path +import numpy as np + +useless_args = ['dataset', 'tensorboard', 'validation', 'model', + 'csv_log', 'notes', 'load_best_args'] + + +def print_mean_accuracy(mean_acc: np.ndarray, task_number: int, + setting: str) -> None: + """ + Prints the mean accuracy on stderr. + :param mean_acc: mean accuracy value + :param task_number: task index + :param setting: the setting of the benchmark + """ + if setting == 'domain-il': + mean_acc, _ = mean_acc + print('\nAccuracy for {} task(s): {} %'.format( + task_number, round(mean_acc, 2)), file=sys.stderr) + else: + mean_acc_class_il, mean_acc_task_il = mean_acc + print('\nAccuracy for {} task(s): \t [Class-IL]: {} %' + ' \t [Task-IL]: {} %\n'.format(task_number, round( + mean_acc_class_il, 2), round(mean_acc_task_il, 2)), file=sys.stderr) + + +class CsvLogger: + def __init__(self, setting_str: str, dataset_str: str, + model_str: str) -> None: + self.accs = [] + if setting_str == 'class-il': + self.accs_mask_classes = [] + self.setting = setting_str + self.dataset = dataset_str + self.model = model_str + self.fwt = None + self.fwt_mask_classes = None + self.bwt = None + self.bwt_mask_classes = None + self.forgetting = None + self.forgetting_mask_classes = None + + def add_fwt(self, results, accs, results_mask_classes, accs_mask_classes): + self.fwt = forward_transfer(results, accs) + if self.setting == 'class-il': + self.fwt_mask_classes = forward_transfer(results_mask_classes, accs_mask_classes) + + def add_bwt(self, results, results_mask_classes): + self.bwt = backward_transfer(results) + self.bwt_mask_classes = backward_transfer(results_mask_classes) + + def add_forgetting(self, results, results_mask_classes): + self.forgetting = forgetting(results) + self.forgetting_mask_classes = forgetting(results_mask_classes) + + def log(self, mean_acc: np.ndarray) -> None: + """ + Logs a mean accuracy value. + :param mean_acc: mean accuracy value + """ + if self.setting == 'general-continual': + self.accs.append(mean_acc) + elif self.setting == 'domain-il': + mean_acc, _ = mean_acc + self.accs.append(mean_acc) + else: + mean_acc_class_il, mean_acc_task_il = mean_acc + self.accs.append(mean_acc_class_il) + self.accs_mask_classes.append(mean_acc_task_il) + + def write(self, args: Dict[str, Any]) -> None: + """ + writes out the logged value along with its arguments. + :param args: the namespace of the current experiment + """ + for cc in useless_args: + if cc in args: + del args[cc] + + columns = list(args.keys()) + + new_cols = [] + for i, acc in enumerate(self.accs): + args['task' + str(i + 1)] = acc + new_cols.append('task' + str(i + 1)) + + args['forward_transfer'] = self.fwt + new_cols.append('forward_transfer') + + args['backward_transfer'] = self.bwt + new_cols.append('backward_transfer') + + args['forgetting'] = self.forgetting + new_cols.append('forgetting') + + columns = new_cols + columns + + create_if_not_exists(base_path() + "results/" + self.setting) + create_if_not_exists(base_path() + "results/" + self.setting + + "/" + self.dataset) + create_if_not_exists(base_path() + "results/" + self.setting + + "/" + self.dataset + "/" + self.model) + + write_headers = False + path = base_path() + "results/" + self.setting + "/" + self.dataset\ + + "/" + self.model + "/mean_accs.csv" + if not os.path.exists(path): + write_headers = True + with open(path, 'a') as tmp: + writer = csv.DictWriter(tmp, fieldnames=columns) + if write_headers: + writer.writeheader() + writer.writerow(args) + + if self.setting == 'class-il': + create_if_not_exists(base_path() + "results/task-il/" + + self.dataset) + create_if_not_exists(base_path() + "results/task-il/" + + self.dataset + "/" + self.model) + + for i, acc in enumerate(self.accs_mask_classes): + args['task' + str(i + 1)] = acc + + args['forward_transfer'] = self.fwt_mask_classes + args['backward_transfer'] = self.bwt_mask_classes + args['forgetting'] = self.forgetting_mask_classes + + write_headers = False + path = base_path() + "results/task-il" + "/" + self.dataset + "/"\ + + self.model + "/mean_accs.csv" + if not os.path.exists(path): + write_headers = True + with open(path, 'a') as tmp: + writer = csv.DictWriter(tmp, fieldnames=columns) + if write_headers: + writer.writeheader() + writer.writerow(args) diff --git a/utils/metrics.py b/utils/metrics.py new file mode 100644 index 0000000..b20b377 --- /dev/null +++ b/utils/metrics.py @@ -0,0 +1,58 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch +import numpy as np +from datasets.utils.continual_dataset import ContinualDataset +from typing import Tuple + + +def backward_transfer(results): + n_tasks = len(results) + li = list() + for i in range(n_tasks - 1): + li.append(results[-1][i] - results[i][i]) + + return np.mean(li) + + +def forward_transfer(results, random_results): + n_tasks = len(results) + li = list() + for i in range(1, n_tasks): + li.append(results[i-1][i] - random_results[i]) + + return np.mean(li) + + +def forgetting(results): + n_tasks = len(results) + li = list() + for i in range(n_tasks - 1): + results[i] += [0.0] * (n_tasks - len(results[i])) + np_res = np.array(results) + maxx = np.max(np_res, axis=0) + for i in range(n_tasks - 1): + li.append(maxx[i] - results[-1][i]) + + return np.mean(li) + + +def mask_classes(outputs: torch.Tensor, dataset: ContinualDataset, k: int): + """ + Given the output tensor, the dataset at hand and the current task, + masks the former by setting the responses for the other tasks at -inf. + It is used to obtain the results for the task-il setting. + :param outputs: the output tensor + :param dataset: the continual dataset + :param k: the task index + """ + outputs[:, 0:k * dataset.N_CLASSES_PER_TASK] = -float('inf') + outputs[:, (k + 1) * dataset.N_CLASSES_PER_TASK: + dataset.N_TASKS * dataset.N_CLASSES_PER_TASK] = -float('inf') + + return outputs + + diff --git a/utils/status.py b/utils/status.py new file mode 100644 index 0000000..64c0498 --- /dev/null +++ b/utils/status.py @@ -0,0 +1,78 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from datetime import datetime +import sys +import os +from utils.conf import base_path +from typing import Any, Dict, Union +from torch import nn +from argparse import Namespace +from datasets.utils.continual_dataset import ContinualDataset + + +def create_stash(model: nn.Module, args: Namespace, + dataset: ContinualDataset) -> Dict[Any, str]: + """ + Creates the dictionary where to save the model status. + :param model: the model + :param args: the current arguments + :param dataset: the dataset at hand + """ + now = datetime.now() + model_stash = {'task_idx': 0, 'epoch_idx': 0, 'batch_idx': 0} + name_parts = [args.dataset, model.NAME] + if 'buffer_size' in vars(args).keys(): + name_parts.append('buf_' + str(args.buffer_size)) + name_parts.append(now.strftime("%Y%m%d_%H%M%S_%f")) + model_stash['model_name'] = '/'.join(name_parts) + model_stash['mean_accs'] = [] + model_stash['args'] = args + model_stash['backup_folder'] = os.path.join(base_path(), 'backups', + dataset.SETTING, + model_stash['model_name']) + return model_stash + + +def create_fake_stash(model: nn.Module, args: Namespace) -> Dict[Any, str]: + """ + Create a fake stash, containing just the model name. + This is used in general continual, as it is useless to backup + a lightweight MNIST-360 training. + :param model: the model + :param args: the arguments of the call + :return: a dict containing a fake stash + """ + now = datetime.now() + model_stash = {'task_idx': 0, 'epoch_idx': 0} + name_parts = [args.dataset, model.NAME] + if 'buffer_size' in vars(args).keys(): + name_parts.append('buf_' + str(args.buffer_size)) + name_parts.append(now.strftime("%Y%m%d_%H%M%S_%f")) + model_stash['model_name'] = '/'.join(name_parts) + + return model_stash + + +def progress_bar(i: int, max_iter: int, epoch: Union[int, str], + task_number: int, loss: float) -> None: + """ + Prints out the progress bar on the stderr file. + :param i: the current iteration + :param max_iter: the maximum number of iteration + :param epoch: the epoch + :param task_number: the task index + :param loss: the current value of the loss function + """ + if not (i + 1) % 10 or (i + 1) == max_iter: + progress = min(float((i + 1) / max_iter), 1) + progress_bar = ('█' * int(50 * progress)) + ('┈' * (50 - int(50 * progress))) + print('\r[ {} ] Task {} | epoch {}: |{}| loss: {}'.format( + datetime.now().strftime("%m-%d | %H:%M"), + task_number + 1 if isinstance(task_number, int) else task_number, + epoch, + progress_bar, + round(loss, 8) + ), file=sys.stderr, end='', flush=True) diff --git a/utils/tb_logger.py b/utils/tb_logger.py new file mode 100644 index 0000000..e41740c --- /dev/null +++ b/utils/tb_logger.py @@ -0,0 +1,86 @@ +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from utils.conf import base_path +import os +from argparse import Namespace +from typing import Dict, Any +import numpy as np + + +class TensorboardLogger: + def __init__(self, args: Namespace, setting: str, + stash: Dict[Any, str]=None) -> None: + from torch.utils.tensorboard import SummaryWriter + + self.settings = [setting] + if setting == 'class-il': + self.settings.append('task-il') + self.loggers = {} + self.name = stash['model_name'] + for a_setting in self.settings: + self.loggers[a_setting] = SummaryWriter( + os.path.join(base_path(), 'tensorboard_runs', a_setting, self.name), + purge_step=stash['task_idx'] * args.n_epochs + stash['epoch_idx']+1) + config_text = ', '.join( + ["%s=%s" % (name, getattr(args, name)) for name in args.__dir__() + if not name.startswith('_')]) + for a_logger in self.loggers.values(): + a_logger.add_text('config', config_text) + + def get_name(self) -> str: + """ + :return: the name of the model + """ + return self.name + + def log_accuracy(self, all_accs: np.ndarray, all_mean_accs: np.ndarray, + args: Namespace, task_number: int) -> None: + """ + Logs the current accuracy value for each task. + :param all_accs: the accuracies (class-il, task-il) for each task + :param all_mean_accs: the mean accuracies for (class-il, task-il) + :param args: the arguments of the run + :param task_number: the task index + """ + mean_acc_common, mean_acc_task_il = all_mean_accs + for setting, a_logger in self.loggers.items(): + mean_acc = mean_acc_task_il\ + if setting == 'task-il' else mean_acc_common + index = 1 if setting == 'task-il' else 0 + accs = [all_accs[index][kk] for kk in range(len(all_accs[0]))] + for kk, acc in enumerate(accs): + a_logger.add_scalar('acc_task%02d' % (kk + 1), acc, + task_number * args.n_epochs) + a_logger.add_scalar('acc_mean', mean_acc, task_number * args.n_epochs) + + def log_loss(self, loss: float, args: Namespace, epoch: int, + task_number: int, iteration: int) -> None: + """ + Logs the loss value at each iteration. + :param loss: the loss value + :param args: the arguments of the run + :param epoch: the epoch index + :param task_number: the task index + :param iteration: the current iteration + """ + for a_logger in self.loggers.values(): + a_logger.add_scalar('loss', loss, task_number * args.n_epochs + epoch) + + def log_loss_gcl(self, loss: float, iteration: int) -> None: + """ + Logs the loss value at each iteration. + :param loss: the loss value + :param iteration: the current iteration + """ + for a_logger in self.loggers.values(): + a_logger.add_scalar('loss', loss, iteration) + + def close(self) -> None: + """ + At the end of the execution, closes the logger. + """ + for a_logger in self.loggers.values(): + a_logger.close()

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�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