import numpy as np from torchvision import datasets, transforms from utils.toolkit import split_images_labels import os class iData(object): train_trsf = [] test_trsf = [] common_trsf = [] class_order = None class iCIFAR10(iData): use_path = False train_trsf = [ transforms.RandomCrop(32, padding=4), transforms.RandomHorizontalFlip(p=0.5), transforms.ColorJitter(brightness=63 / 255), transforms.ToTensor(), ] test_trsf = [transforms.ToTensor()] common_trsf = [ transforms.Normalize( mean=(0.4914, 0.4822, 0.4465), std=(0.2023, 0.1994, 0.2010) ), ] class_order = np.arange(10).tolist() def download_data(self): train_dataset = datasets.cifar.CIFAR10("./data", train=True, download=True) test_dataset = datasets.cifar.CIFAR10("./data", train=False, download=True) self.train_data, self.train_targets = train_dataset.data, np.array( train_dataset.targets ) self.test_data, self.test_targets = test_dataset.data, np.array( test_dataset.targets ) class iCIFAR100(iData): use_path = False train_trsf = [ transforms.RandomCrop(32, padding=4), transforms.RandomHorizontalFlip(), transforms.ColorJitter(brightness=63 / 255), transforms.ToTensor() ] test_trsf = [transforms.ToTensor()] common_trsf = [ transforms.Normalize( mean=(0.5071, 0.4867, 0.4408), std=(0.2675, 0.2565, 0.2761) ), ] class_order = np.arange(100).tolist() def download_data(self): train_dataset = datasets.cifar.CIFAR100("./data", train=True, download=True) test_dataset = datasets.cifar.CIFAR100("./data", train=False, download=True) self.train_data, self.train_targets = train_dataset.data, np.array( train_dataset.targets ) self.test_data, self.test_targets = test_dataset.data, np.array( test_dataset.targets ) class iImageNet1000(iData): use_path = True train_trsf = [ transforms.RandomHorizontalFlip(), transforms.RandomAffine(25, translate=(0.1, 0.1), scale=(0.9, 1.1), shear=8), transforms.ColorJitter(), ] test_trsf = [ transforms.Resize(256), transforms.CenterCrop(224), ] common_trsf = [ transforms.ToTensor(), transforms.Normalize( mean=[0.470, 0.460, 0.455], std=[0.267, 0.266, 0.270] ), ] class_order = np.arange(1000).tolist() def download_data(self): assert 0, "You should specify the folder of your dataset" train_dir = "[DATA-PATH]/train/" test_dir = "[DATA-PATH]/val/" train_dset = datasets.ImageFolder(train_dir) test_dset = datasets.ImageFolder(test_dir) self.train_data, self.train_targets = split_images_labels(train_dset.imgs) self.test_data, self.test_targets = split_images_labels(test_dset.imgs) class StanfordCar(iData): use_path = True train_trsf = [ transforms.Resize(320), transforms.CenterCrop(320), transforms.RandomHorizontalFlip(), transforms.RandomAffine(25, translate=(0.1, 0.1), scale=(0.9, 1.1), shear=8), transforms.ColorJitter(), ] test_trsf = [ transforms.Resize(320), transforms.CenterCrop(320), ] common_trsf = [ transforms.ToTensor(), transforms.Normalize( mean=[0.470, 0.460, 0.455], std=[0.267, 0.266, 0.270] ), ] class_order = np.arange(196).tolist() def download_data(self): path = './car_data/car_data' train_dset = datasets.ImageFolder(os.path.join(path, "train")) test_dset = datasets.ImageFolder(os.path.join(path, "test")) self.train_data, self.train_targets = split_images_labels(train_dset.imgs) self.test_data, self.test_targets = split_images_labels(test_dset.imgs) class GeneralDataset(iData): def __init__( self, path, init_class_list = [-1], train_transform = None, test_transform = None, common_transform = None): self.use_path = True self.path = path self.train_trsf = train_transform if self.train_trsf == None: self.train_trsf = [ transforms.RandomAffine(25, translate=(0.1, 0.1), scale=(0.9, 1.1), shear=8), transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ColorJitter(brightness = 0.3, saturation = 0.2), ] self.test_trsf = test_transform if self.test_trsf == None: self.test_trsf = [ transforms.Resize(224), transforms.CenterCrop(224), ] self.common_trsf = common_transform if self.common_trsf == None: self.common_trsf = [ transforms.ToTensor(), transforms.Normalize( mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5] ), ] self.init_index = max(init_class_list) + 1 self.class_order = np.arange(self.init_index, self.init_index + len(os.listdir(os.path.join(self.path, "train")))) def download_data(self): train_dset = datasets.ImageFolder(os.path.join(self.path, "train")) test_dset = datasets.ImageFolder(os.path.join(self.path, "val")) self.train_data, self.train_targets = split_images_labels(train_dset.imgs, start_index = self.init_index) self.test_data, self.test_targets = split_images_labels(test_dset.imgs, start_index = self.init_index) return train_dset.classes class iImageNet100(iData): use_path = True train_trsf = [ transforms.Resize(320), transforms.CenterCrop(320), ] test_trsf = [ transforms.Resize(320), transforms.CenterCrop(320), ] common_trsf = [ transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ] class_order = np.arange(1000).tolist() def download_data(self): assert 0, "You should specify the folder of your dataset" train_dir = "[DATA-PATH]/train/" test_dir = "[DATA-PATH]/val/" train_dset = datasets.ImageFolder(train_dir) test_dset = datasets.ImageFolder(test_dir) self.train_data, self.train_targets = split_images_labels(train_dset.imgs) self.test_data, self.test_targets = split_images_labels(test_dset.imgs)