注:一般用Compose把多个步骤整合到一起:
比如说:
transforms.Compose([
transforms.CenterCrop(10), transforms.ToTensor(),
]) 对里面的操作依次执行
这样就把两个步骤整合到了一起。
实例:
经常看到
transform.ToTensor(), transform.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))
那transform.Normalize()是怎么工作的呢?以上面代码为例,
ToTensor() 能够把灰度范围从0-255变换到0-1之间,
transform.Normalize()则把0-1变换到(-1,1).
具体地说,对每个通道而言,Normalize执行以下操作:
image=(image-mean)/std
其中mean和std分别通过(0.5,0.5,0.5)和(0.5,0.5,0.5)进行指定。原来的0-1最小值0则变成(0-0.5)/0.5=-1,而最大值1则变成(1-0.5)/0.5=1.
from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
img = Image.open("dataset/data/train/ants_image/36439863_0bec9f554f.jpg")
# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)
print(img_tensor[0][0][0])
# Normalize
trans_norm = transforms.Normalize([1, 3, 5], [5, 3, 1])
img_norm = trans_norm(img_tensor)
print(img_norm[0, 0, 0])
writer.add_image("Normalize", img_norm)
# Resize
print(img.size)
tran_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize -> PIL
img_resize = tran_resize(img)
# img_resize PIL -> totensor -> img_resize -> tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)
writer.close()



