Transforms在Pytorch中的使用(Pycharm)

Pytorch中Transforms的作用:

在PyTorch中,transforms的作用主要是进行数据预处理和增强。这对于深度学习模型的训练非常重要,因为模型的性能很大程度上依赖于输入数据的质量和格式。transforms提供了一系列的工具,使得数据可以在加载到模型之前被适当地转换和标准化。这些转换可能包括但不限于:

  1. 图像转换:_包括调整大小(resize)、裁剪(crop)、旋转(rotate)、翻转(flip)、改变亮度/对比度等操作。这些操作不仅可以帮助模型在不同的数据变体上训练,从而提高泛化能力,还可以调整图像数据以符合模型的输入要求。
  2. 数据类型转换:_如将图像数据从PIL图像或NumPy数组转换为PyTorch张量(ToTensor),这是模型训练中的必要步骤,因为PyTorch是基于张量运算的。

_
3. 标准化:_通过标准化处理(Normalize),可以将图像数据的每个通道的像素值缩放到给定的均值和标准差,这有助于模型的收敛和提高训练稳定性。

_
4. 数据增强:通过随机的图像转换(如随机裁剪、旋转、翻转等),可以人为地增加数据集的多样性,这是一种有效的减少过拟合和提高模型泛化能力的方法。

PyTorch通过torchvision.transforms模块提供了这些转换操作的实现。这些操作可以单独使用,也可以通过transforms.Compose组合成一个转换流水线。这样,原始数据可以按照预定义的方式被转换和准备,以便于模型的训练和验证。

Transform功能的实现:

数据类型的转换:

解释:

我们知道,在Pytorch图像处理中有许多的函数,它的参数要求被传入的图片类型是Numpy,tensor等等,所以就需要我们使用Transtorms将PIL类型的图片转换成符合要求的类型。

代码实现:

① 导入PIL模块,torchTransforms模块;

from PIl import Image
from torchvisio import transforms

② 导入图片路径,使用open函数打开图像文件,并加载到内存中

img_path = "F:\\Python\\Learn_Pytorch\\dataset\\train\\ants\\5650366_e22b7e1065.jpg"
img = Image.open(img_path)

③ 定义一个ToTensor实例,用于将图像转换为张量

tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)

④ 查看图像的新旧格式

print(type(img))
print(type(tensor_img))

完整代码:
from PIl import Image
from torchvisio import transforms
img_path = "F:\\Python\\Learn_Pytorch\\dataset\\train\\ants\\5650366_e22b7e1065.jpg"
img = Image.open(img_path)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(type(img))
print(type(tensor_img))

代码实现截图:

image.png

可以看出来,图像格式由PIL转换成了 Tensor格式;

图像的标准化处理:

解释:

通过标准化处理(Normalize),可以将图像数据的每个通道的像素值缩放到给定的均值和标准差,这有助于模型的收敛和提高训练稳定性。

代码实现:

① 导入PIL模块,transforms模块,SummaryWriter模块

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

② 创建日志文件,导入图像路径,使用open函数打开图像并存入内存中

writer = SummaryWriter('logs')
img_path = "F:\\Python\\Learn_Pytorch\\dataset\\train\\ants\\5650366_e22b7e1065.jpg"
img = Image.open(img_path)

③ 创建Totensor实例对象,将图像格式进行转换

trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img)

④ 将图像存入日志中

writer.add_image("Totensor", img_tensor) # 第一个参数是日志名称,第二个是你处理过后得到的图像变量

⑤ 调用Normalize

trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)
writer.add_image("Normalize", img_norm)
writer.close()

⑥ 从日志里面进行观察图片的变化

1.打开Pycharm终端,确保是Pytorch环境,不是的话输入 conda activate 虚拟环境名 进入

image.png
conda activate pytorch # 我的虚拟环境名叫pytoch
tensorboard --logdir=logs

等待出现链接,点击链接
image.png

tensorboard日志里面的图像:

image.png

完整代码
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter('logs')
img_path = "F:\\Python\\Learn_Pytorch\\dataset\\train\\ants\\5650366_e22b7e1065.jpg"
img = Image.open(img_path)

trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img)
writer.add_image("Totensor", img_tensor)    # 第一个参数是日志名称,第二个是你处理过后得到的图像变量


trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)
writer.add_image("Normalize", img_norm)
writer.close()

图像的转换(裁剪,调整大小)

解释:

这些操作不仅可以帮助模型在不同的数据变体上训练,从而提高泛化能力,还可以调整图像数据以符合模型的输入要求。

调整大小

代码实现

① 导入PIL模块,transforms模块,SummaryWriter模块

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

② 创建日志文件,导入图像路径,使用open函数打开图像并存入内存中

writer = SummaryWriter('test_resize_logs')
img_path = "F:\\Python\\Learn_Pytorch\\dataset\\train\\ants\\5650366_e22b7e1065.jpg"
img = Image.open(img_path)

③ 创建ToTensor实例对象,将图像格式进行转换

trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img)

④ 将图像存入日志中

writer.add_image("ToTensor", img_tenosr)

⑤ 使用resize

trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)
img_resize = trans_tensor(img_resize)
writer.add_image('Resize', img_resize)
writer.close()

⑥ 进入Tensorboard观察图片变化

image.png

可以看出来图片尺寸确实小了

完整代码
# 导入PIL模块,transforms模块,SummaryWriter模块
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

# 创建日志文件,导入图像路径,使用open函数打开图像并存入内存中
writer = SummaryWriter('test_resize_logs')
img_path = "F:\\Python\\Learn_Pytorch\\dataset\\train\\ants\\5650366_e22b7e1065.jpg"
img = Image.open(img_path)

# 创建ToTensor实例对象,将图像格式进行转换
trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img)

# ④ 将图像存入日志中
writer.add_image("ToTensor", img_tenosr)

# ⑤ 使用resize
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)
img_resize = trans_tensor(img_resize)
writer.add_image('Resize', img_resize)
writer.close()

自由裁剪(随机)

代码实现

① 导入PIL模块,transforms模块,SummaryWriter模块

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

② 创建日志文件,导入图像路径,使用open函数打开图像并存入内存中

writer = SummaryWriter('test_resize_logs')
img_path = "F:\\Python\\Learn_Pytorch\\dataset\\train\\ants\\5650366_e22b7e1065.jpg"
img = Image.open(img_path)

③ 创建ToTensor实例对象,将图像格式进行转换

trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img)

④ 将图像存入日志中

writer.add_image("ToTensor", img_tenosr)

⑤ 使用RandomCrop

trans_random = transforms.RandomCrop(200)
trans_compose = transforms.Compose([trans_random, trans_tensor])
for i in range(10):<br /> img_crop = trans_compose(img)<br /> writer.add_image('RandomCrop', img_crop, i)
writer.close()

⑥开始观察(注意 for循环的意思是随机裁剪了10张):

image.png

完整代码:
# ① 导入PIL模块,transforms模块,SummaryWriter模块
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

# ② 创建日志文件,导入图像路径,使用open函数打开图像并存入内存中
writer = SummaryWriter('test_resize_logs')
img_path = "F:\\Python\\Learn_Pytorch\\dataset\\train\\ants\\5650366_e22b7e1065.jpg"
img = Image.open(img_path)

# ③ 创建ToTensor实例对象,将图像格式进行转换
trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img)

# ④ 将图像存入日志中
writer.add_image("ToTensor", img_tenosr)

# ⑤ 使用RandomCrop
trans_random = transforms.RandomCrop(200)
trans_compose = transforms.Compose([trans_random, trans_tensor])
for i in range(10):
    img_crop = trans_compose(img)
    writer.add_image('RandomCrop', img_crop, i)
writer.close()

全部代码整合:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter('logs')
img_path = "F:\\Python\\Learn_Pytorch\\dataset\\train\\ants\\5650366_e22b7e1065.jpg"
img = Image.open(img_path)

trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img)
writer.add_image("Totensor", img_tensor)    # 第一个参数是日志名称,第二个是你处理过后得到的图像变量


trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)
writer.add_image("Normalize", img_norm)

trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)
img_resize = trans_tensor(img_resize)
writer.add_image('Resize', img_resize)

trans_random = transforms.RandomCrop(200)
trans_compose = transforms.Compose([trans_random, trans_tensor])
for i in range(10):
    img_crop = trans_compose(img)
    writer.add_image('RandomCrop', img_crop, i)
writer.close()
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值