Spaces:
Sleeping
Sleeping
import numpy as np | |
import torch | |
from PIL import Image | |
from torchvision import transforms as T | |
NORMALIZE = T.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)) | |
class GaussianBlur: | |
""" | |
Code borrowed from SelfMask: https://github.com/NoelShin/selfmask | |
""" | |
# Implements Gaussian blur as described in the SimCLR paper | |
def __init__(self, kernel_size: float, min: float = 0.1, max: float = 2.0) -> None: | |
self.min = min | |
self.max = max | |
# kernel size is set to be 10% of the image height/width | |
self.kernel_size = kernel_size | |
def __call__(self, sample: Image.Image, random_gaussian_blur_p: float): | |
sample = np.array(sample) | |
# blur the image with a 50% chance | |
prob = np.random.random_sample() | |
if prob < 0.5: | |
import cv2 | |
sigma = (self.max - self.min) * np.random.random_sample() + self.min | |
sample = cv2.GaussianBlur( | |
sample, (self.kernel_size, self.kernel_size), sigma | |
) | |
return sample | |
def unnormalize(image, mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)): | |
""" | |
Code borrowed from STEGO: https://github.com/mhamilton723/STEGO | |
""" | |
image2 = torch.clone(image) | |
for t, m, s in zip(image2, mean, std): | |
t.mul_(s).add_(m) | |
return image2 | |