Spaces:
Paused
Paused
Download src/dataset.py from ahmedsharaf/ClothSeg: direct link, hf CLI and curl.
- Browser
- Download file 3.44 kB
-
https://huggingface.co/spaces/ahmedsharaf/ClothSeg/resolve/main/src/dataset.py
- Command line
-
hf download hf://spaces/ahmedsharaf/ClothSeg/src/dataset.py
-
curl -L -o dataset.py https://huggingface.co/spaces/ahmedsharaf/ClothSeg/resolve/main/src/dataset.py
3.44 kB
| from torch.utils.data import DataLoader | |
| import cv2 | |
| import numpy as np | |
| import albumentations as A | |
| from albumentations.pytorch import ToTensorV2 | |
| from datasets import load_dataset | |
| from torch.utils.data import Dataset | |
| from src.operations import remap_mask | |
| class ClothesDataset(Dataset): | |
| def __init__(self, dataset, transform = None, label_map = None): | |
| self.dataset = dataset | |
| self.transform = transform | |
| self.label_map = label_map | |
| def __len__(self): | |
| return len(self.dataset) | |
| def __getitem__(self, idx): | |
| sample = self.dataset[idx] | |
| # Image | |
| image = sample["pixel_values"].convert("RGB") | |
| image = np.array(image, dtype=np.uint8) | |
| # Mask | |
| mask = np.array(sample["label"], dtype = np.uint8) | |
| # Remap Mask | |
| mask = remap_mask(mask, self.label_map) | |
| # Apply transform | |
| if self.transform: | |
| transformed = self.transform(image=image, mask=mask) | |
| image = transformed["image"] | |
| mask = transformed["mask"] | |
| image = image.contiguous() | |
| mask = mask.contiguous() | |
| return image, mask.long() | |
| def get_transforms(config, train=True): | |
| image_size = config["data"]["image_size"] | |
| mean = config["data"]["normalization"]["mean"] | |
| std = config["data"]["normalization"]["std"] | |
| transforms = [ | |
| A.LongestMaxSize( | |
| max_size = image_size, | |
| interpolation=cv2.INTER_LINEAR, | |
| mask_interpolation=cv2.INTER_NEAREST | |
| ), | |
| A.PadIfNeeded( | |
| min_height=image_size, | |
| min_width=image_size, | |
| border_mode=cv2.BORDER_CONSTANT, | |
| fill = 0, | |
| fill_mask = 0 | |
| ) | |
| ] | |
| if train: | |
| transforms.append( | |
| A.HorizontalFlip( | |
| p = config["data"]["augmentation"]["horizontal_flip_probability"] | |
| ) | |
| ) | |
| transforms.extend([ | |
| A.Normalize( | |
| mean = mean, | |
| std=std, | |
| ), | |
| ToTensorV2() | |
| ]) | |
| return A.Compose(transforms) | |
| def create_dataloaders(config): | |
| # load dataset | |
| dataset = load_dataset("ckotait/ATRDataset") | |
| # Transforms | |
| train_transform = get_transforms(config, train=True) | |
| val_transform = get_transforms(config, train=False) | |
| # Create dataset class | |
| train_dataset = ClothesDataset(dataset['train'], train_transform, config["segmentation"]["label_map"]) | |
| val_dataset = ClothesDataset(dataset['validation'], val_transform, config["segmentation"]["label_map"]) | |
| test_dataset = ClothesDataset(dataset['test'], val_transform, config["segmentation"]["label_map"]) | |
| # Data loaders | |
| train_loader = DataLoader( | |
| train_dataset, | |
| batch_size=config["data"]["batch_size"], | |
| shuffle=True, | |
| num_workers=config["data"]["num_workers"], | |
| pin_memory=True, | |
| drop_last=True | |
| ) | |
| val_loader = DataLoader( | |
| val_dataset, | |
| batch_size=config["data"]["batch_size"], | |
| shuffle=False, | |
| num_workers=config["data"]["num_workers"], | |
| pin_memory=True | |
| ) | |
| test_loader = DataLoader( | |
| test_dataset, | |
| batch_size=config["data"]["batch_size"], | |
| shuffle=False, | |
| num_workers=config["data"]["num_workers"], | |
| pin_memory=True | |
| ) | |
| return train_loader, val_loader, test_loader | |