I need a transform that performs JPEG compression to the image in question. The QF must be random and belong to a given subset.
The imgaug library has a jpegcompression that takes a parameter on how much one wants to compress it. I’m guessing QF is quality factor?
And how do I add it to my simple_transform?
# Transforms simple_transform = transforms.Compose( [ transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ] ) # Dataset train_dataset = datasets.ImageFolder('data/train/', simple_transform) valid_dataset = datasets.ImageFolder('data/valid/', simple_transform)
I’ve never done it but you could probably create a custom transform. Perhaps searching on google for pytorch lambda transform or whatever will help you find some working code of it
Edit: Did just that
def foo(x): return x / 255.0
transforms.Lambda(lambda x: foo(x))
def randomJPEGcompression(image): qf = random.randrange(10, 100) outputIoStream = BytesIO() image.save(outputIoStream, "JPEG", quality=qf, optimice=True) outputIoStream.seek(0) return Image.open(outputIoStream) # Transforms simple_transform = transforms.Compose( [ transforms.Lambda(randomJPEGcompression), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ] )