Pytorch之transforms


一、transforms是什么?

transforms 对应 transform.py 文件。可以理解成一个工具箱,里面定义的各种类和方法,可以处理图片,对图片进行加工,得到我们想要的结果。
在这里插入图片描述
常用的输入图片对象的数据类型

PIL : Image.open()
tensor : ToTensor()
ndarrays: cv.imread()
常用的Transform有:

1.ToTensor() :将图片对象类型转为 tensor
2.Normalize() :对图像像素进行归一化计算
3.Resize():重新设置 PIL Image的大小,返回也是PIL Image格式
4.Compose(): 输入为 transforms类型参数的列表,

关于transforms的导入如下

from torchvisoin import transforms

二、Tensor

1.为何引入tensor类型的变量呢

深度学习引入tensor类型的变量是因为深度学习模型中涉及大量的矩阵运算和张量运算。Tensor(张量)是多维数组的抽象表示,可以表示各种数据类型,如标量(0维张量)、向量(1维张量)、矩阵(2维张量)以及更高维度的数组。在深度学习中,神经网络的参数和输入数据都可以表示为张量,通过张量操作可以高效地进行大规模数据的运算和处理。
Tensor数据类型还包装了神经网络需要的一些参数,如下图。
在这里插入图片描述

Tensor类型的变量具有以下优点:

  1. 支持并行计算:张量运算可以在GPU等并行计算设备上高效执行,加速深度学习模型的训练和推理过程。
  2. 灵活性:张量可以表示不同维度的数据,适用于各种深度学习任务,如图像处理、自然语言处理等。
  3. 数学表达能力:张量操作支持各种数学运算,如矩阵乘法、逐元素操作等,方便构建复杂的神经网络模型。

因此,引入tensor类型的变量可以更好地满足深度学习模型对数据表示和运算的需求,提高模型的效率和灵活性。
在这里插入图片描述

2.代码示例

代码如下(示例):

from torchvision import transforms
from PIL import Image

img_path = "S:/pythonProject/1.png"
img = Image.open(img_path)

tensor_trans = transforms.ToTensor()    #创建工具
tensor_img = tensor_trans(img)      #实验工具转化成tensor
print(tensor_img)

在这里插入图片描述
tensor类数据也可以配合tensorboard输出图片。
writer.add_image(tensor)
在这里插入图片描述

二、Normalize类

normalize 可以直接理解成规范化,标准化亦或是归一化,这里的Normalize工具就是为了实现标准化的。
在这里插入图片描述
先看一下源码的注释:
该类实例化时需要两个参数,第一个参数mean 代表每个通道上所有数值的平均值,第二个参数std 代表每个通道上所有数值的标准差。而图片的channels查看,可以通过print(img)进行查看mode是几个通道。

在这里插from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
img_path = "S:/pythonProject/1.png"
img = Image.open(img_path)
print(img)
tensor_trans = transforms.ToTensor()    #创建工具
tensor_img = tensor_trans(img)      #实验工具转化成tensor
writer.add_image("ToTensor",tensor_img)
print(tensor_img[0][0][0])
#进行归一化Normalize
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])  #实例化normalize工具类
img_norm = trans_norm(tensor_img)   #归一化
writer.add_image("Normalize",img_norm)
writer.close()入代码片

归一化后的效果
在这里插入图片描述

三、Resize

改变图片的尺寸。

在这里插入图片描述
注意:
当如果输入的参数是一个序列,即长和宽两个整数(h,w),则图像会按该长和宽进行resize。
如果输入的参数是一个整数x,将图片短边缩放至x,长宽比保持不变。

这里无论是Image.open()读取的图像信息,亦或者tensor数据都是可以的。

print(img.size) #输出现在图像的尺寸规格
trans_resize = transforms.Resize((512,512))
img_resize = trans_resize(img)
img_resize = tensor_trans(img_resize)
writer.add_image("Resize",img_resize,0)
print(img_resize)
writer.close()

在这里插入图片描述
这里可以明显看出图片的大小已经改变了呢。

三、Compose

compose如单词的意思,组成,其功能就是将resize和tensor这种工具一块组成为一个结合体,实现多步变换。链式编程一步完成。
在这里插入图片描述
下面用代码举例说明

tensor_trans = transforms.ToTensor()    #创建工具
trans_resize = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize,tensor_trans])     #需要注意这里输入的是一个列表[]
res = trans_compose(img)
writer.add_image("resize",res,1) #输出图片
writer.close()

在这里插入图片描述
注意compose列表的顺序,前一个列表元素的输出,是下一个列表元素的输入。顺序的不同可能会导致不同的结果或者报错。但是这里并无这种情况,因为Resize可以处理PIL数据和tensor数据。

三、Random_Crop

随机裁剪:对图像进行随机大小裁剪,如果指定数字后就是按照数字大小进行裁剪。

tensor_trans = transforms.ToTensor()    #创建工具
trans_cup = transforms.RandomCrop(512)  #裁剪大小为512*512,也可直接给出h和w
trans_compose2 = transforms.Compose([trans_cup,tensor_trans])
for i in range(10):
    co2 = trans_compose2(img)
    writer.add_image("randomcup",co2,i)

效果如图所示。
在这里插入图片描述

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值