Download src/data_module.py from Michal-Raszkowski/style-transfer-adain: direct link, hf CLI and curl.
- Browser
- Download file 2.86 kB
-
https://huggingface.co/spaces/Michal-Raszkowski/style-transfer-adain/resolve/refs%2Fpr%2F1/src/data_module.py
- Command line
-
hf download hf://spaces/Michal-Raszkowski/style-transfer-adain@refs/pr/1/src/data_module.py
-
curl -L -o data_module.py https://huggingface.co/spaces/Michal-Raszkowski/style-transfer-adain/resolve/refs%2Fpr%2F1/src/data_module.py
2.86 kB
| import lightning as L | |
| import numpy as np | |
| from torch.utils.data import DataLoader | |
| from datasets import load_dataset | |
| from src.dataset import DecoderDataset | |
| class StyleTransferDataModule(L.LightningDataModule): | |
| def __init__(self, batch_size=8, image_size=256, val_split=0.05, test_split=0.05, max_samples=None): | |
| super().__init__() | |
| self.save_hyperparameters() | |
| self.content_name = "wangwangxuebing/train_COCO_data2014_jpg" | |
| self.style_name = "newsletter/HiDream-I1-Artists" | |
| def setup(self, stage=None): | |
| full_content = load_dataset(self.content_name, split="test") | |
| full_style = load_dataset(self.style_name, split="train") | |
| if self.hparams.max_samples: | |
| full_content = full_content.select(range(min(len(full_content), self.hparams.max_samples))) | |
| full_style = full_style.select(range(min(len(full_style), self.hparams.max_samples))) | |
| seed = 42 | |
| content_indexes = np.random.RandomState(seed).permutation(len(full_content)) | |
| style_indexes = np.random.RandomState(seed).permutation(len(full_style)) | |
| def get_splits(all_indexes, val_ratio, test_ratio): | |
| total_count = len(all_indexes) | |
| n_val = int(total_count * val_ratio) | |
| n_test = int(total_count * test_ratio) | |
| n_train = total_count - n_val - n_test | |
| train_end = n_train | |
| val_end = n_train + n_val | |
| train_indices = all_indexes[:train_end] | |
| val_indices = all_indexes[train_end:val_end] | |
| test_indices = all_indexes[val_end:] | |
| return train_indices, val_indices, test_indices | |
| content_train, content_val, content_test = get_splits(content_indexes, self.hparams.val_split, self.hparams.test_split) | |
| style_train, style_val, style_test = get_splits(style_indexes, self.hparams.val_split, self.hparams.test_split) | |
| if stage == "fit" or stage is None: | |
| self.train_ds = DecoderDataset(full_content, full_style, content_train, style_train, self.hparams.image_size, is_train=True) | |
| self.val_ds = DecoderDataset(full_content, full_style, content_val, style_val, self.hparams.image_size, is_train=False) | |
| if stage == "test": | |
| self.test_ds = DecoderDataset(full_content, full_style, content_test, style_test, self.hparams.image_size, is_train=False) | |
| def train_dataloader(self): | |
| return DataLoader(self.train_ds, batch_size=self.hparams.batch_size, shuffle=True, num_workers=12, pin_memory=True) | |
| def val_dataloader(self): | |
| return DataLoader(self.val_ds, batch_size=self.hparams.batch_size, shuffle=False, num_workers=4, pin_memory=True) | |
| def test_dataloader(self): | |
| return DataLoader(self.test_ds, batch_size=self.hparams.batch_size, shuffle=False, num_workers=4) |