1. 程式人生 > >pytorch torchvision transform

pytorch torchvision transform

一、對PIL.Image進行變換

class torchvision.transforms.Compose(transforms)

將多個  transform 組合起來使用。

transforms: 由transform構成的列表. 例子:

transforms.Compose([
     transforms.CenterCrop(10),
     transforms.ToTensor(),
 ])


'''
### class torchvision.transforms.Scale(size, interpolation=2)

將輸入的`PIL.Image`重新改變大小成給定的`size`,`size`是最小邊的邊長。
舉個例子,如果原圖的`height>width`,那麼改變大小後的圖片大小是`(size*height/width, size)`。
**用例:**
python
'''
from torchvision import transforms
from PIL import Image
crop = transforms.Scale(12)
img = Image.open('test.jpg')

print(type(img))
print(img.size)

croped_img=crop(img)
print(type(croped_img))
print(croped_img.size)
<class 'PIL.PngImagePlugin.PngImageFile'>
(10, 10)
<class 'PIL.Image.Image'>
(12, 12)

class torchvision.transforms.CenterCrop(size)

將給定的PIL.Image進行中心切割,得到給定的sizesize可以是tuple(target_height, target_width)size也可以是一個Integer,在這種情況下,切出來的圖片的形狀是正方形。

class torchvision.transforms.RandomCrop(size, padding=0)

切割中心點的位置隨機選取。size可以是tuple也可以是Integer

class torchvision.transforms.RandomHorizontalFlip

隨機水平翻轉給定的PIL.Image,概率為0.5。即:一半的概率翻轉,一半的概率不翻轉。

class torchvision.transforms.RandomSizedCrop(size, interpolation=2)

先將給定的PIL.Image隨機切,然後再resize成給定的size大小。

class torchvision.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)
<class 'PIL.PngImagePlugin.PngImageFile'>
(10, 10)
<class 'PIL.Image.Image'>
(30, 30) #由於上下左右都要填充10個畫素,所以填充後的size是(30,30)

二、對Tensor進行變換

class torchvision.transforms.Normalize(mean, std)

給定均值:(R,G,B) 方差:(R,G,B),將會把Tensor正則化。即:Normalized_image=(image-mean)/std

三、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.shape)
print(img_tensor)
(10, 10, 3)
torch.Size([3, 10, 10])

class torchvision.transforms.ToPILImage

shape(C,H,W)Tensorshape(H,W,C)numpy.ndarray轉換成PIL.Image,值不變。

四、通用變換

class torchvision.transforms.Lambda(lambd)

使用lambd作為轉換器。

感謝以下連結提供的參考: