数据增强之transforms库(torchvision)

transforms 库包含了多种对图像进行处理的方法,主要用于数据加载和预处理过程中,常用于图像分类、目标检测和语义分割等任务。以下是一些常见的transforms库的操作。

1.图像缩放

图像缩放是由Resize 类来实现的,主要用于对图像尺寸进行调整。

Resize类参数如下:

1.size:可以是一个整数、元组或列表。如果是整数,则表示将图像的较小边调整为这个大小,长宽比保持不变;如果是元组或列表 (h, w),则表示将图像调整为指定的高度和宽度。

2.interpolation:插值方法,用于调整图像大小时重新取样像素值,默认是PIL.Image.BILINEAR。

可选的插值方法有:
PIL.Image.NEAREST:最近邻插值。
PIL.Image.BILINEAR:双线性插值。
PIL.Image.BICUBIC:双三次插值。
PIL.Image.LANCZOS:Lanczos 插值。

from torchvision import transforms
from PIL import Image

# 图像路径
image_path = 'image.jpg'

# 创建 Resize 转换对象
resize = transforms.Resize((256, 256))  
# 将图像调整为 256x256


# 读取图像并应用 Resize 转换
img = Image.open(image_path)
resized_img = resize(img)

2.随机裁剪

随机裁剪是由RandomCrop 类来实现的。参数如下:

1.size:指定裁剪后的输出图像尺寸。可以是一个整数,也可以是一个元组 (height, width),表示裁剪后的高度和宽度。

2.padding:(可选)如果设置了 padding,会首先在图像周围填充指定的像素,再进行裁剪。这对于确保裁剪区域不超出图像边界很有用。

3.pad_if_needed:(可选)如果为 True,在需要填充的情况下,会根据 padding_mode 进行填充。

4.fill:(可选)填充的像素值,默认是 0。

5.padding_mode:(可选)填充模式,可选项包括 'constant'、'edge'、'reflect' 和 'symmetric',默认是 'constant'。

from torchvision import transforms
from PIL import Image

# 图像路径
image_path = 'image.jpg'

# 创建 RandomCrop 转换对象
crop = transforms.RandomCrop((224, 224))  
# 随机裁剪为 224x224

# 读取图像并应用 RandomCrop 转换
img = Image.open(image_path)
cropped_img = crop(img)

3.图像翻转

使用RandomHorizontalFlip类和RandomVerticalFlip类来实现图像的水平翻转和垂直翻转。两个类都只有一个参数。如下:

p:翻转概率,默认为 0.5。即有 50% 的概率对图像进行翻转。

from torchvision import transforms
from PIL import Image

# 图像路径
image_path = 'image.jpg'

# 创建 RandomHorizontalFlip 转换对象
horizontal_flip = transforms.RandomHorizontalFlip(p=0.5)  
# 随机水平翻转,概率为 0.5

# 创建 RandomVerticalFlip 转换对象
vertical_flip = transforms.RandomVerticalFlip(p=0.5)  
# 随机垂直翻转,概率为 0.5

# 读取图像并应用翻转转换
img = Image.open(image_path)

# 应用水平翻转
flipped_img_horizontal = horizontal_flip(img)

# 应用垂直翻转
flipped_img_vertical = vertical_flip(img)

4.图像归一化

图像归一化是一种常见的预处理操作,用于将图像的像素值标准化到特定的范围内,以便于模型训练过程中的稳定性和收敛速度。在transforms库中是由Normalize类来实现图像的归一化操作。参数如下:

1.mean:用于归一化的均值。可以是一个列表或元组,每个通道的均值。

2.std:用于归一化的标准差。可以是一个列表或元组,每个通道的标准差。

from torchvision import transforms
from PIL import Image

# 图像路径
image_path = 'image.jpg'

# mean 和 std 的值通常需要根据你的具体数据集来进行调整
mean = [0.485, 0.456, 0.406]
std = [0.229, 0.224, 0.225]

# 创建 Normalize 转换对象
normalize = transforms.Normalize(mean=mean, std=std)

# 读取图像并应用 Normalize 转换
img = Image.open(image_path)
normalized_img = normalize(img)

5.将PIL或numpy数据转化为tensor

ToTensor 类是用于将 PIL 图像或 numpy 数组转换为 tensor。

from torchvision import transforms
from PIL import Image
import numpy as np
import torch

# 图像路径
image_path = 'image.jpg'

# 创建 ToTensor 转换对象
to_tensor = transforms.ToTensor()

# 读取图像并应用 ToTensor 转换

img_pil = Image.open(image_path)  # 读取 PIL 图像
img_tensor = to_tensor(img_pil)   # 将 PIL 图像转换为张量

img_np = np.array(img_pil)   # 将 PIL 图像转换为 numpy 数组
img_tensor_from_np = to_tensor(img_np)   # 将 numpy 数组转换为张量

#如果输入是 PIL 图像,会将图像的像素值范围从 [0, 255] 转换到 [0.0, 1.0],并重新排列通道顺序。
#如果输入是 numpy 数组,会将数组的数据类型转换为 torch.FloatTensor,并调整形状以匹配 PyTorch 张量的格式。

以上就是transforms库中一些常用的数据增强的操作。这些操作可以通过Compose类(如下)组合在一起使用,实现更好地增强效果。

from torchvision import transforms
from PIL import Image

# 创建一个组合的转换操作
composed_transforms = transforms.Compose([
    transforms.Resize((256, 256)),
    transforms.RandomCrop(224),  # 随机裁剪为 224x224
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 应用组合的转换到图像
transformed_img = composed_transforms(img)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值