『PyTorch』学习笔记 1 —— transforms

本文介绍了PyTorch中图像预处理的多种方法,包括Compose和Scriptabletransforms两种方式,详细列举了常用的图像转换类及其功能,如裁剪、翻转、旋转等,并提供了数据增强的灵活操作技巧。
部署运行你感兴趣的模型镜像

在这里插入图片描述


简要介绍:Pytorch 中的图像预处理都跟 transforms 这个工具包有关系,它是一个常用的图像变换工具包。

一、Compose方式

Compose方式,支持链式处理,可以集合多个 transforms 的方法或者类。Compose方式的例子如下:

transforms.Compose([
         transforms.CenterCrop(10), // 剪切为10x10大小
         transforms.ToTensor(), // 像素值转换为0~1
])

二、Scriptable transforms方式

Scriptable transforms方式,通过即时运行的脚本方式实现图像变换。例子图示如下:

transforms = torch.nn.Sequential(
     transforms.CenterCrop(10),
     transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
 )
 scripted_transforms = torch.jit.script(transforms)

当以 script 脚本形式运行时候,transfroms 必须使用 torch.nn.Module 继承类实现链式处理流程的定义与组合。

三、transform 常用图像转换类功能列表

3.1 裁剪 — Crop

  • 中心裁剪: transforms.CenterCrop
    功能:依据给定的 size 中心裁剪。
  • 随机裁剪: transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')
    功能:依据给定的 size 随机裁剪。
  • 随机长宽比裁剪: transforms.RandomResizedCrop(size, scale=(0.08,1.0), ratio=(0.75, 1.333), interpolation=2)
    功能:随机大小,随机长宽比裁剪原始图片,最后将图片 resize 到设定好的 size。
  • 上下左右中心裁剪: transforms.FiveCrop(size)
    功能:对图片进行上下左右以及中心裁剪,获得 5 张图片,返回一个 4D-tensor。
  • 上下左右中心裁剪后翻转: transforms.TenCrop(size, vertical_flip=False)
    功能:对图片进行上下左右以及中心裁剪,然后全部翻转(水平或者垂直),获得 10 张图片,返回一个 4D-tensor。

3.2 翻转和旋转 — Flip and Rotation

  • 依概率 p 水平翻转: transforms.RandomHorizontalFlip(p=0.5)
    功能:依据概率 p 对 PIL 图片进行水平翻转。
  • 依概率 p 垂直翻转: transforms.RandomVerticalFlip(p=0.5)
    功能:依据概率 p 对 PIL 图片进行垂直翻转。
  • 随机旋转: transforms.RandomRotation(degrees, resample=False, expand=False, center=None)
    功能:依据 degrees 随机旋转一定角度。

3.3 图像变换

  • resize: transform.Resize(size, interpolation=2)
    功能:重置图像分辨率。
    其中,interpolation — 插值方式,默认为 PIL.Image.BILINEAR
  • 标准化: transforms.Normalize(mean, std)
    功能:对数据按通道进行标准化,即先减均值,再除以标准差,注意是 h*w*c
  • 转为 tensor,并归一化至[0-1]: transforms.ToTensor
    功能:将 PIL Image 或者 ndarray 转换为 tensor,并且归一化到 [0, 1] 。
    注意:归一化至 [0, 1] 是直接除以 255,若自己的 ndarray 数据尺度有变化,则需要针对性修改。
  • 填充:transforms.Pad(padding, fill=0, padding_mode='constant')
    功能:对图像进行填充。
  • 修改亮度、饱和度和对比度: transforms.ColorJitter(brightness=0, constract=0, saturation=0, hue=0)
  • 转灰度图: transforms.Grayscale(num_output_cahnnels=1)
    功能:将图片转换为灰度图。
  • 依概率 p 转为灰度图: transforms.RandomGrayscale(p=0.5)
  • 线性变换: transforms.LinearTransformation(transformation_matrix)
    功能:对矩阵做线性变化处理,可用于白化处理!
  • 仿射变换: transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)
  • 转 PILImage: transforms.ToPILImage(mode=None)
    功能:将 tensor huozhe ndarray 的数据转换为 PIL Image 类型数据。
  • 随机高斯模糊: transforms.GaussianBlur

3.4 对 transforms 操作,使数据增强更灵活

  • transforms.RandomChoice(transforms)
    从给定的一系列 transforms 中选一个进行操作。
  • transforms.RandomApply(transforms, p=0.5)
    给一个 transforms 加上概率,依概率进行操作。
  • transforms.RandomOrder
    将 transforms 中的操作随机打乱。

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

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

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

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

libo-coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值