数据增强之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 插值。

python 复制代码
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'。

python 复制代码
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% 的概率对图像进行翻转。

python 复制代码
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:**用于归一化的标准差。可以是一个列表或元组,每个通道的标准差。

python 复制代码
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。

python 复制代码
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类(如下)组合在一起使用,实现更好地增强效果。

python 复制代码
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)
相关推荐
MartinYeung59 分钟前
[论文学习]PoisonBench:评估语言模型对投毒偏好数据的脆弱性
人工智能·学习·语言模型
ting94520006 小时前
Humalike X Hermes 深度技术剖析:单指令注入群聊社交智能的底层架构、算法与跨 IM 平台实现
人工智能·算法·架构
涤生大数据6 小时前
一次“没有运行日志”的DolphinScheduler任务失败排查
大数据·数据库·人工智能·状态模式
东风破_6 小时前
Vibe Coding 上头之后,我开始用 SDD 给 AI 编程加一张“施工图”
人工智能·程序员
weixin_403810137 小时前
AI智能体写安卓自动化脚本教程:Cursor/Trae+CLI 实战,自然语言生成代码
android·人工智能·自动化·跨境电商·安卓自动化脚本·多账户运营
深圳雨林凯AI7 小时前
雨林凯AI四方连图介质适配原理:像素密度、纱线纹理与颜色管理怎么协调
人工智能
ZGIAI7 小时前
ZGI 混合检索:汇集候选并统一重排
人工智能·架构
ZGIAI7 小时前
ZGI 运行日志:还原任务与节点状态
人工智能·架构
Scott9999HH7 小时前
2026 中小企业如何破局 AI 搜索?轻量化 GEO 优化系统架构设计与 Python 实战落地
人工智能
玩转单片机与嵌入式7 小时前
深入浅出TinyML 16:FFT、频带能量和MFCC分别适合什么任务?
stm32·深度学习·tinyml