1

I try to make a simple dataloader with albumentations:

train_transforms = A.Compose(
    [
        A.GaussNoise(always_apply=False, p=0.4, var_limit=(0, 70.0)),
        A.Blur(always_apply=False, p=0.3, blur_limit=(3, 7)),
        A.RandomResizedCrop(always_apply=False, p=0.2, height=128, width=128, scale=(0.7, 1.0),
                          ratio=(0.75, 1.3333333333333333), interpolation=0),
        A.RGBShift(r_shift_limit=15, g_shift_limit=15, b_shift_limit=15, p=0.5),
        A.RandomBrightnessContrast(p=0.5),
        transforms.ToTensor()
    ]
)

class SixKDataset(Dataset):
    def __init__(self, data_path, transform=None):
        self.data = np.load(data_path, allow_pickle=True)
        self.transform = transform

    def __len__(self):
        return self.data.shape[0]

    def __getitem__(self, idx):
        ret = np.squeeze(self.data[idx, 0, :, :, :]), np.squeeze(self.data[idx, 1, :, :, :])
        if self.transform:
            image1 = self.transform(image = ret[0])['image']
            image2 = self.transform(image = ret[1])['image']
            return image1, image2
        return np.squeeze(ret[0]), np.squeeze(ret[1])

However i get this error: TypeError: call() got an unexpected keyword argument 'force_apply'

I have no idea how yo fix this

  • You will get a better answer by asking in [GitHub issues of the albumentations repository](https://github.com/albumentations-team/albumentations/issues). – akshayk07 May 01 '22 at 06:56

1 Answers1

0

I believe you need to define additional targets like so:

train_transforms = A.Compose(
[
    A.GaussNoise(always_apply=False, p=0.4, var_limit=(0, 70.0)),
    A.Blur(always_apply=False, p=0.3, blur_limit=(3, 7)),
    A.RandomResizedCrop(always_apply=False, p=0.2, height=128, width=128, scale=(0.7, 1.0),
                        ratio=(0.75, 1.3333333333333333), interpolation=0),
    A.RGBShift(r_shift_limit=15, g_shift_limit=15, b_shift_limit=15, p=0.5),
    A.RandomBrightnessContrast(p=0.5),
    transforms.ToTensor()
], additional_targets={'image0': 'image'}
)

and then use them in getitem like so:

def __getitem__(self, idx):
    ret = np.squeeze(self.data[idx, 0, :, :, :]), np.squeeze(self.data[idx, 1, :, :, :])
    if self.transform:
        transformed = transform(image=ret[0], image0=ret[1])
    return np.squeeze(transformed[image]), np.squeeze(transformed[image0])

https://albumentations.ai/docs/examples/example_multi_target/ look here

OD1N
  • 3
  • 2