*****其实就是学会使用trannsforms的.py文件中的不同class类
主要关注点:*输入 *输出 *作用
图片的输入数据类型: 打开方式:
PIL Image.open( )
tensor ToTensor( )
narrays (矩阵) cv.imread( )
from PIL.Image import Image
from torchvision import transforms #导入两个库
1、python中__call__的用法:
#带下划线的代表是内置函数,
给他一个参数进行调用,内置函数在实例对象调用的时候可以不用.加函数名的形式
2、ToTensor类的使用:
因为tensorboard必须是tensor的数据类型,
from torch.utils.tensorboard import SummaryWriter #这个是使用tensorboard所需要的库,用来写事件文件
writer=SummaryWriter("logs") #tensorboard的使用,需要建一个logs文件夹来存每一次活动产生的事件文件
trans_totensor=transforms.ToTensor() #创建一个ToTensor类的实例对象
img_tensor=trans_totensor(img) #调用类中的方法,输入一个PIL类型的图片,输出一个tensor类型的图片
writer.add_image("ToTensor",img_tensor) #写入事件文件中,标题为ToTensor,一个tensor的数据
writer.close() #关闭事件文件
然后打开terminal终端去查看logs文件就可以查看到了
3、ToPILImage类的使用:
作用:将一个tensor类型或者ndarray类型的图片转换成PIL类型
4、NOrmalize类的使用:
'''归一化的公式:output[channel] = (input[channel] - mean[channel]) / std[channel]'''
trans_norm=transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5]) ##首先必须是一个tensor类型,然后两个参数,均值和标准差
img_norm=trans_norm(img_tensor) #参数是tensor类型的
5、Resize类的使用:
他的输入是一个PIL类型,然后给定尺寸
如果给定的是一个序列的话,比如给了高度和宽度h,w,那么输出的图片尺寸就是指定的这个;
如果给定的是一个整数的话,相当于缩放,图片最小的边会等比匹配
****pycharm小技巧设置(忽略大小写,显示提示)
6、Compose类的使用:
compose一定要关注它的输入和输出!!!
trans_compose=transforms.Compose([trans_resize_2,trans_totensor])
#compose中的参数必须是transforms类型,而且,前面的一个的输出必须和后面的输入数据类型保持一致!!!
#比如,这里Compose的第一个参数trans_resize_2的输入、输出都是PIL类型; 第二个参数trans_totensor,它的输入是PIL类型,输出是tensor类型,这样是满足要求的
因为是从 PIL--->PIL PIL--->tensor
###但是如果两个参数更换位置就会报错
trans_compose=transforms.Compose([trans_totensor,trans_resize_2]) 这个是从PIL--->tensor PIL--->PIL
7、###RandomCrop随即裁剪
trans_random=transforms.RandomCrop(512) #这里只给了一个数据,高和宽都一样
trans_compose_2=transforms.Compose([trans_random,trans_totensor]) #PIL--->PIL--->tensor
for i in range(10): #随便裁剪10个
img_crop=trans_compose_2(img)
writer.add_image("RandomCrop",img_crop,i)
trans_random=transforms.RandomCrop((500,1000)) # 这里给了高和宽标签:10,PIL,tensor,img,常见,totensor,transforms,trans From: https://www.cnblogs.com/ar-boke/p/17114934.html