Transforms的使用

Transforms的使用 本文主要介绍Transforms的几个常用函数本人能力有限如有描述错误欢迎指正。文章目录一、Transforms 是什么1.torchvision.transforms 是一个图像预处理工具箱里面装着各种工具类。2.核心用法三步走3.总结工具箱二、两个主要问题为什么我们需要tensor数据类型transform怎么使用1.tensor数据类型的作用2.transform的使用三、transfroms工具箱的工具1. ToTensor — 类型转换2.Normalize — 标准化Normalize — 标准化3. Resize — 尺寸调整4.Compose — 流水线串联5.RandomCrop — 随机裁剪四、五种 Transform 速查表总结一、Transforms 是什么将图片转化成模型可以使用的数据。1.torchvision.transforms 是一个图像预处理工具箱里面装着各种工具类。原始图片 → [ToTensor] → [Normalize] → [Resize] → 模型就绪的 Tensor2.核心用法三步走第1步创建工具实例tensor_trans transforms.ToTensor()第2步传入图片img_tensor tensor_trans(img) # 等于调用 obj.call(img)第3步得到结果3.总结工具箱transforms.├── ToTensor() # PIL/numpy → Tensor├── Normalize() # 标准化├── Resize() # 尺寸调整├── Compose() # 组合多个 transform├── RandomCrop() # 随机裁剪└── …更多二、两个主要问题为什么我们需要tensor数据类型transform怎么使用1.tensor数据类型的作用tensor神经网络专用的数据类型包含了许多神经网络需要用到的参数。原因说明反向传播Tensor 包含 _grad、_backward_hooksnumpy 没有GPU 加速.to(device) 一键搬家到显卡格式统一全 PyTorch 生态只认 Tensor自动转换像素值 0255 → 01自动归一化到浮点numpy 是给 CPU 做科学计算的Tensor 是给神经网络做深度学习的。2.transform的使用主要使用的是ToTensor 、Normalize、Compose等具体我会在第三部分讲解三、transfroms工具箱的工具1. ToTensor — 类型转换fromPILimportImagefromtorchvisionimporttransforms imgImage.open(cat.jpg)# PIL Imagetensor_transtransforms.ToTensor()tensor_imgtensor_trans(img)# → Tensor, shape: (C, H, W)输入输出PIL Image (H×W×C)Tensor (C×H×W)值域 [0, 1]numpy.ndarray (H×W×C)Tensor (C×H×W)值域 [0, 1]2.Normalize — 标准化Normalize — 标准化公式output[channel] (input[channel] - mean[channel]) / std[channel]我的理解这个就相当于是你概率论里面的标准化可以和之前中心极限定理联系起来理解主要是为了让你的概率符合标准正态分布当然你也可以改均值和标准差去拟合其他的。trans_normtransforms.Normalize([0.5,0.5,0.5],# R, G, B 三通道均值[0.5,0.5,0.5]# R, G, B 三通道标准差)img_normtrans_norm(tensor_img)# 输入必须是 Tensor3. Resize — 尺寸调整方式一指定具体尺寸 (H, W)transforms.Resize((512,512))方式二单个整数 → 短边等比缩放transforms.Resize(256)输入参数效果PIL / Tensor(H, W)强制拉伸/压缩到指定尺寸PIL / Tensorint短边缩放到该值长边等比缩放4.Compose — 流水线串联注意前一步的输出类型 后一步的输入类型trans_composetransforms.Compose([transforms.Resize(256),# ① PIL → PILtransforms.ToTensor(),# ② PIL → Tensortransforms.Normalize(# ③ Tensor → Tensor[0.5,0.5,0.5],[0.5,0.5,0.5])])resulttrans_compose(img)# 一条龙服务串联逻辑图PIL Image ──Resize──▶ PIL Image ──ToTensor──▶ Tensor ──Normalize──▶ Tensor5.RandomCrop — 随机裁剪正方形裁剪transforms.RandomCrop(256)# → (256, 256)矩形裁剪transforms.RandomCrop((200,500))# → (200, 500)四、五种 Transform 速查表类输入输出关键参数ToTensor()PIL / numpyTensorNormalize()TensorTensor[mean], [std]Resize()PIL / Tensor同输入(H,W) 或 intCompose()[transform列表]RandomCrop()PILPILsize 或 (H,W)总结本文主要介绍Transforms的使用包含几种常用的类型如果想要了解更多可以去自行查阅对应的文件。