- PyTorch有自带的数据增强包在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)),
])
实现张量空间的数据增强.
- 当然也可以使用numpy, openCV自行实现, 这样更加自由, 给出我自己的实例如下, 在main中transforms.compose([Normalize()...])调用就可以了:
# 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
网友评论