參考:https://pytorch-cn.readthedocs.io/zh/latest/torchvision/torchvision-transform/
1.pytorch torchvision transform
對PIL.Image進行變換:
2. class torchvision.transforms.Compose(transforms) :將多個transform組合起來使用
transforms.Compose([ transforms.CenterCrop(10), transforms.ToTensor(), ])
3. class torchvision.transforms.CenterCrop(size)
將指定的PIL.Image進行中心切割,得到給定的size,size可以是tuple:(target_height, target_width)。
size也可以是一個 Integer,這種情況下,切出來的圖片形狀是正方形。
4. class torchvision.transforms.RandomCrop(size, padding=0)
切割中心點的位置隨機選取。size可以是tuple也可以是Integer。
5.class torchvision.transforms.RandomHorizontalFlip
隨機水平翻轉給定的PIL.Image,概率為0.5,一半的概率翻轉,一半的概率不翻轉。
6. class torchvision.transforms.RandomSizedCrop(size, interpolation=2)
先將PIL.Image隨機切,然后再resize成給定的size大小。
7. class torchvison.transforms.Pad(padding, fill=0)
將給定的PIL.Image的所有邊用給定的pad value填充。
padding:要填充多少像素。 fill:用什么值填充。
from torchvision import transforms from PIL import Image padding_img = transforms.Pad(padding=10, fill=0) img = Image.open('test.jpg') print(type(img)) print(img.size) padded_img=padding(img) print(type(padded_img)) print(padded_img.size) #output: <class 'PIL.PngImagePlugin.PngImageFile'> (10, 10) <class 'PIL.Image.Image'> (30, 30) #由於上下左右都要填充10個像素,所以填充后的size是(30,30)
8. 對Tensor進行變換。
class torchvision.transforms.Normalize(mean, std)
給定均值和方差,將會把Tensor正則化。即Normalized_image=(image-mean)/std。
9.Conversion Transforms
class torchvision.transforms.ToTensor
把一個取值范圍為[0,255]的PIL.Image或者shape為(H,W,C)的numpy.ndarray,轉換為形狀為
[C,H,W],取值范圍是[0,1.0]的torch.FloadTensor.
data = np.random.randint(0, 255, size=300) img = data.reshape(10,10,3) print(img.shape) img_tensor = transforms.ToTensor()(img) # 轉換成tensor print(img_tensor)
10. class torchvision.transforms.ToPILImage
將shape為(C,H,W)的Tensor或者shape為(H,W,C)的numpy.ndarray轉換為PIL.Image,值不變。
11. 通用變換
class torchvision.transforms.Lambda(lambd); 使用lambd作為轉換器。