import random from torch.utils.data import Dataset from torchvision import transforms class DecoderDataset(Dataset): def __init__( self, content_dataset, style_dataset, content_indexes, style_indexes, image_size=256, is_train=True ): self.content_dataset = content_dataset self.style_dataset = style_dataset self.content_indexes = content_indexes self.style_indexes = style_indexes self.is_train = is_train if self.is_train: self.transform = transforms.Compose([ transforms.Resize(image_size), transforms.RandomCrop(image_size), transforms.RandomHorizontalFlip(), transforms.ToTensor(), ]) else: self.transform = transforms.Compose([ transforms.Resize(image_size), transforms.CenterCrop(image_size), transforms.ToTensor(), ]) def __len__(self): return len(self.content_indexes) def __getitem__(self, idx): real_content_idx = self.content_indexes[idx] if self.is_train: style_idx = random.choice(self.style_indexes) else: style_idx = self.style_indexes[idx % len(self.style_indexes)] content_data = self.content_dataset[real_content_idx] style_data = self.style_dataset[style_idx] content_img = content_data["image"] style_img = style_data["image"] return self.transform(content_img.convert("RGB")), self.transform(style_img.convert("RGB"))