Pytorch数据增强的方法(图片数据)

本文详细介绍torchvision.transforms模块下的各种图像预处理方法,包括尺寸调整、裁剪、翻转、旋转、颜色变换等,适用于深度学习图像处理任务。
部署运行你感兴趣的模型镜像

位于torchvision.transforms下面。

0 Compose
torchvision.transforms.Compose(transforms)

用法:

transforms.Compose([
 	transforms.CenterCrop(10),
	 transforms.ToTensor(),
])

1 常见变换

1-1 Resize

图像尺寸变化

torchvision.transforms.Resize(size, interpolation=2)

size:输出图像的大小
interpolation : 插值,默认的  PIL.Image.BILINEAR, 一共有4中的插值方法
Image.BICUBIC,PIL.Image.LANCZOS,PIL.Image.BILINEAR,PIL.Image.NEAREST
支持采样的方法包括 :
Image.BICUBIC:三次样条插值
Image.BILINEAR:双线性
Image.NEAREST:最低质量

1-2 标准化

对数据按通道进行标准化,即先减均值,再除以标准差,注意是 hwc

torchvision.transforms.Normalize(mean, std)

参数:

    mean-均值
    std-标准差

1-3 转换为 PILImage

将 tensor 或者 ndarray 的数据转换为 PIL Image 类型数据

torchvision.transforms.ToPILImage(mode=None)

参数:

    mode- 为 None 时,为 1 通道, mode=3 通道默认转换为 RGB, 4 通道默认转换为 RGBA

1-4 转为 Tensor

将 PIL Image 或者 ndarray 转换为 tensor,并且归一化至[0-1]

torchvision.transforms.ToTensor
2 裁剪 Crop

2-1 中心裁剪 CenterCrop

依据给定的 size 从中心裁剪

torchvision.transforms.CenterCrop(size)

2-2 随机裁剪 RandomCrop

依据给定的 size 随机裁剪

torchvision.transforms.RandomCrop(size, padding=0, pad_if_needed=False)

参数:

    padding-此参数是设置填充多少个 pixel。
    pad_if_needed-如果图片小于指定尺寸,是否边缘填充。

2-3 随机长宽比裁剪 RandomResizedCrop

随机大小,随机长宽比裁剪原始图片,最后将图片 resize 到设定好的 size

torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.33), interpolation=2)

参数:

    scale- 随机 crop 的大小区间。
    ratio- 随机长宽比设置
    interpolation- 插值的方法,默认为双线性插值

2-4 上下左右中心裁剪 FiveCrop

对图片进行上下左右以及中心裁剪,获得 5 张图片,返回一个 4D-tensor

torchvision.transforms.FiveCrop(size)

2-5 上下左右中心裁剪后翻转 TenCrop

对图片进行上下左右以及中心裁剪,然后全部翻转(水平或者垂直),获得 10 张图
片,返回一个 4D-tensor。

torchvision.transforms.TenCrop(size, vertical_flip=False)

参数:

    vertical_flip (bool) - 是否垂直翻转,默认为 flase,即默认为水平翻转
3 翻转和旋转(Flip & Rotation)

3-1 随机水平翻转 RandomHorizontalFlip

依据概率 p 对 PIL 图片进行水平翻转

torchvision.transforms.RandomHorizontalFlip(p=0.5)

参数:

    p- 概率,默认值为 0.5

3-2 随机垂直翻转 RandomVerticalFlip

依据概率 p 对 PIL 图片进行垂直翻转

torchvision.transforms.RandomVerticalFlip(p=0.5)

参数:

    p- 概率,默认值为 0.5

3-3 随机旋转 RandomRotation

依 degrees 随机旋转一定角度

torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None)

参数:

    degress- 若为单个数,如 30,则表示在(-30, +30)之间随机旋转;若为 sequence,如(30, 60),则表示在 30-60 度之间随机旋转。
    resample- 重采样方法选择,可选NEAREST, BILINEAR, BICUBIC,默认为NEAREST
    expand- True:填满输出图片,False:不填充。
    center- 可选为中心旋转还是左上角旋转。默认中心旋转
4 图像变换

4-1 亮度对比度饱和度变换

修改亮度、对比度和饱和度

torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)

参数:

    brightness - [max(0, 1 - brightness), 1 + brightness]
    contrast - [max(0, 1 - contrast), 1 + contrast]
    saturation - [max(0, 1 - saturation), 1 + saturation]
    hue - [-hue, hue] && 0<=hue<= 0.5

4-2 转灰度图

将图片转换为灰度图

torchvision.transforms.Grayscale(num_output_channels=1)

参数:

    num_output_channels- (int) ,当为 1 时,正常的灰度图,当为 3 时, 3 channel with r ==g == b

4-3 随机转灰度图

依概率 p 将图片转换为灰度图

torchvision.transforms.RandomGrayscale(p=0.1)

4-4 线性变换

对矩阵做线性变化,可用于白化处理

torchvision.transforms.LinearTransformation(transformation_matrix)

参数:

    transformation_matrix (Tensor) – tensor [D x D], D = C x H x W

*Applications: - whitening: zero-center the data, compute the data covariance matrix
[D x D] with np.dot(X.T, X), perform SVD on this matrix and pass it as transformation_matrix.

4-5 仿射变换

仿射变换

torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)

参数:

    degrees-旋转角度
    translate -水平或者垂直移动的范围
    scale - 放缩尺度因子
    resample-重采样方式NEAREST, BILINEAR, BICUBIC
    fillcolor-填充空白区域的颜色

4-6 填充

torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')

参数:

    padding-,此参数是设置填充多少个 pixel。
    fill- (int or tuple) 填充值
    padding_mode- 填充模式,这里ᨀ供了 4 种填充模式, 1.constant 常量。 2.edge 边缘值。 3.reflect 镜像 4. symmetric 对称
5 Lambda

根据用户自定义函数变换。

torchvision.transforms.Lambda(lambd)

参数:

    lambd-用户自定义函数
6 对transform操作

6-1 概率transforms

给一个 transform 加上概率,依概率进行操作

torchvision.transforms.RandomApply(transforms, p=0.5)

6-2 随机transforms

从给定的一系列 transforms 中选一个进行操作

torchvision.transforms.RandomChoice(transforms)

6-3 乱序transforms

将 transforms 中的操作随机打乱

torchvision.transforms.RandomOrder(transforms)

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>嗯,用户想了解PyTorch中的数据处理方法以及与距离计算相关的应用。我需要先回顾一下PyTorch数据处理模块,比如Dataset、DataLoader这些,然后再看看如何结合距离计算,比如Chamfer距离之类的。 首先,PyTorch数据处理部分主要涉及Dataset、DataLoader和Sampler这三个类。Dataset负责定义如何读取数据,用户需要继承并实现__len__和__getitem__方法。DataLoader则负责批量加载数据,支持多进程加速,可以设置批大小、是否打乱数据等参数。Sampler则控制数据采样的策略,比如随机采样或者顺序采样。这部分内容在引用[2]里提到过,所以需要引用一下。 接下来,用户可能想知道如何在实际应用中处理数据。比如在点云处理中,数据通常以Nx3的张量形式存在,表示三维坐标。这时候可能需要自定义Dataset来加载点云数据,然后通过DataLoader进行批量处理。这部分需要结合具体的例子来说明,比如PointCloudDataset类的实现。 然后是距离计算的应用,用户提到了Chamfer距离。根据引用[1],chamferdist库是基于PyTorch实现的,并且使用了CUDA加速。Chamfer距离常用于点云之间的相似性度量,计算每个点到另一个点云中最近点的距离之和。需要说明如何在PyTorch中使用这个库,比如安装方法、代码示例,以及如何与DataLoader结合使用。此外,可能还需要提到其他距离计算,比如欧氏距离或曼哈顿距离,引用[3]中的例子可以用来说明范数计算的方法。 用户可能还想知道在自定义数据集时如何处理距离计算,比如在损失函数中使用Chamfer距离。这时候需要展示一个完整的流程:定义Dataset,加载数据,计算距离,并用于模型训练。同时,需要注意数据预处理的重要性,比如归一化或降采样,以确保计算的稳定性和效率。 还需要考虑性能优化的问题,比如使用GPU加速,确保数据在同一个设备上,避免不必要的计算。此外,数据增强方法可能对距离计算有影响,需要根据具体任务调整。 最后,用户可能有疑问如何结合不同的PyTorch模块来实现完整的流程,比如数据加载、处理、计算距离、模型训练等。因此,提供一个代码示例会有帮助,展示从Dataset到距离计算的整个流程,并解释每个步骤的作用。 总结一下,回答的结构应该是先介绍数据处理方法,再讲距离计算的应用,然后结合实例说明如何实现,最后提到注意事项和优化技巧。需要确保各部分之间有逻辑连接,并且正确引用相关的参考资料。</think>### PyTorch数据处理方法与距离计算应用详解 #### 一、PyTorch数据处理核心方法 1. **Dataset类** - 作用:定义数据加载逻辑,需实现`__len__`和`__getitem__`方法 - 示例代码: ```python from torch.utils.data import Dataset class CustomDataset(Dataset): def __init__(self, data): self.data = data def __len__(self): return len(self.data) def __getitem__(self, idx): return self.data[idx] ``` 引用[2]指出这是PyTorch处理数据的核心模式[^2] 2. **DataLoader类** - 关键参数: ```python DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4) ``` - 支持多进程加速和自动批处理 3. **Sampler策略** - 实现自定义采样逻辑(如平衡采样) #### 二、距离计算实现方式 1. **Chamfer距离** - 安装与使用: ```bash pip install chamferdist ``` 引用[1]说明其支持GPU加速[^1] - 计算示例: ```python from chamferdist import ChamferDistance cloud1 = torch.randn(32, 1000, 3).cuda() # 批处理支持 cloud2 = torch.randn(32, 1500, 3).cuda() chamfer = ChamferDistance() distance = chamfer(cloud1, cloud2) ``` 2. **范数计算** - 曼哈顿范数实现: ```python x = torch.tensor([3.0, -4.0, 1.0]) l1_norm = torch.norm(x, p=1) # 输出8.0 ``` 引用[3]展示了数学表达式$|\mathbf{x}|_1$的计算[^3] #### 三、应用实例:点云配准 1. **数据处理流程** ```python class PointCloudDataset(Dataset): def __init__(self, files): self.clouds = [load_pcd(f) for f in files] def __getitem__(self, idx): return normalize(self.clouds[idx]) # 数据预处理 dataset = PointCloudDataset(pcd_files) loader = DataLoader(dataset, batch_size=16) ``` 2. **训练循环集成** ```python for batch in loader: transformed = model(batch) loss = chamfer(transformed, target_cloud) loss.backward() ``` #### 四、关键注意事项 1. **数据设备一致性** ```python cloud1 = cloud1.to(device) cloud2 = cloud2.to(device) ``` 2. **性能优化技巧** - 使用`pin_memory=True`加速CPU到GPU传输 - 点云降采样预处理(如FPS算法)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值