transforms对图像进行改造
最靠谱的办法:根据help文件自行学习transforms包含哪些工具(类)以及如何使用
————————————————————————————————————
自学一个类时,应关注:
1、如何使用
各种工具(类)的使用思路:创建对象(实例化)——>传入参数,调用函数(如有__call__函数,则直接调用对象;如果无~,则调用对应的方法)——>返回需要的结果
2、输入、输出、数据类型
怎么看需要传入什么以及在哪传入?如果__init__需要用到的(除了self和设置了默认值的参数),在创建对象时就须传入;如果是其他各种方法用到的,在调用这些方法时再传入。参数的具体说明在“Args”处看
如果没有写输出的数据类型,可以用print(type(img))
看
3、函数作用是什么
__init__函数和__call__函数:
1、__init__函数:创建一个类的实例化,每当创建一个类的实例对象python解释器都会主动去调用它(使用此函数第一个参数必须为self)
2、__call__函数:使得类实例对象可以像调用普通函数那样使用
__init__是类里面一定会定义的,但call未必
如果类里面包含__call__函数,则可以直接调用对象,括号内传入参数,以使用类里面的方法output = obj(input)
如果类里面无__call__函数,则使用类里面的方法时,需要用.调用方法&传入参数output = obj.method(input)
————————————————————————————————————
transforms里比较常用的类:
1、ToTensor:把图像类型(PIL、ndarray)转为Tensor类型——CHW
import cv2
img = cv2.imread(img_path)
使用cv2.imread读取图片,默认img类型为numpy(使用颜色通道为BGR)
from PIL import Image
img = Image.open(img_path)
使用Image.open读取图片,默认img类型为PIL(使用颜色通道为RGB)
transforms.ToTensor可将上述两种数据类型转为Tensor
为什么需要Tensor数据类型?包装了反向神经网络所需要的一些参数
from PIL import Image
from torchvision import transforms
img_path = r'D:\ai-learning\pytorch\hymenoptera_data\train\bees\16838648_415acd9e3f.jpg'
img = Image.open(img_path)
# 创建对象(实例化)——>传入参数,调用函数——>返回需要的结果
tensor_trans = transforms.ToTensor() # 创建对象
tensor_img = tensor_trans(img)
# __call__是一个魔术工具,可以把实例对象当做函数调用
2、ToPILImage:把图像类型(ndarray、Tensor)转为PIL类型
3、Normalize:将Tensor数据类型的图像的每个通道归一化(实际上是标准化!),\(output = \frac{input-mean}{std}\)
输入为各通道的mean和std
norm_trans = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
norm_img = norm_trans(tensor_img)
4、Resize
创建对象时需传入resize后的(height,width),调用函数时需传入img,img类型可以为PIL或Tensor
resize_trans = transforms.Resize((256, 256))
resize_img = resize_trans(tensor_img)
5、Compose:把多个工具(类)封装为一个流水线的工具包,需要注意前一个的输出和后一个的输入的类型是否匹配!
compose_trans = transforms.Compose([resize_trans, norm_trans])
compose_img = compose_trans(tensor_img)
6、RandomCrop
标签:__,13,img,传入,P10,Pytorch,call,transforms,trans From: https://www.cnblogs.com/xjl-ultrasound/p/18338713