ClothSeg / src /dataset.py
ahmedsharaf's picture
Deploy ClothSeg Streamlit App
b157024
Raw History Blame Contribute Delete
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