Pytorch - transforms
torchvision.transforms 是 PyTorch 中用于对图像进行常见变换的库,特别适用于数据预处理和数据增强。
(pytorch) D:\code\klc\learn_pytorch>tensorboard --logdir=logs
TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.19.0 at http://localhost:6006/
示例:
详情
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
writer=SummaryWriter("logs")
img=Image.open("images/pytorch.png")
print(img)
# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor=trans_totensor(img)
writer.add_image("ToTensor",img_tensor,0)
# Normalize
print(img_tensor[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])
writer.add_image("Normalize",img_norm,0)
# Resize
print(img.size)
trans_resize=transforms.Resize((512,512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totenso r> img_resize tensor
img_resize =trans_totensor(img_resize)
writer.add_image("Resize",img_resize,0)
print(img_resize)
# Compose - resize - 2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose=transforms.Compose([trans_resize_2,trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize",img_resize_2,1)
#Randomcrop
trans_random=transforms.RandomCrop((500, 1000))
trans_compose_2= transforms.Compose([trans_random,trans_totensor])
for i in range(10):
img_crop = trans_compose_2(img)
writer.add_image("RandomCropHW",img_crop,i)
writer.close()
效果图:

理解transforms
torchvision.transforms 是 PyTorch 中用于对图像进行常见变换的库,特别适用于数据预处理和数据增强。它提供了丰富的图像变换操作,可以单独使用也可以组合使用。下面是一些关于如何学习和使用 transforms 类的基本指导:
基础概念
Transforms: 这些是应用于图像上的各种转换,包括裁剪、缩放、翻转等。它们可以帮助你标准化输入数据,或者通过数据增强来增加模型的泛化能力。
Compose: 由于通常需要将多个转换组合在一起使用,
torchvision.transforms.Compose允许你将多个变换串联起来作为一个整体应用。
常见的 Transforms
Resize: 调整图像大小。
from torchvision import transforms resize = transforms.Resize((256, 256))RandomCrop: 随机裁剪图像。
crop = transforms.RandomCrop(224)CenterCrop: 中心裁剪图像。
center_crop = transforms.CenterCrop(224)ToTensor: 将PIL Image或numpy.ndarray (H x W x C) 转换为tensor(C x H x W),并归一化到[0,1]。
to_tensor = transforms.ToTensor()Normalize: 使用均值和标准差归一化张量图像。
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])RandomHorizontalFlip: 随机水平翻转给定的PIL图像。
flip = transforms.RandomHorizontalFlip(p=0.5)ColorJitter: 随机改变图片的亮度、对比度和饱和度。
jitter = transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2)
如何使用
你可以使用 transforms.Compose 来组合多个变换。例如,创建一个训练集的数据变换管道可能看起来像这样:
transform = transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
])
这个例子中,首先随机调整图像大小并裁剪到224x224像素,然后以一定的概率水平翻转图像,接着将图像转换为张量,并最后归一化。
学习资源
- 查看官方文档:PyTorch 官方提供了详细的 torchvision.transforms 文档,这里包含了所有可用的变换及其参数的详细说明。
