一、transforms的结构
1、具体的函数
2、对其的理解
工具箱用法
二、如何使用transforms
from torchvision import transforms
from PIL import Image
img_path = "dataset/train/bees/90179376_abc234e5f4.jpg"
img = Image.open(img_path)
print(img)
# "Convert a PIL Image or ndarray to tensor and scale the values accordingly."
tensor = transforms.ToTensor()
# def __call__(self, pic):
# Args:
# pic (PIL Image or numpy.ndarray): Image to be converted to tensor.
#
# Returns:
# Tensor: Converted image."
img_tensor = tensor(img)
print(img_tensor)
Run Result:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x332 at 0x1FBF445DEE0>
tensor([[[0.0745, 0.0745, 0.0745, ..., 0.0667, 0.0627, 0.0549],
[0.0784, 0.0784, 0.0745, ..., 0.0549, 0.0549, 0.0510],
[0.0784, 0.0784, 0.0784, ..., 0.0510, 0.0549, 0.0510],
...,
[0.1098, 0.1020, 0.0941, ..., 0.6863, 0.6863, 0.6824],
[0.1098, 0.0980, 0.0863, ..., 0.6863, 0.6863, 0.6863],
[0.1020, 0.0941, 0.0941, ..., 0.6863, 0.6863, 0.6863]],[[0.1294, 0.1294, 0.1255, ..., 0.1020, 0.0980, 0.1020],
[0.1333, 0.1333, 0.1255, ..., 0.1020, 0.1020, 0.0980],
[0.1333, 0.1333, 0.1333, ..., 0.1020, 0.1020, 0.0980],
...,
[0.1843, 0.1882, 0.1882, ..., 0.6235, 0.6235, 0.6196],
[0.1843, 0.1843, 0.1882, ..., 0.6235, 0.6235, 0.6235],
[0.1882, 0.1882, 0.1882, ..., 0.6235, 0.6235, 0.6235]],[[0.0000, 0.0000, 0.0078, ..., 0.0275, 0.0235, 0.0235],
[0.0039, 0.0039, 0.0078, ..., 0.0235, 0.0235, 0.0196],
[0.0039, 0.0039, 0.0039, ..., 0.0235, 0.0235, 0.0196],
...,
[0.0039, 0.0039, 0.0000, ..., 0.6667, 0.6667, 0.6627],
[0.0039, 0.0000, 0.0000, ..., 0.6745, 0.6667, 0.6667],
[0.0039, 0.0000, 0.0000, ..., 0.6745, 0.6667, 0.6667]]])
Tensor类型相关参数
、
三、结合TensorBoard讲解Tensorforms常用相关函数
3.1、将图片展示在TensorBoard上-ToTensor()函数
# SummaryWriter是PyTorch的一个类,它是用于将训练过程中的数据和统计信息写入到TensorBoard可视化工具所需的格式中的工具。
# TensorBoard是一个用于可视化和分析深度学习模型的工具,它可以帮助你更好地理解和监控你的模型训练过程。SummaryWriter类允许你将不同的数据类型写入到TensorBoard的事件文件中,然后可以使用TensorBoard来可视化这些数据。from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
img_path = "dataset/train/bees/90179376_abc234e5f4.jpg"
img = Image.open(img_path)
print(img)
# "Convert a PIL Image or ndarray to tensor and scale the values accordingly."
tensor = transforms.ToTensor()
writer = SummaryWriter("logs")
img_tensor = tensor(img)
writer.add_image("Tensor_img",img_tensor)
writer.close()
3.2、Normalize归一化函数
#Normalize
#如果均值较大,则图像的整体亮度会减小,反之亦然。
#较大的标准差会使图像的对比度增加,而较小的标准差会使图像的对比度减小。
tensor_norm = transforms.Normalize([0.6,0.2,0.6],[0.1,1,0.1])
img_norm = tensor_norm(img_tensor)
writer.add_image("Normalize_img",img_norm,6)
writer.close()
3.3、Resize裁剪函数
#Resize
#输入一个参数图片较小边将会匹配到该值,输入两个参数将改变图片的高和宽
train_resize = transforms.Resize((512,512))
#输入为PIL类型,输出为PIL类型
img_resize = train_resize(img)
#通过ToTensor再将PIL转化为tensor类型
img_resize = tensor(img_resize)
writer.add_image("Resize",img_resize,1)
writer.close()
3.4、Compose一系列格式转换
参数列表每一个类型之间前一个输出与后一个输入要对应
#Compose
train_resize2 = transforms.Resize((1024,512))
train_compose = transforms.Compose([train_resize2,tensor])
#依据transforms.Compose()函数参数
#img PIL(原始类型) -> PIL(裁剪后类型) -> Tensor(裁剪完成后再转换类型)
img_resize2 = train_compose(img)
writer.add_image("Resize",img_resize2,2)
3.5、RandomCrop
#RandomCrop-裁剪出一张图片
train_RandomCrop = transforms.RandomCrop((300,300))
img_randomcrop = train_RandomCrop.forward(img)
img_randomcrop = tensor(img_randomcrop)
writer.add_image("RandomCroop",img_randomcrop)
#RandomCrop-裁剪出十张图片
train_RandomCrop1 = transforms.RandomCrop(310)
tensor_randomcrop = transforms.Compose([train_RandomCrop1,tensor])
for i in range(10):
img_crop = tensor_randomcrop(img)
writer.add_image("RandomCroop", img_crop,i)
该方法一般用于数据的增强
。。。。。。
3.6、如何使用函数总结
看官方文档
关注输入与输出类型
看参数含意
有的只给了函数输入类型但没告诉输出类型
print()打印
print(type(*))打印类型
debug,在返回对象下一行设断点,查看返回对象类型