二、torchvision中的transforms,及常见的使用
前置知识:
__call__()是一种magic method,在类中实现这一方法可以使该类的实例(对象)想函数一样被调用- ToTensor类中包含
__call__(self,pic)函数

常见的Transforms:
事实上Transforms中包含了许多类:

以下是一些常见的用法:
1. ToTensor:
- 使用ToTensor创建对象
form PIL import Image
from torchvison import transforms
img_path="hymenoptera_data/train/ants/0013035.jpg"
img=Image.open(img_path)
# 使用ToTensor创建一个对象
tensor_trans=transforms.ToTensor()
# 这里使用了magic function,ToTensor类中包含了__call__()函数,所以可以直接将新建的对象实例当成函数使用,并传入参数
tensor_img=tensor_trans(img)
- 如何读取tensor数据(接着上文)
from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("logs")
writer.add_image("tensor_img",tensor_img)
writer.close()
2. Normalize:


该方法将所输入的tensor类型的图片进行归一化
writer=SummaryWriter("logs")
img_path="..." # 图片的相对路径
img=Image.open(img_path)
print(img)
# ToTensor
trans_totensor=transforms.ToTensor()
img_tensor=trans_totensor(img)
writer.add_image("img_tensor",img_tensor)
# Normalize
print(img_tensor[0][0][0])
trans_norm=transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm=trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("img_norm",img_norm,1)
writer.close()
3.Resize:


# Resize
print(img.size)
trans_resize=transforms.Resize((512,512))
img_resize=trans_resize(img)
# PIL -> resized PIL -> resized tensor
img_resize_tensor=trans_totensor(img_resize)
# PIL -> tensor ->resized tensor (现在的Resize方法进行了优化,可以直接传入tensor数据)
img_resize_tensor1=trans_resize(img_tensor)
# 显示两种方法的图像,结果是一样的
writer.add_image("img_resize_tensor",img_resize_tensor,1)
writer.add_image("img_resize_tensor1",img_resize_tensor1,1)
print(img_resize)
4.Compose
Compose中的参数是一个列表,python中的列表示形式是[数据1,数据2,···]。Compose中,数据需要时transforms类型,所以得到Compose([transforms参数1,transforms参数2,···])

#compose - resize - 2
trans_resize_2=transforms.Resize(512)
#组合起来,按顺序执行
trans_compose=transforms.Compose([trans_resize_2,trans_totensor])
img_resize_2=trans_compose(img)
writer.add_image("img_resize_2_tensor",img_resize_2,1)
Transforms学习总结:
- 关注输入输出类型
- 多看官方文档
- 关注方法需要什么参数
- 不知道返回值时,使用print(),或者是print(type()),或者是debug

浙公网安备 33010602011771号