这里用一些实际代码来举例,Transforms中常用方法的一些使用(ToTensor、Normalize、Resize、Compose、RandomCrop等等)
示例代码如下:
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
writer = SummaryWriter("logs")
img = Image.open(r"D:pycharm_professionalPycharmProjectslearning_pytorchimagesbaby.jpg")
# ToTensor
# 生成类对象
trans_totensor = transforms.ToTensor()
# 往类对象中传入参数并返回结果
img_tensor = trans_totensor(img)
# 将结果添加到事件当中
writer.add_image("ToTenser",img_tensor)
# Normalize
print(img_tensor[0][0][0])
# 为什么是传入[0.5,0.5,0.5],因为其有测试图片有三个通道
# 生成类对象
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("Normalize",img_norm)
# Resize
print(img.size)
# 生成类对象
trans_resize = transforms.Resize((512,512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
print(img_resize) #
# resize之后的图像是PIL.Image的数据类型,想要把变化后的图片在tensorboard显示的话,还要将图像转换为tensor的数据类型
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize",img_resize)
# Compose - resize -2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIl -> tensor
trans_compose = transforms.Compose([trans_resize_2,trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize",img_resize_2,1)
# RandomCrop
trans_random = transforms.RandomCrop(512)
trans_compose_2 = transforms.Compose([trans_random,trans_totensor])
for i in range(10):
img_crop = trans_compose_2(img)
writer.add_image("RandomCrop",img_crop,i)
writer.close()
tips
- 其实可以发现哈,ToTensor、Normalize、Resize、Compose的使用方法都是先生成一个对应的类对象,然后再向类对象中传入图片,返回一个结果。
# 示例:
# 生成类对象
trans_totensor = transforms.ToTensor()
# 往类对象中传入参数并返回结果
img_tensor = trans_totensor(img)
# 将结果添加到事件当中
writer.add_image("ToTenser",img_tensor)
- 需要注意的一点就是,在使用一个方法之前一定要弄清楚,这个方法要求的参数类型是什么!一定要注意一个方法的输入是什么类型,输出是什么类型!
# 示例: # Resize print(img.size) # 生成类对象 trans_resize = transforms.Resize((512,512)) # img PIL -> resize -> img_resize PIL img_resize = trans_resize(img) print(img_resize) ## resize之后的图像是PIL.Image的数据类型,想要把变化后的图片在tensorboard显示的话,还要将图像转换为tensor的数据类型 # img_resize PIL -> totensor -> img_resize tensor img_resize = trans_totensor(img_resize) writer.add_image("Resize",img_resize)
- 记住在pycharm中写代码的时候一定要熟练掌握 ctrl + alt 和ctrl + p的使用,应为这两个快捷键可以减少很多的问题
- 还有就是在使用到一个不怎么常用的方法的时候,第一件事你可以想到的就是跳回到源码,看看官方的解释。
总结:
1.关注输入和输出类型
2.多看官方文档
3.不知道返回值的时候:
- print()
- print(type())
- debug



