一、transforms的结构和用法
transform主要是对图片进行变换,用到的是transforms.py文件中的类。可以将transforms.py文件比做一个工具箱,文件中的类就是一个个工具,通过工具可以将图片变换成我们需要的形式。
在使用中要特别注意的是:使用工具时 图片的输入和输出格式!
所以在不知道使用某个工具时图片的输入、输出格式,可以通过查阅transforms.py文件的官方文档
二、常见的transforms
1.ToTensor
将图片格式转为tensor类型
输入:PIL 或者 ndarray
输出:tensor
trans_totensor = transforms.ToTensor()# 创建了一个ToTensor的工具
img_tensor = trans_totensor(img)# 使用这个工具
writer.add_image("ToTensor", img_tensor)
2.Normalize
对图像数据进行标准化处理,有助于模型更快收敛,提高模型的性能
具体理解参考文章http://t.csdnimg.cn/kZoz4
输入输出均为tensor类型
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([6, 3, 2], [9, 3, 5])# 工具
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm, 2)
运行结果:
3.Resize
调整图片大小
输入:PIL 或者 ndarray
输出:不变
transforms.Resize(size) 括号中是一个整数,表示将图片的较短边缩放到指定长度size,同时保持长宽比
transforms.Resize([width,height]) 表示将图片的宽度和高度调整到指定尺寸
print(img.size)# 打印图片原始尺寸
trans_resize = transforms.Resize((512, 512))# 创建工具,指定图片缩放大小为[512,512]
img_resize = trans_resize(img)
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)
4.Compose
将多个步骤整合到一起
以使用Resize工具为例:
trans_resize_2 = transforms.Resize(512)# 创建一个Resize工具
# 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)
5.RandomCrop
对图片进行随机裁剪
transforms.RandomCrop(size) 按照[size,size]的尺寸裁剪图片
transforms.RandomCrop([width,height]) 按照[width,height]的尺寸裁剪图片
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)