- PyTorch有自帶的數(shù)據(jù)增強包在torchvision.transforms中, 可以使用
import torchvision.transforms as transforms
my_transforms = transforms.Compose([
transforms.RandomCrop(32),
transforms.Grayscale(),
transforms.RandomHorizontalFlip(),
transforms.RandomVerticalFlip(),
transforms.Resize(img_size),#for example img_size=(128, 128)
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])
實現(xiàn)張量空間的數(shù)據(jù)增強.
- 當(dāng)然也可以使用numpy, openCV自行實現(xiàn), 這樣更加自由, 給出我自己的實例如下, 在main中transforms.compose([Normalize()...])調(diào)用就可以了:
# normalization
class Normalize(object):
def __init__(self, mean=0.5, std=0.5):
self.mean = mean
self.std = std
def __call__(self, data):
data["img"] = (data["img"] - self.mean) / self.std
return data
# to PyTorch tensor
class ToTensor(object):
def __init__(self):
def __call__(self, data):
data["img"] = torch.from_numpy(data["img"].transpose((2, 0, 1)).astype(np.float32))
return data
# horizontal flip with probability p
class RandomHorizontalFlip(object):
def __init__(self, p=0.5):
self.p = p
def __call__(self, data):
if np.random.rand() < self.p:
np.flip(data["img"], axis=1)
else:
data["img"] = data["img"]
return data
# vertical flip with p
class RandomVerticalFlip(object):
def __init__(self, p=0.5):
self.p = p
def __call__(self, data):
if np.random.rand() < self.p:
np.flip(data["img"], axis=0)
else:
data["img"] = data["img"]
return data