From a08d46f10d6102bd6e3f258ca5ac880b020ea259 Mon Sep 17 00:00:00 2001 From: Zzzzz1 <15850778078@163.com> Date: Sun, 5 Nov 2023 17:01:47 +0800 Subject: [PATCH] update dot: a distillation-oriented trainer & configs --- .github/dot.png | Bin 0 -> 187011 bytes README.md | 37 +++++ configs/cifar100/dot/res32x4_res8x4.yaml | 20 +++ configs/cifar100/dot/res32x4_shuv2.yaml | 20 +++ configs/cifar100/dot/vgg13_vgg8.yaml | 20 +++ configs/imagenet/r34_r18/dot.yaml | 33 ++++ configs/imagenet/r50_mv1/dot.yaml | 33 ++++ configs/tiny_imagenet/dot/r18_mv2.yaml | 23 +++ configs/tiny_imagenet/dot/r18_shuv2.yaml | 23 +++ mdistiller/dataset/__init__.py | 16 ++ mdistiller/dataset/tiny_imagenet.py | 122 ++++++++++++++ mdistiller/engine/__init__.py | 5 +- mdistiller/engine/cfg.py | 5 + mdistiller/engine/dot.py | 174 ++++++++++++++++++++ mdistiller/engine/trainer.py | 149 +++++++++++++++++ mdistiller/models/__init__.py | 2 +- mdistiller/models/cifar/__init__.py | 14 ++ mdistiller/models/cifar/mv2_tinyimagenet.py | 101 ++++++++++++ tools/eval.py | 9 +- tools/train.py | 9 +- 20 files changed, 805 insertions(+), 10 deletions(-) create mode 100644 .github/dot.png create mode 100644 configs/cifar100/dot/res32x4_res8x4.yaml create mode 100755 configs/cifar100/dot/res32x4_shuv2.yaml create mode 100755 configs/cifar100/dot/vgg13_vgg8.yaml create mode 100755 configs/imagenet/r34_r18/dot.yaml create mode 100755 configs/imagenet/r50_mv1/dot.yaml create mode 100644 configs/tiny_imagenet/dot/r18_mv2.yaml create mode 100644 configs/tiny_imagenet/dot/r18_shuv2.yaml create mode 100644 mdistiller/dataset/tiny_imagenet.py create mode 100644 mdistiller/engine/dot.py create mode 100644 mdistiller/models/cifar/mv2_tinyimagenet.py diff --git a/.github/dot.png b/.github/dot.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea6ab52b334f7001d92172a15133d0332d0421d GIT binary patch literal 187011 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 xRb~CS;W)in^qjWQGYW`N2Zac{JrX8noSvDwU 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 Ml0HhNxeC-pZcPWp(=9nqv?Gu_YeI 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 z + +### Main Benchmark Results + +On CIFAR-100: + +| Teacher
Student | ResNet32x4
ResNet8x4| VGG13
VGG8| ResNet32x4
ShuffleNet-V2| +|:---------------:|:-----------------:|:-----------------:|:-----------------:| +| KD | 73.33 | 72.98 | 74.45 | +| **KD+DOT** | **75.12** | **73.77** | **75.55** | + +On Tiny-ImageNet: + +| Teacher
Student |ResNet18
MobileNet-V2|ResNet18
ShuffleNet-V2| +|:---------------:|:-----------------:|:-----------------:| +| KD | 58.35 | 62.26 | +| **KD+DOT** | **64.01** | **65.75** | + +On ImageNet: + +| Teacher
Student |ResNet34
ResNet18|ResNet50
MobileNet-V1| +|:---------------:|:-----------------:|:-----------------:| +| KD | 71.03 | 70.50 | +| **KD+DOT** | **71.72** | **73.09** | # Decoupled Knowledge Distillation @@ -170,6 +201,12 @@ If this repo is helpful for your research, please consider citing the paper: journal={arXiv preprint arXiv:2203.08679}, year={2022} } +@article{zhao2023dot, + title={DOT: A Distillation-Oriented Trainer}, + author={Zhao, Borui and Cui, Quan and Song, Renjie and Liang, Jiajun}, + journal={arXiv preprint arXiv:2307.08436}, + year={2023} +} ``` # License diff --git a/configs/cifar100/dot/res32x4_res8x4.yaml b/configs/cifar100/dot/res32x4_res8x4.yaml new file mode 100644 index 0000000..81b406d --- /dev/null +++ b/configs/cifar100/dot/res32x4_res8x4.yaml @@ -0,0 +1,20 @@ +EXPERIMENT: + NAME: "" + TAG: "kd,dot,res32x4,res8x4" + PROJECT: "dot_cifar" +DISTILLER: + TYPE: "KD" + TEACHER: "resnet32x4" + STUDENT: "resnet8x4" +SOLVER: + BATCH_SIZE: 64 + EPOCHS: 240 + LR: 0.05 + LR_DECAY_STAGES: [150, 180, 210] + LR_DECAY_RATE: 0.1 + WEIGHT_DECAY: 0.0005 + MOMENTUM: 0.9 + TYPE: "SGD" + TRAINER: "dot" + DOT: + DELTA: 0.075 diff --git a/configs/cifar100/dot/res32x4_shuv2.yaml b/configs/cifar100/dot/res32x4_shuv2.yaml new file mode 100755 index 0000000..9072871 --- /dev/null +++ b/configs/cifar100/dot/res32x4_shuv2.yaml @@ -0,0 +1,20 @@ +EXPERIMENT: + NAME: "" + TAG: "kd,dot,res32x4,shuv2" + PROJECT: "dot_cifar" +DISTILLER: + TYPE: "KD" + TEACHER: "resnet32x4" + STUDENT: "ShuffleV2" +SOLVER: + BATCH_SIZE: 64 + EPOCHS: 240 + LR: 0.01 + LR_DECAY_STAGES: [150, 180, 210] + LR_DECAY_RATE: 0.1 + WEIGHT_DECAY: 0.0005 + MOMENTUM: 0.9 + TYPE: "SGD" + TRAINER: "dot" + DOT: + DELTA: 0.075 diff --git a/configs/cifar100/dot/vgg13_vgg8.yaml b/configs/cifar100/dot/vgg13_vgg8.yaml new file mode 100755 index 0000000..9a684ef --- /dev/null +++ b/configs/cifar100/dot/vgg13_vgg8.yaml @@ -0,0 +1,20 @@ +EXPERIMENT: + NAME: "" + TAG: "kd,dot,vgg13,vgg8" + PROJECT: "dot_cifar" +DISTILLER: + TYPE: "KD" + TEACHER: "vgg13" + STUDENT: "vgg8" +SOLVER: + BATCH_SIZE: 64 + EPOCHS: 240 + LR: 0.05 + LR_DECAY_STAGES: [150, 180, 210] + LR_DECAY_RATE: 0.1 + WEIGHT_DECAY: 0.0005 + MOMENTUM: 0.9 + TYPE: "SGD" + TRAINER: "dot" + DOT: + DELTA: 0.075 diff --git a/configs/imagenet/r34_r18/dot.yaml b/configs/imagenet/r34_r18/dot.yaml new file mode 100755 index 0000000..8d5e7b3 --- /dev/null +++ b/configs/imagenet/r34_r18/dot.yaml @@ -0,0 +1,33 @@ +EXPERIMENT: + NAME: "" + TAG: "kd,dot,res34,res18" + PROJECT: "dot_imagenet" +DATASET: + TYPE: "imagenet" + NUM_WORKERS: 32 + TEST: + BATCH_SIZE: 128 +DISTILLER: + TYPE: "KD" + TEACHER: "ResNet34" + STUDENT: "ResNet18" +SOLVER: + BATCH_SIZE: 512 + EPOCHS: 100 + LR: 0.2 + LR_DECAY_STAGES: [30, 60, 90] + LR_DECAY_RATE: 0.1 + WEIGHT_DECAY: 0.0001 + MOMENTUM: 0.9 + TYPE: "SGD" + TRAINER: "dot" + DOT: + DELTA: 0.09 +KD: + TEMPERATURE: 1 + LOSS: + CE_WEIGHT: 0.5 + KD_WEIGHT: 0.5 +LOG: + TENSORBOARD_FREQ: 50 + SAVE_CHECKPOINT_FREQ: 10 diff --git a/configs/imagenet/r50_mv1/dot.yaml b/configs/imagenet/r50_mv1/dot.yaml new file mode 100755 index 0000000..a8bd6c7 --- /dev/null +++ b/configs/imagenet/r50_mv1/dot.yaml @@ -0,0 +1,33 @@ +EXPERIMENT: + NAME: "" + TAG: "kd,dot,res50,mobilenetv1" + PROJECT: "dot_imagenet" +DATASET: + TYPE: "imagenet" + NUM_WORKERS: 32 + TEST: + BATCH_SIZE: 128 +DISTILLER: + TYPE: "KD" + TEACHER: "ResNet50" + STUDENT: "MobileNetV1" +SOLVER: + BATCH_SIZE: 512 + EPOCHS: 100 + LR: 0.2 + LR_DECAY_STAGES: [30, 60, 90] + LR_DECAY_RATE: 0.1 + WEIGHT_DECAY: 0.0001 + MOMENTUM: 0.9 + TYPE: "SGD" + TRAINER: "dot" + DOT: + DELTA: 0.09 +KD: + TEMPERATURE: 1 + LOSS: + CE_WEIGHT: 0.5 + KD_WEIGHT: 0.5 +LOG: + TENSORBOARD_FREQ: 50 + SAVE_CHECKPOINT_FREQ: 10 diff --git a/configs/tiny_imagenet/dot/r18_mv2.yaml b/configs/tiny_imagenet/dot/r18_mv2.yaml new file mode 100644 index 0000000..02bebae --- /dev/null +++ b/configs/tiny_imagenet/dot/r18_mv2.yaml @@ -0,0 +1,23 @@ +EXPERIMENT: + NAME: "" + TAG: "kd,dot,r18,mv2" + PROJECT: "dot_tinyimagenet" +DATASET: + TYPE: "tiny_imagenet" + NUM_WORKERS: 16 +DISTILLER: + TYPE: "KD" + TEACHER: "ResNet18" + STUDENT: "MobileNetV2" +SOLVER: + BATCH_SIZE: 256 + EPOCHS: 200 + LR: 0.2 + LR_DECAY_STAGES: [60, 120, 160] + LR_DECAY_RATE: 0.1 + WEIGHT_DECAY: 0.0005 + MOMENTUM: 0.9 + TYPE: "SGD" + TRAINER: "dot" + DOT: + DELTA: 0.075 diff --git a/configs/tiny_imagenet/dot/r18_shuv2.yaml b/configs/tiny_imagenet/dot/r18_shuv2.yaml new file mode 100644 index 0000000..972da3d --- /dev/null +++ b/configs/tiny_imagenet/dot/r18_shuv2.yaml @@ -0,0 +1,23 @@ +EXPERIMENT: + NAME: "" + TAG: "kd,dot,r18,shuv2" + PROJECT: "dot_tinyimagenet" +DATASET: + TYPE: "tiny_imagenet" + NUM_WORKERS: 16 +DISTILLER: + TYPE: "KD" + TEACHER: "ResNet18" + STUDENT: "ShuffleV2" +SOLVER: + BATCH_SIZE: 256 + EPOCHS: 200 + LR: 0.2 + LR_DECAY_STAGES: [60, 120, 160] + LR_DECAY_RATE: 0.1 + WEIGHT_DECAY: 0.0005 + MOMENTUM: 0.9 + TYPE: "SGD" + TRAINER: "dot" + DOT: + DELTA: 0.075 diff --git a/mdistiller/dataset/__init__.py b/mdistiller/dataset/__init__.py index f612437..afaea69 100755 --- a/mdistiller/dataset/__init__.py +++ b/mdistiller/dataset/__init__.py @@ -1,5 +1,6 @@ from .cifar100 import get_cifar100_dataloaders, get_cifar100_dataloaders_sample from .imagenet import get_imagenet_dataloaders, get_imagenet_dataloaders_sample +from .tiny_imagenet import get_tinyimagenet_dataloader, get_tinyimagenet_dataloader_sample def get_dataset(cfg): @@ -34,6 +35,21 @@ def get_dataset(cfg): num_workers=cfg.DATASET.NUM_WORKERS, ) num_classes = 1000 + elif cfg.DATASET.TYPE == "tiny_imagenet": + if cfg.DISTILLER.TYPE in ("CRD", "CRDKD"): + train_loader, val_loader, num_data = get_tinyimagenet_dataloader_sample( + batch_size=cfg.SOLVER.BATCH_SIZE, + val_batch_size=cfg.DATASET.TEST.BATCH_SIZE, + num_workers=cfg.DATASET.NUM_WORKERS, + k=cfg.CRD.NCE.K, + ) + else: + train_loader, val_loader, num_data = get_tinyimagenet_dataloader( + batch_size=cfg.SOLVER.BATCH_SIZE, + val_batch_size=cfg.DATASET.TEST.BATCH_SIZE, + num_workers=cfg.DATASET.NUM_WORKERS, + ) + num_classes = 200 else: raise NotImplementedError(cfg.DATASET.TYPE) diff --git a/mdistiller/dataset/tiny_imagenet.py b/mdistiller/dataset/tiny_imagenet.py new file mode 100644 index 0000000..e1b6e7b --- /dev/null +++ b/mdistiller/dataset/tiny_imagenet.py @@ -0,0 +1,122 @@ +import os +from torch.utils.data import DataLoader +from torchvision import datasets +from torchvision import transforms +import numpy as np + + +data_folder = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "../../data/tiny-imagenet-200" +) + + +class ImageFolderInstance(datasets.ImageFolder): + def __getitem__(self, index): + path, target = self.imgs[index] + img = self.loader(path) + if self.transform is not None: + img = self.transform(img) + return img, target, index + + +class ImageFolderInstanceSample(ImageFolderInstance): + """: Folder datasets which returns (img, label, index, contrast_index): + """ + def __init__(self, folder, transform=None, target_transform=None, + is_sample=False, k=4096): + super().__init__(folder, transform=transform) + + self.k = k + self.is_sample = is_sample + if self.is_sample: + num_classes = 200 + num_samples = len(self.samples) + label = np.zeros(num_samples, dtype=np.int32) + for i in range(num_samples): + img, target = self.samples[i] + label[i] = target + + self.cls_positive = [[] for i in range(num_classes)] + for i in range(num_samples): + self.cls_positive[label[i]].append(i) + + self.cls_negative = [[] for i in range(num_classes)] + for i in range(num_classes): + for j in range(num_classes): + if j == i: + continue + self.cls_negative[i].extend(self.cls_positive[j]) + + self.cls_positive = [np.asarray(self.cls_positive[i], dtype=np.int32) for i in range(num_classes)] + self.cls_negative = [np.asarray(self.cls_negative[i], dtype=np.int32) for i in range(num_classes)] + print('dataset initialized!') + + def __getitem__(self, index): + """ + Args: + index (int): Index + Returns: + tuple: (image, target) where target is class_index of the target class. + """ + img, target, index = super().__getitem__(index) + + if self.is_sample: + # sample contrastive examples + pos_idx = index + neg_idx = np.random.choice(self.cls_negative[target], self.k, replace=True) + sample_idx = np.hstack((np.asarray([pos_idx]), neg_idx)) + return img, target, index, sample_idx + else: + return img, target, index + + +def get_tinyimagenet_dataloader(batch_size, val_batch_size, num_workers): + """Data Loader for tiny-imagenet""" + train_transform = transforms.Compose([ + transforms.RandomRotation(20), + transforms.RandomHorizontalFlip(0.5), + transforms.ToTensor(), + transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]), + ]) + test_transform = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]), + ]) + train_folder = os.path.join(data_folder, "train") + test_folder = os.path.join(data_folder, "val") + train_set = ImageFolderInstance(train_folder, transform=train_transform) + num_data = len(train_set) + test_set = datasets.ImageFolder(test_folder, transform=test_transform) + train_loader = DataLoader( + train_set, batch_size=batch_size, shuffle=True, num_workers=num_workers + ) + test_loader = DataLoader( + test_set, batch_size=val_batch_size, shuffle=False, num_workers=1 + ) + return train_loader, test_loader, num_data + + +def get_tinyimagenet_dataloader_sample(batch_size, val_batch_size, num_workers, k): + """Data Loader for tiny-imagenet""" + train_transform = transforms.Compose([ + transforms.RandomRotation(20), + transforms.RandomHorizontalFlip(0.5), + transforms.ToTensor(), + transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]), + ]) + test_transform = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize([0.4802, 0.4481, 0.3975], [0.2302, 0.2265, 0.2262]), + ]) + train_folder = os.path.join(data_folder, "train") + test_folder = os.path.join(data_folder, "val") + train_set = ImageFolderInstanceSample(train_folder, transform=train_transform, is_sample=True, k=k) + num_data = len(train_set) + test_set = datasets.ImageFolder(test_folder, transform=test_transform) + train_loader = DataLoader( + train_set, batch_size=batch_size, shuffle=True, num_workers=num_workers + ) + test_loader = DataLoader( + test_set, batch_size=val_batch_size, shuffle=False, num_workers=1 + ) + return train_loader, test_loader, num_data diff --git a/mdistiller/engine/__init__.py b/mdistiller/engine/__init__.py index d931376..4883802 100755 --- a/mdistiller/engine/__init__.py +++ b/mdistiller/engine/__init__.py @@ -1,6 +1,7 @@ -from .trainer import BaseTrainer, CRDTrainer - +from .trainer import BaseTrainer, CRDTrainer, DOT, CRDDOT trainer_dict = { "base": BaseTrainer, "crd": CRDTrainer, + "dot": DOT, + "crd_dot": CRDDOT, } diff --git a/mdistiller/engine/cfg.py b/mdistiller/engine/cfg.py index e8179fa..41625f0 100755 --- a/mdistiller/engine/cfg.py +++ b/mdistiller/engine/cfg.py @@ -165,3 +165,8 @@ def show_cfg(cfg): CFG.DKD.BETA = 8.0 CFG.DKD.T = 4.0 CFG.DKD.WARMUP = 20 + + +# DOT CFG +CFG.SOLVER.DOT = CN() +CFG.SOLVER.DOT.DELTA = 0.075 diff --git a/mdistiller/engine/dot.py b/mdistiller/engine/dot.py new file mode 100644 index 0000000..1619781 --- /dev/null +++ b/mdistiller/engine/dot.py @@ -0,0 +1,174 @@ +import math +import torch +from torch import Tensor +import torch.optim._functional as F +from torch.optim.optimizer import Optimizer, required +from typing import List, Optional + + +def check_in(t, l): + for i in l: + if t is i: + return True + return False + +def dot(params: List[Tensor], + d_p_list: List[Tensor], + momentum_buffer_list: List[Optional[Tensor]], + kd_grad_buffer: List[Optional[Tensor]], + kd_momentum_buffer: List[Optional[Tensor]], + kd_params: List[Tensor], + *, + weight_decay: float, + momentum: float, + momentum_kd: float, + lr: float, + dampening: float): + for i, param in enumerate(params): + d_p = d_p_list[i] + if weight_decay != 0: + d_p = d_p.add(param, alpha=weight_decay) + if momentum != 0: + buf = momentum_buffer_list[i] + if buf is None: + buf = torch.clone(d_p).detach() + momentum_buffer_list[i] = buf + elif check_in(param, kd_params): + buf.mul_(momentum).add_(d_p, alpha=1 - dampening) + else: + buf.mul_((momentum_kd + momentum) / 2.).add_(d_p, alpha=1 - dampening) + d_p = buf + # update params with task-loss grad + param.add_(d_p, alpha=-lr) + + for i, (d_p, buf, p) in enumerate(zip(kd_grad_buffer, kd_momentum_buffer, kd_params)): + # update params with kd-loss grad + if buf is None: + buf = torch.clone(d_p).detach() + kd_momentum_buffer[i] = buf + elif check_in(p, params): + buf.mul_(momentum_kd).add_(d_p, alpha=1 - dampening) + else: + if weight_decay != 0: + d_p = d_p.add(p, alpha=weight_decay) + buf.mul_((momentum_kd + momentum) / 2.).add_(d_p, alpha=1 - dampening) + p.add_(buf, alpha=-lr) + + +class DistillationOrientedTrainer(Optimizer): + r""" + Distillation-Oriented Trainer + Usage: + ... + optimizer = DistillationOrientedTrainer() + optimizer.zero_grad(set_to_none=True) + loss_kd.backward(retain_graph=True) + optimizer.step_kd() # get kd-grad and update kd-momentum + optimizer.zero_grad(set_to_none=True) + loss_task.backward() + optimizer.step() # get task-grad and update tast-momentum, then update params. + ... + """ + + def __init__( + self, + params, + lr=required, + momentum=0, + momentum_kd=0, + dampening=0, + weight_decay=0): + 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 momentum_kd < 0.0: + raise ValueError("Invalid momentum kd value: {}".format(momentum_kd)) + if weight_decay < 0.0: + raise ValueError("Invalid weight_decay value: {}".format(weight_decay)) + defaults = dict(lr=lr, momentum=momentum, momentum_kd=momentum_kd, dampening=dampening, + weight_decay=weight_decay) + self.kd_grad_buffer = [] + self.kd_grad_params = [] + self.kd_momentum_buffer = [] + super(DistillationOrientedTrainer, self).__init__(params, defaults) + + @torch.no_grad() + def step_kd(self, closure=None): + loss = None + if closure is not None: + with torch.enable_grad(): + loss = closure() + + assert len(self.param_groups) == 1, "Only implement for one-group params." + for group in self.param_groups: + params_with_grad = [] + d_p_list = [] + momentum_kd_buffer_list = [] + weight_decay = group['weight_decay'] + dampening = group['dampening'] + lr = group['lr'] + for p in group['params']: + if p.grad is not None: + params_with_grad.append(p) + d_p_list.append(p.grad) + state = self.state[p] + if 'momentum_kd_buffer' not in state: + momentum_kd_buffer_list.append(None) + else: + momentum_kd_buffer_list.append(state['momentum_kd_buffer']) + + self.kd_momentum_buffer = momentum_kd_buffer_list + self.kd_grad_buffer = d_p_list + self.kd_grad_params = params_with_grad + return loss + + @torch.no_grad() + def step(self, closure=None): + loss = None + if closure is not None: + with torch.enable_grad(): + loss = closure() + assert len(self.param_groups) == 1, "Only implement for one-group params." + for group in self.param_groups: + params_with_grad = [] + d_p_list = [] + momentum_buffer_list = [] + weight_decay = group['weight_decay'] + momentum = group['momentum'] + momentum_kd = group['momentum_kd'] + dampening = group['dampening'] + lr = group['lr'] + + for p in group['params']: + if p.grad is not None: + params_with_grad.append(p) + d_p_list.append(p.grad) + + state = self.state[p] + if 'momentum_buffer' not in state: + momentum_buffer_list.append(None) + else: + momentum_buffer_list.append(state['momentum_buffer']) + dot(params_with_grad, + d_p_list, + momentum_buffer_list, + self.kd_grad_buffer, + self.kd_momentum_buffer, + self.kd_grad_params, + weight_decay=weight_decay, + momentum=momentum, + momentum_kd=momentum_kd, + lr=lr, + dampening=dampening) + # update momentum_buffers in state + for p, momentum_buffer in zip(params_with_grad, momentum_buffer_list): + state = self.state[p] + state['momentum_buffer'] = momentum_buffer + for p, momentum_kd_buffer in zip(self.kd_grad_params, self.kd_momentum_buffer): + state = self.state[p] + state['momentum_kd_buffer'] = momentum_kd_buffer + self.kd_grad_buffer = [] + self.kd_grad_params = [] + self.kd_momentum_buffer = [] + return loss diff --git a/mdistiller/engine/trainer.py b/mdistiller/engine/trainer.py index 49a5fe4..94d1643 100755 --- a/mdistiller/engine/trainer.py +++ b/mdistiller/engine/trainer.py @@ -16,6 +16,7 @@ load_checkpoint, log_msg, ) +from .dot import DistillationOrientedTrainer class BaseTrainer(object): @@ -223,3 +224,151 @@ def train_iter(self, data, epoch, train_meters): train_meters["top5"].avg, ) return msg + + +class DOT(BaseTrainer): + def init_optimizer(self, cfg): + if cfg.SOLVER.TYPE == "SGD": + m_task = cfg.SOLVER.MOMENTUM - cfg.SOLVER.DOT.DELTA + m_kd = cfg.SOLVER.MOMENTUM + cfg.SOLVER.DOT.DELTA + optimizer = DistillationOrientedTrainer( + self.distiller.module.get_learnable_parameters(), + lr=cfg.SOLVER.LR, + momentum=m_task, + momentum_kd=m_kd, + weight_decay=cfg.SOLVER.WEIGHT_DECAY, + ) + else: + raise NotImplementedError(cfg.SOLVER.TYPE) + return optimizer + + def train(self, resume=False): + epoch = 1 + if resume: + state = load_checkpoint(os.path.join(self.log_path, "latest")) + epoch = state["epoch"] + 1 + self.distiller.load_state_dict(state["model"]) + self.optimizer.load_state_dict(state["optimizer"]) + self.best_acc = state["best_acc"] + while epoch < self.cfg.SOLVER.EPOCHS + 1: + self.train_epoch(epoch) + epoch += 1 + print(log_msg("Best accuracy:{}".format(self.best_acc), "EVAL")) + with open(os.path.join(self.log_path, "worklog.txt"), "a") as writer: + writer.write("best_acc\t" + "{:.2f}".format(float(self.best_acc))) + + def train_iter(self, data, epoch, train_meters): + train_start_time = time.time() + image, target, index = data + train_meters["data_time"].update(time.time() - train_start_time) + image = image.float() + image = image.cuda(non_blocking=True) + target = target.cuda(non_blocking=True) + index = index.cuda(non_blocking=True) + + # forward + preds, losses_dict = self.distiller(image=image, target=target, epoch=epoch) + + # dot backward + loss_ce, loss_kd = losses_dict['loss_ce'].mean(), losses_dict['loss_kd'].mean() + self.optimizer.zero_grad(set_to_none=True) + loss_kd.backward(retain_graph=True) + self.optimizer.step_kd() + self.optimizer.zero_grad(set_to_none=True) + loss_ce.backward() + self.optimizer.step() + + train_meters["training_time"].update(time.time() - train_start_time) + # collect info + batch_size = image.size(0) + acc1, acc5 = accuracy(preds, target, topk=(1, 5)) + train_meters["losses"].update((loss_ce + loss_kd).cpu().detach().numpy().mean(), batch_size) + train_meters["top1"].update(acc1[0], batch_size) + train_meters["top5"].update(acc5[0], batch_size) + # print info + msg = "Epoch:{}| Time(data):{:.3f}| Time(train):{:.3f}| Loss:{:.4f}| Top-1:{:.3f}| Top-5:{:.3f}".format( + epoch, + train_meters["data_time"].avg, + train_meters["training_time"].avg, + train_meters["losses"].avg, + train_meters["top1"].avg, + train_meters["top5"].avg, + ) + return msg + + +class CRDDOT(BaseTrainer): + + def init_optimizer(self, cfg): + if cfg.SOLVER.TYPE == "SGD": + m_task = cfg.SOLVER.MOMENTUM - cfg.SOLVER.DOT.DELTA + m_kd = cfg.SOLVER.MOMENTUM + cfg.SOLVER.DOT.DELTA + optimizer = DistillationOrientedTrainer( + self.distiller.module.get_learnable_parameters(), + lr=cfg.SOLVER.LR, + momentum=m_task, + momentum_kd=m_kd, + weight_decay=cfg.SOLVER.WEIGHT_DECAY, + ) + else: + raise NotImplementedError(cfg.SOLVER.TYPE) + return optimizer + + def train(self, resume=False): + epoch = 1 + if resume: + state = load_checkpoint(os.path.join(self.log_path, "latest")) + epoch = state["epoch"] + 1 + self.distiller.load_state_dict(state["model"]) + self.optimizer.load_state_dict(state["optimizer"]) + self.best_acc = state["best_acc"] + while epoch < self.cfg.SOLVER.EPOCHS + 1: + self.train_epoch(epoch) + epoch += 1 + print(log_msg("Best accuracy:{}".format(self.best_acc), "EVAL")) + with open(os.path.join(self.log_path, "worklog.txt"), "a") as writer: + writer.write("best_acc\t" + "{:.2f}".format(float(self.best_acc))) + + def train_iter(self, data, epoch, train_meters): + self.optimizer.zero_grad() + train_start_time = time.time() + image, target, index, contrastive_index = data + train_meters["data_time"].update(time.time() - train_start_time) + image = image.float() + image = image.cuda(non_blocking=True) + target = target.cuda(non_blocking=True) + index = index.cuda(non_blocking=True) + contrastive_index = contrastive_index.cuda(non_blocking=True) + + # forward + preds, losses_dict = self.distiller( + image=image, target=target, index=index, contrastive_index=contrastive_index + ) + + # dot backward + loss_ce, loss_kd = losses_dict['loss_ce'].mean(), losses_dict['loss_kd'].mean() + self.optimizer.zero_grad(set_to_none=True) + loss_kd.backward(retain_graph=True) + self.optimizer.step_kd() + self.optimizer.zero_grad(set_to_none=True) + loss_ce.backward() + # self.optimizer.step((1 - epoch / 240.)) + self.optimizer.step() + + train_meters["training_time"].update(time.time() - train_start_time) + # collect info + batch_size = image.size(0) + acc1, acc5 = accuracy(preds, target, topk=(1, 5)) + train_meters["losses"].update((loss_ce + loss_kd).cpu().detach().numpy().mean(), batch_size) + train_meters["top1"].update(acc1[0], batch_size) + train_meters["top5"].update(acc5[0], batch_size) + # print info + msg = "Epoch:{}| Time(data):{:.3f}| Time(train):{:.3f}| Loss:{:.4f}| Top-1:{:.3f}| Top-5:{:.3f}".format( + epoch, + train_meters["data_time"].avg, + train_meters["training_time"].avg, + train_meters["losses"].avg, + train_meters["top1"].avg, + train_meters["top5"].avg, + ) + return msg diff --git a/mdistiller/models/__init__.py b/mdistiller/models/__init__.py index e8411d7..624b968 100755 --- a/mdistiller/models/__init__.py +++ b/mdistiller/models/__init__.py @@ -1,2 +1,2 @@ -from .cifar import cifar_model_dict +from .cifar import cifar_model_dict, tiny_imagenet_model_dict from .imagenet import imagenet_model_dict diff --git a/mdistiller/models/cifar/__init__.py b/mdistiller/models/cifar/__init__.py index ccf023c..c39916f 100755 --- a/mdistiller/models/cifar/__init__.py +++ b/mdistiller/models/cifar/__init__.py @@ -16,12 +16,19 @@ from .mobilenetv2 import mobile_half from .ShuffleNetv1 import ShuffleV1 from .ShuffleNetv2 import ShuffleV2 +from .mv2_tinyimagenet import mobilenetv2_tinyimagenet cifar100_model_prefix = os.path.join( os.path.dirname(os.path.abspath(__file__)), "../../../download_ckpts/cifar_teachers/" ) + +tiny_imagenet_model_prefix = os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "../../../download_ckpts/tiny_imagenet_teachers/" +) + cifar_model_dict = { # teachers "resnet56": ( @@ -64,3 +71,10 @@ "ShuffleV1": (ShuffleV1, None), "ShuffleV2": (ShuffleV2, None), } + + +tiny_imagenet_model_dict = { + "ResNet18": (ResNet18, tiny_imagenet_model_prefix + "ResNet18_vanilla/ti_res18"), + "MobileNetV2": (mobilenetv2_tinyimagenet, None), + "ShuffleV2": (ShuffleV2, None), +} diff --git a/mdistiller/models/cifar/mv2_tinyimagenet.py b/mdistiller/models/cifar/mv2_tinyimagenet.py new file mode 100644 index 0000000..4a88944 --- /dev/null +++ b/mdistiller/models/cifar/mv2_tinyimagenet.py @@ -0,0 +1,101 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + + +class LinearBottleNeck(nn.Module): + + def __init__(self, in_channels, out_channels, stride, t=6, class_num=100): + super().__init__() + + self.residual = nn.Sequential( + nn.Conv2d(in_channels, in_channels * t, 1), + nn.BatchNorm2d(in_channels * t), + nn.ReLU6(inplace=True), + + nn.Conv2d(in_channels * t, in_channels * t, 3, stride=stride, padding=1, groups=in_channels * t), + nn.BatchNorm2d(in_channels * t), + nn.ReLU6(inplace=True), + + nn.Conv2d(in_channels * t, out_channels, 1), + nn.BatchNorm2d(out_channels) + ) + + self.stride = stride + self.in_channels = in_channels + self.out_channels = out_channels + + def forward(self, x): + + residual = self.residual(x) + + if self.stride == 1 and self.in_channels == self.out_channels: + residual += x + + return residual + +class MobileNetV2(nn.Module): + + def __init__(self, num_classes=100): + super().__init__() + + self.pre = nn.Sequential( + nn.Conv2d(3, 32, 1, padding=1), + nn.BatchNorm2d(32), + nn.ReLU6(inplace=True) + ) + + self.stage1 = LinearBottleNeck(32, 16, 1, 1) + self.stage2 = self._make_stage(2, 16, 24, 2, 6) + self.stage3 = self._make_stage(3, 24, 32, 2, 6) + self.stage4 = self._make_stage(4, 32, 64, 2, 6) + self.stage5 = self._make_stage(3, 64, 96, 1, 6) + self.stage6 = self._make_stage(3, 96, 160, 1, 6) + self.stage7 = LinearBottleNeck(160, 320, 1, 6) + + self.conv1 = nn.Sequential( + nn.Conv2d(320, 1280, 1), + nn.BatchNorm2d(1280), + nn.ReLU6(inplace=True) + ) + + self.conv2 = nn.Conv2d(1280, num_classes, 1) + + def forward(self, x): + x = self.pre(x) + f0 = x + x = self.stage1(x) + x = self.stage2(x) + f1 = x + x = self.stage3(x) + f2 = x + x = self.stage4(x) + f3 = x + x = self.stage5(x) + x = self.stage6(x) + x = self.stage7(x) + x = self.conv1(x) + f4 = x + x = F.adaptive_avg_pool2d(x, 1) + avg = x + x = self.conv2(x) + x = x.view(x.size(0), -1) + feats = {} + feats["feats"] = [f0, f1, f2, f3, f4] + feats["pooled_feat"] = avg + + return x, feats + + def _make_stage(self, repeat, in_channels, out_channels, stride, t): + + layers = [] + layers.append(LinearBottleNeck(in_channels, out_channels, stride, t)) + + while repeat - 1: + layers.append(LinearBottleNeck(out_channels, out_channels, 1, t)) + repeat -= 1 + + return nn.Sequential(*layers) + +def mobilenetv2_tinyimagenet(**kwargs): + return MobileNetV2(**kwargs) \ No newline at end of file diff --git a/tools/eval.py b/tools/eval.py index 10c2f16..e92580b 100755 --- a/tools/eval.py +++ b/tools/eval.py @@ -5,7 +5,7 @@ cudnn.benchmark = True from mdistiller.distillers import Vanilla -from mdistiller.models import cifar_model_dict, imagenet_model_dict +from mdistiller.models import cifar_model_dict, imagenet_model_dict, tiny_imagenet_model_dict from mdistiller.dataset import get_dataset from mdistiller.dataset.imagenet import get_imagenet_val_loader from mdistiller.engine.utils import load_checkpoint, validate @@ -21,7 +21,7 @@ "--dataset", type=str, default="cifar100", - choices=["cifar100", "imagenet"], + choices=["cifar100", "imagenet", "tiny_imagenet"], ) parser.add_argument("-bs", "--batch-size", type=int, default=64) args = parser.parse_args() @@ -35,9 +35,10 @@ else: model = imagenet_model_dict[args.model](pretrained=False) model.load_state_dict(load_checkpoint(args.ckpt)["model"]) - elif args.dataset == "cifar100": + elif args.dataset in ("cifar100", "tiny_imagenet"): train_loader, val_loader, num_data, num_classes = get_dataset(cfg) - model, pretrain_model_path = cifar_model_dict[args.model] + model_dict = tiny_imagenet_model_dict if args.dataset == "tiny_imagenet" else cifar_model_dict + model, pretrain_model_path = model_dict[args.model] model = model(num_classes=num_classes) ckpt = pretrain_model_path if args.ckpt == "pretrain" else args.ckpt model.load_state_dict(load_checkpoint(ckpt)["model"]) diff --git a/tools/train.py b/tools/train.py index ea41035..de8dbf6 100755 --- a/tools/train.py +++ b/tools/train.py @@ -6,7 +6,7 @@ cudnn.benchmark = True -from mdistiller.models import cifar_model_dict, imagenet_model_dict +from mdistiller.models import cifar_model_dict, imagenet_model_dict, tiny_imagenet_model_dict from mdistiller.distillers import distiller_dict from mdistiller.dataset import get_dataset from mdistiller.engine.utils import load_checkpoint, log_msg @@ -43,6 +43,8 @@ def main(cfg, resume, opts): if cfg.DISTILLER.TYPE == "NONE": if cfg.DATASET.TYPE == "imagenet": model_student = imagenet_model_dict[cfg.DISTILLER.STUDENT](pretrained=False) + elif cfg.DATASET.TYPE == "tiny_imagenet": + model_student = tiny_imagenet_model_dict[cfg.DISTILLER.STUDENT][0](num_classes=num_classes) else: model_student = cifar_model_dict[cfg.DISTILLER.STUDENT][0]( num_classes=num_classes @@ -55,13 +57,14 @@ def main(cfg, resume, opts): model_teacher = imagenet_model_dict[cfg.DISTILLER.TEACHER](pretrained=True) model_student = imagenet_model_dict[cfg.DISTILLER.STUDENT](pretrained=False) else: - net, pretrain_model_path = cifar_model_dict[cfg.DISTILLER.TEACHER] + model_dict = tiny_imagenet_model_dict if cfg.DATASET.TYPE == "tiny_imagenet" else cifar_model_dict + net, pretrain_model_path = model_dict[cfg.DISTILLER.TEACHER] assert ( pretrain_model_path is not None ), "no pretrain model for teacher {}".format(cfg.DISTILLER.TEACHER) model_teacher = net(num_classes=num_classes) model_teacher.load_state_dict(load_checkpoint(pretrain_model_path)["model"]) - model_student = cifar_model_dict[cfg.DISTILLER.STUDENT][0]( + model_student = model_dict[cfg.DISTILLER.STUDENT][0]( num_classes=num_classes ) if cfg.DISTILLER.TYPE == "CRD":