图片变换工具。
tensor数据类型:tranforms.ToTensor函数解读

tensor数据类型,包含了神经网络所需要的各种参数。
from torch.utils.tensorboard import SummaryWriter from torchvision import transforms from PIL import Image img_path="dataset/hymenoptera_data/train/ants_image/6743948_2b8c096dda.jpg"//获取图片地址 img=Image.open(img_path)//打开图片,赋给img writer=SummaryWriter("logs")//创建日志 tensor_trans=transforms.ToTensor() tensor_img=tensor_trans(img)使用transforms将其转化为tensor格式 writer.add_image("Tensor_img",tensor_img) writer.close()
运行之后就可以tensorboard --logdir="logs"检验一下了。
transforms.Normalize函数解读
transfroms.Normalize(mean, std)
达到效果:
Output [channel] = ( input [channel] - mean [channel] ) / std [channel]
例如: mean=0.5=std, 则(in-0.5)/0.5 = 2*in - 1
若input[0.1],则output[-1,1]
完整可实现代码:
from PIL import Image from torch.utils.tensorboard import SummaryWriter from torchvision import transforms writer=SummaryWriter("logs")//创建日志 img=Image.open("dataset/hymenoptera_data/train/ants_image/0013035.jpg")//打开图片 # ToTensor的使用 trans_totensor=transforms.ToTensor() img_tensor=trans_totensor(img)//转化为tensor格式 writer.add_image("ToTensor",img_tensor)//在board输出 print(img_tensor[0][0][0])//打印一下三通道看看 # Normalize的使用 trans_norm=transforms.Normalize([1,3,5],[3,2,1])//值是随便打的 img_norm=trans_norm(img_tensor) print(img_norm[0][0][0]) writer.add_image("normalize",img_norm)//继续在board输出 writer.close()
接着打开tensorboard检验即可。
tansforms.resize函数解读
print(img.size)//原尺寸打印看看 trans_resize=transforms.Resize((512,512)) img_resize=trans_resize(img)//转成512的,但还是PIL文件 img_resize=trans_totensor(img_resize)//转成TENSOR writer.add_image("Resize",img_resize,0)//在tensor打开 print(img_resize)//打印新的,检验
用法之二、
trans_resize_2=transforms.Resize(512) trans_compose=transforms.Compose([trans_resize_2,trans_totensor])//组合用法 img_resize_2=trans_compose(img) writer.add_image("Resize",img_resize_2,1)
transforms.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)
得到随机裁剪的img_crop
学习transforms记得看官方文档,关注输入输出。
不知道返回值,可以print看:
print(type())
附本节完整代码
from PIL import Image from torch.utils.tensorboard import SummaryWriter from torchvision import transforms writer=SummaryWriter("logs") img=Image.open("dataset/hymenoptera_data/train/ants_image/0013035.jpg") # ToTensor的使用 trans_totensor=transforms.ToTensor() img_tensor=trans_totensor(img) writer.add_image("ToTensor",img_tensor) # Normalize的使用 trans_norm=transforms.Normalize([1,3,5],[3,2,1]) img_norm=trans_norm(img_tensor) writer.add_image("normalize",img_norm) # resize的使用 print(img.size) trans_resize=transforms.Resize((512,512)) img_resize=trans_resize(img) img_resize=trans_totensor(img_resize) writer.add_image("Resize",img_resize,0) print(img_resize) # resize的第二种使用,compose trans_resize_2=transforms.Resize((512,512))# PIL ->PIL 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(500,1000) 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()