1. transforms.ToTensor
from torchvision import transforms
from PIL import Image
img_path = '///'
img = Image.open(img_path)
tensor_img = transforms.ToTensor(img)
2. transforms.Normalize
'''
标准化
input[channel] = (input[channel] - mean[channel])/ std[channel]
'''
trans_norm = transforms.Normalize(mean=[0.5, 0.5, 0.5],
std=[0.5, 0.5, 0.5])
trans_norm(img_tensor)
3. transforms.Resize
'''
改变维度
'''
img_tensor = torch.randn((3, 128, 128))
trans_resize = transforms.Resize((256, 256))
img_resize = trans_resize(img_tensor)
print(img_tensor.shape, img_resize.shape)
'''
torch.Size([3, 128, 128]) torch.Size([3, 256, 256])
'''
4. transforms.Pad
'''
class torchvision.transforms.Pad(padding, fill=0, padding_mode=‘constant’)
padding-(sequence or int, optional)
int,上下左右均填充int个
sequence
[a, b],左右填充a列,上下填充b行
[a,b,c,d],则为左,上,右,下。
fill- (int or tuple)
填充的值是什么(仅当padding_mode为constant时有用)。
int时,各通道均填充该值,
当长度为3的tuple时,表示RGB通道需要填充的值。
padding_mode- 填充模式,这里提供了4种填充模式,
1.constant,常量。
2.edge 按照图片边缘的像素值来填充。
3.reflect,? 4. symmetric,?
'''
trans_pad = transforms.Pad(padding=[1,1], fill=0, padding_mode='constant')
trans_pad(torch.randn(2, 1, 1))
'''
tensor([[[ 0.0000, 0.0000, 0.0000],
[ 0.0000, -0.0892, 0.0000],
[ 0.0000, 0.0000, 0.0000]],
[[ 0.0000, 0.0000, 0.0000],
[ 0.0000, 1.1186, 0.0000],
[ 0.0000, 0.0000, 0.0000]]])
'''
5. transforms.Compose
trans = transforms.Compose([transforms.Resize((64, 64))
,transforms.Resize((128))])
trans(torch.randn(3, 25, 25)).shape
'''
torch.Size([3, 128, 128])
'''