1、Transforms简介
- Transforms在是计算机视觉工具包torchvision下的包,常用于对图像进行预处理,提高泛化能力。具体有:
- 数据中心化、数据标准化、缩放、裁剪、旋转、翻转、填充、噪声添加、灰度变换、线性变换、仿射变换和亮度、饱和度及对比度变换。
- Transforms的使用结构:
2、Tensor数据类型
- 数据集只有转换为tensor数据类型才能被Transforms中的工具使用。这里使用到了ToTensor类,它可以将PIL Image、numpy.ndarray转换为tensor数据类型。
- 代码案例——将PIL Image转换为tensor数据类型。
- 首先在项目目录中准备好一张图片,并且新建一个python文件。
- 在Transforms.py中输入如下代码,并运行。
-
from torchvision import transforms from PIL import Image img_path = "images/热巴1.jpg" # 相对路径 img = Image.open(img_path) print(img) # PIL Image数据类型 tensor_trans = transforms.ToTensor() # 实例化 tensor_img = tensor_trans(img) # 在括号中按ctrl+p可以查看需要传入什么参数 print(tensor_img) # tensor数据类型
- 可以看到PIL Image已经转换成了tensor数据类型。
-
- 首先在项目目录中准备好一张图片,并且新建一个python文件。
3、常见的Transforms
- ToTensor:将PIL Image、numpy.ndarray转换为tensor数据类型。
- Normalize:对图像像素进行归一化计算,可理解为改变颜色。
- 计算公式:
-
output[channel] = (input[channel] - mean[channel]) / std[channel] # 输出 = 输入 - 均值/ 标准差
-
- 计算公式:
- Resize:重新设置PIL Image的大小,返回的也是PIL Image格式。
- Compose:将不同的Transforms结合在一起。
- 代码案例——先将图片大小进行调整,然后进行归一化计算。将ToTensor、Normalize、Resize返回的tensor数据类型,按顺序输入到Compose中。
- 新建python文件,输入如下代码并运行。
-
from PIL import Image from torch.utils.tensorboard import SummaryWriter from torchvision import transforms writer = SummaryWriter("logs") img_path = "images/热巴1.jpg" img = Image.open(img_path) # ToTensor 转换类型 trans_totensor = transforms.ToTensor() img_tensor = trans_totensor(img) writer.add_image("热巴", img_tensor) # Normalize 归一化 print(img_tensor[0][0][0]) # 0层0行0列的像素 trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) # 参数:均值,标准差 img_norm = trans_norm(img_tensor) print(img_norm[0][0][0]) # 改变后,0层0行0列的像素 writer.add_image("Normalize", img_norm) # Resize 设置大小 print(img.size) # 图片大小 trans_resize = transforms.Resize((512, 512)) img_resize = trans_resize(img) # 返回的还是PIL image print(img.resize) img_resize = trans_totensor(img_resize) # 转化为totensor writer.add_image("Resize", img_resize) # Compose - resize第二种用法 trans_resize_2 = transforms.Resize(512) # 等比缩放 tran_compose = transforms.Compose([trans_resize_2, trans_totensor]) # 参数为数列,进行两种变换 img_resize2 = tran_compose(img) writer.add_image("Compose", img_resize2) writer.close()
- 打开TensorBoard,显示如下。
- ToTensor
- Normalize
- Resize
- Compose
- ToTensor