首先简述一下transforms的作用:transforms提供了一系列的工具,使得数据可以在加载到模型之前就被适当地转换和标准化,transforms的作用主要是进行数据预处理和增强,这对于深度学习的模型训练非常重要,因为模型的性能很大程度上要依赖于输入数据的质量和格式。
在使用时要多关注输入和输出的数据类型,还有要多看官方文档,使用ctrl查看相关的参数。
先导入相关库:
from PIL import Image
from numpy.ma import resize
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from py.Transforms import write
Resize的使用:可以改变图片的尺寸
#Resize的使用
print(img.size) #此时img还是PIL类型
trans_resize=transforms.Resize((512,512)) #注意,Resize只能传入PIL类型!!!
#img PIL-->Rsize-->resize PIL resize之后依旧是PIL类型
img_resize=trans_resize(img)
此时的img_resize是PIL类型,由PIL类型经过resize之后依旧是PIL类型。
现在经过totensor,将会由PIL类型变为tensor类型。最后输出是tensor类型,覆盖了之前的PIL类型,因为变量名没改变。
#resize PIL-->totensor-->img resize tensor
img_resize=trans_totensor(img_resize)
print(img_resize) #最后输出是tensor类型,覆盖了
write.add_image("resize",img_resize,0)
write.close()
再说说Composed的使用: 输入一个int,进行等比缩放。要注意,比如transforms.Compose([trans_resize_2,trans_totensor]) 。这里第一个参数是用resize来改变大小,第二个参数是改变数据类型为tensor。
关于使用说明:Compose()中的参数是一个列表。Python中,列表的表示形式为[数据1,数据2...]。在Compose中,数据需要是transforms类型。所以得到,Compose([transforms参数1, transforms参数2,...])
#Composed的使用: 输入一个int,进行等比缩放
trans_resize_2=transforms.Resize(512)
#PIL -> PIL ->tensor
trans_compose=transforms.Compose([trans_resize_2,trans_totensor]) #这里第一个参数是改变大小,第二个参数是改变数据类型
img_resize_2 = trans_compose(img)
write.add_image("resize",img_resize_2,1)
write.close()
以上代码输出效果通过Tensorboard查看:
Random Crop用于对图片随机裁剪。
trans_random=transforms.RandomCrop(300)
#若指定H,W:trans_random=transforms.RandomCrop((300,1000))
trans_compose_2 = transforms.Compose([trans_random,trans_totensor])#同上,第一个参数是用random改变大小,第二个参数是改变类型
for i in range(10): #这里的i代替了add_image的step参数
img_crop=trans_compose_2(img)
write.add_image("RandomCrop",img_crop,i)
write.close()
要注意这里trans_compose_2 = transforms.Compose([trans_random,trans_totensor])。第一个参数是用random随机裁剪改变大小,第二个参数是改变类型。这里的RandomCrop和Compose结合使用了。
如果要指定裁剪的宽高,可以:trans_random=transforms.RandomCrop((300,1000))
效果通过Tensorboard查看:
以上学习内容来自b站小土堆 。
。