You could create a mapping between the clean images and the transformations, i.e.:
img1.png, img1_transform1.png
img1.png, img1_transform2.png
...
img2.png, img2_transform1.png
...

Saving this mapping to a text or .csv file, you can pass it to the Dataset as image paths:
class MyDataset(Dataset):
    def __init__(self, image_paths):
        self.image_paths = image_paths

    def __getitem__(self, index)
        image, image_transformed = load_image(self.image_paths[index])
        # transformations, e.g. Random Crop etc. 
        # Make sure to perform the same transformations on image and target
        # Here is a small example: https://discuss.pytorch.org/t/torchvision-transfors-how-to-perform-identical-transform-on-both-image-and-target/10606/7?u=ptrblck

        x, y = TF.to_tensor(image), TF.to_tensor(image_transformed)
        return x, y

    def __len__(self):
        return len(self.image_paths)

Wrap this Dataset into a DataLoader and you are good to go!
Let me know, if this works for you.