Tutorial on adding new data augs (Gaussian Noise)?

I just some small changes and your transform works :).

  1. call super().init() to initialize the RandTransform correctly
  2. Changed the type of X to TensorImage
class AddNoise(RandTransform):
    
    def __init__(self, mean=0., std=1., **kwargs):
        self.std = std
        self.mean = mean
        super().__init__(**kwargs)
        
    def encodes(self, x:TensorImage):
        return x + torch.randn(x.size()) * self.std + self.mean

Test:

path = untar_data(URLs.MNIST)

class AddNoise(RandTransform):
    
    def __init__(self, mean=0., std=1., **kwargs):
        self.std = std
        self.mean = mean
        super().__init__(**kwargs)
        
    def encodes(self, x:TensorImage):
        return x + torch.randn(x.size()) * self.std + self.mean


db = DataBlock(blocks=(ImageBlock(cls=PILImage), CategoryBlock), 
                  get_items=get_image_files, 
                  batch_tfms=[AddNoise(mean=0., std=100.)],
                  get_y=parent_label)

dls = db.dataloaders(path)

dls.show_batch()

To apply the transform only with a 50 % chance do:

batch_tfms=[AddNoise(mean=0., std=100., p=0.5)],

Florian

4 Likes