pytorch中transforms和Compose理解

本文介绍了如何在PyTorch中使用torchvision.transforms模块进行图形变换,如裁剪、缩放、转换格式等。重点讲解了Compose操作的使用,以及如何结合lambda表达式灵活组合变换步骤。通过实例展示了Compose的组合效果和lambda表达式的便捷性。
摘要由CSDN通过智能技术生成

概述

torchvision.transforms主要是用于常见的一些图形变换(裁剪、旋转等)
Compose就是定义对图片的多个变换的操作,从上往下依次执行。

操作

阅读源码下面这么多操作,这里就不写了,官网和其他博客有写具体用法和含义,按需求找就好了。

__all__ = ["Compose", "ToTensor", "PILToTensor", "ConvertImageDtype", "ToPILImage", "Normalize", "Resize", "Scale",
           "CenterCrop", "Pad", "Lambda", "RandomApply", "RandomChoice", "RandomOrder", "RandomCrop",
           "RandomHorizontalFlip", "RandomVerticalFlip", "RandomResizedCrop", "RandomSizedCrop", "FiveCrop", "TenCrop",
           "LinearTransformation", "ColorJitter", "RandomRotation", "RandomAffine", "Grayscale", "RandomGrayscale",
           "RandomPerspective", "RandomErasing", "GaussianBlur", "InterpolationMode", "RandomInvert", "RandomPosterize",
           "RandomSolarize", "RandomAdjustSharpness", "RandomAutocontrast", "RandomEqualize"]

例子1-transforms操作的使用

from torchvision import transforms
from PIL import Image
# 读取文件
img = Image.open('test.jpg')
print(type(img))
print(img.size)
#定义transforms的操作
padding_img = transforms.Pad(padding=10, fill=0)
#使用操作
padded_img = padding_img(img)
print(type(padded_img))
print(padded_img.size)

test.jpg
30*30的图片
输出结果

<class 'PIL.JpegImagePlugin.JpegImageFile'>
(30, 30)
<class 'PIL.Image.Image'>
(50, 50) #由于上下左右都要填充10个像素,所以填充后的size是(30+10+10,30+10+10)

例子2-Compose的使用

from torchvision import transforms
from PIL import Image
# 读取文件
img = Image.open('test.jpg')
print(type(img))
print(img.size)
#定义transforms的操作
padding_img = transforms.Compose([
    transforms.Pad(padding=10,fill=0),
    transforms.Resize((40,40)),
    transforms.ToTensor()
])
#使用操作
padded_img = padding_img(img)
print(type(padded_img))
print(padded_img.size())

输出结果

<class 'PIL.JpegImagePlugin.JpegImageFile'>
(30, 30)
<class 'torch.Tensor'>
torch.Size([3, 40, 40])

可以看到将50,50的图片变为40,40的图片,并转化为tensor类型,由于RGB图片,为三通道,所以torch.Size为([3, 40, 40])

例子3-Compose结合lambda表示式的使用

from torchvision import transforms
from PIL import Image
#定义transforms的操作
padding_img = transforms.Compose([
    # lambda表达式读取文件,string path -> image
    lambda x: Image.open(x).convert('RGB'),
    transforms.Pad(padding=10,fill=0),
    transforms.Resize((40,40)),
    transforms.ToTensor()
])
#使用操作
padded_img = padding_img('test.jpg')
print(type(padded_img))
print(padded_img.size())

输出结果

<class 'torch.Tensor'>
torch.Size([3, 40, 40])

可以看到lambda表达式得到图片后,会传递给下面的操作继续执行,而此时也只需要根据lambda表示x的类型,输入相应的值,即可。

### 回答1: PyTorchtransforms模块是用于数据预处理和数据增强的工具。它提供了一系列常用的数据变换方法,如随机裁剪、随机旋转、随机翻转、归一化等。transforms模块可以应用于图像、文本、音频等数据类型。 使用transforms模块,需要先将数据转换为torchvision的数据集格式,然后使用transforms.Compose()方法将多个数据变换方法组合起来,最后使用torch.utils.data.DataLoader()方法加载数据集。 例如,对于图像数据,可以使用以下代码进行数据预处理和数据增强: ``` import torchvision.transforms as transforms # 定义数据变换方法 transform = transforms.Compose([ transforms.RandomResizedCrop(224), # 随机裁剪 transforms.RandomHorizontalFlip(), # 随机翻转 transforms.ToTensor(), # 转换为张量 transforms.Normalize(mean=[.485, .456, .406], std=[.229, .224, .225]) # 归一化 ]) # 加载数据集 train_dataset = torchvision.datasets.ImageFolder(root='train/', transform=transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True) ``` 以上代码,定义了一个数据变换方法transform,包括随机裁剪、随机翻转、转换为张量和归一化。然后使用ImageFolder方法加载数据集,并将transform作为参数传入。最后使用DataLoader方法加载数据集,设置batch_size和shuffle参数。 使用transforms模块可以方便地进行数据预处理和数据增强,提高模型的泛化能力和准确率。 ### 回答2: PyTorch深度学习领域的热门框架之一,而transforms则是PyTorch一个常用的数据预处理模块。transforms可以用来完成对数据的预处理、增广等操作,可以帮助我们改善模型训练的结果。本文将回答pytorchtransforms的用法。 一、transforms的介绍 在PyTorchtransforms位于torchvision.transforms模块,是对图像进行转换的一种预处理操作。transforms可以在图像被送入模型之前对其进行多种处理。通过transforms,我们可以对图像进行裁切、缩放、旋转、翻转等操作,还能进行图像亮度、色彩、对比度等操作。这些操作对于深度学习任务非常重要,它们可以减少网络的训练误差,加快训练速度,提高模型的鲁棒性和泛化性能。 二、transforms的使用 transforms的使用非常简单。我们只需要从torchvision.transforms模块导入需要的transforms类,然后将其作为参数传递给torchvision.datasets模块的数据加载函数。 例如,我们可以通过如下方式使用transforms完成图像的随机裁剪操作: ```Python from torchvision import transforms transform = transforms.Compose([ transforms.RandomCrop(224), transforms.ToTensor(), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)) ]) trainset = torchvision.datasets.ImageFolder(root='./data', transform=transform) ``` 在上面的代码,我们首先定义了一个transform对象。该对象包含三个操作:随机裁剪、将PIL图像转换为PyTorch的张量表示以及归一化处理。这些操作首先会被执行,并最终返回一个图像张量,该张量可以传递给模型进行训练。 三、transforms的常用操作 1. ToTensor 将PIL图像转换成PyTorch的Tensor格式。 2. Resize 将图像调整为指定的尺寸大小。 3. RandomCrop 随机裁剪给定大小的图像。 4. CenterCrop 从图像心裁剪给定大小的图像。 5. RandomRotation 随机旋转图像。 6. RandomHorizontalFlip 随机水平翻转图像。 7. RandomVerticalFlip 随机垂直翻转图像。 8. ColorJitter 对图像进行颜色抖动。 9. Normalize 对图像进行归一化处理。 10. RandomErasing 随机擦除图像给定大小的区域,用随机像素值代替。 总之,transforms是PyTorch一个强大的预处理工具,它可以帮助我们对图像进行多种操作,从而提高模型的训练效果。通过掌握transforms的用法与参数,我们可以更加方便地对原始数据进行处理和增广,以提高数据的多样性和模型的泛化性。 ### 回答3: PyTorch是一个深度学习框架,提供了许多可用的工具和库,使得数据处理和模型开发变得更为便捷。transforms模块就是其的一个工具,它主要用于对图像进行各种变换,如旋转、翻转、裁剪、缩放、标准化等,以便更好地预处理数据。 transforms模块最常用的方法就是Compose()方法,它能够将多个变换组合在一起形成一个变换pipeline,并按顺序依次执行每个变换。例如,我们想要将图像旋转45度、裁剪出心部分、缩放到指定大小并将像素值标准化,可以通过如下代码实现: ``` from torchvision import transforms transform = transforms.Compose([ transforms.RandomRotation(45), # 随机旋转45度 transforms.CenterCrop(224), # 裁剪出心224*224的部分 transforms.Resize(256), # 缩放到指定大小 transforms.ToTensor(), # 转换为张量 transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) # 标准化像素值 ]) ``` 以上代码我们使用了RandomRotation、CenterCrop、Resize、ToTensor和Normalize这5个transforms方法。其,RandomRotation方法可以随机旋转图像一定角度,CenterCrop方法可以切出心部分,Resize方法可以根据设定大小进行缩放,ToTensor方法可以将图像转换为张量,Normalize方法可以标准化图像的像素值。 transforms模块还有其他很多的方法,包括随机翻转、调整亮度、对比度和饱和度等。使用它们可以根据需要对数据进行各种预处理,提高模型训练的效果。 需要注意的是,在使用transforms的过程,需要保证所有数据的预处理方式一致,否则可能会导致模型训练结果不稳定。同时,还可根据实际情况自定义transforms方法,以适应更复杂的预处理需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值