Pytorch中的图像增广transforms类和预处理方法

 更新时间:2023年04月01日 14:33:54   作者:北岛寒沫  
这篇文章主要介绍了Pytorch中的图像增广和预处理方法(transforms类),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1.随机翻转(水平和垂直)

torchvision.transforms.RandomVerticalFlip函数和torchvision.transforms.RandomHorizontalFlip函数是两个可以实现数据增强的函数,可以将输入的图像进行随机垂直翻转和随机水平翻转,从而增加数据集的多样性。

具体来说,torchvision.transforms.RandomVerticalFlip函数可以将输入图像在垂直方向上进行随机翻转,而torchvision.transforms.RandomHorizontalFlip函数可以将输入图像在水平方向上进行随机翻转。这两个函数都可以通过设置参数来控制翻转的概率。

下面是这两个函数的使用方法:

import torch
import torchvision.transforms as transforms

# 定义随机垂直翻转和随机水平翻转的概率
vflip_probability = 0.5  # 随机垂直翻转的概率
hflip_probability = 0.5  # 随机水平翻转的概率

# 定义图像变换
transform = transforms.Compose([
    transforms.RandomVerticalFlip(p=vflip_probability),
    transforms.RandomHorizontalFlip(p=hflip_probability)
])

在上述代码中,我们首先通过transforms.Compose函数定义了一个图像变换的序列,其中包含了随机垂直翻转和随机水平翻转两个操作。

2.随机裁剪缩放

torchvision.transforms.RandomResizedCrop函数可以进行随机裁剪和缩放,从而增加数据集的多样性。在实际使用中,这个函数有许多可调参数,下面是一个更加完整的介绍:

transforms.RandomResizedCrop(
    size,       # 输出图像的大小
    scale=(0.08, 1.0),  # 缩放范围,将输入图像按照该范围内的随机比例缩放
    ratio=(3.0/4.0, 4.0/3.0),   # 长宽比范围,将输入图像按照该范围内的随机比例进行裁剪
    interpolation=2     # 缩放时使用的插值方法,可选1、2、3、4中的一个,默认为PIL.Image.BILINEAR
)

下面是各个参数的详细介绍:

  • size:输出图像的大小,可以是一个整数,表示输出图像的边长,或者是一个二元组,表示输出图像的宽和高。例如,如果设置size=224,则输出图像的大小为 224 × 224 224\times224 224×224;如果设置size=(256,192),则输出图像的大小为 256 × 192 256\times192 256×192。
  • scale:缩放范围,将输入图像按照该范围内的随机比例缩放。该参数是一个二元组,表示缩放比例的范围,例如(0.08,1.0)表示将输入图像缩放到原来的 0.08 0.08 0.08到 1.0 1.0 1.0倍之间的随机比例。默认值为(0.08, 1.0)。
  • ratio:长宽比范围,将输入图像按照该范围内的随机比例进行裁剪。该参数是一个二元组,表示长宽比的范围,例如(3.0/4.0,4.0/3.0)表示将输入图像按照宽高比在 3 / 4 3/4 3/4到 4 / 3 4/3 4/3之间的随机比例进行裁剪。默认值为(3.0/4.0, 4.0/3.0)。
  • interpolation:缩放时使用的插值方法,可选1、2、3、4中的一个,分别表示PIL.Image.NEAREST、PIL.Image.BILINEAR、PIL.Image.BICUBIC和PIL.Image.LANCZOS。默认值为PIL.Image.BILINEAR。

3.随机修改颜色(颜色抖动)

在PyTorch中,torchvision.transforms.RandomColorJitter函数可以用于对图像进行随机颜色抖动,增加数据集的多样性。这个函数可以随机地改变图像的亮度、对比度、饱和度和色相,并且还可以随机地进行灰度化操作。下面是该函数的参数:

transforms.RandomColorJitter(
    brightness=0.1,    # 亮度调整的强度,默认值为0.1
    contrast=0.1,      # 对比度调整的强度,默认值为0.1
    saturation=0.1,    # 饱和度调整的强度,默认值为0.1
    hue=0.1,           # 色相调整的强度,默认值为0.1
    p=0.5,             # 执行颜色抖动的概率,默认值为0.5
)

下面是各个参数的详细介绍:

  • brightness:亮度调整的强度。默认值为0.1。如果设置为0,则不进行亮度调整。
  • contrast:对比度调整的强度。默认值为0.1。如果设置为0,则不进行对比度调整。
  • saturation:饱和度调整的强度。默认值为0.1。如果设置为0,则不进行饱和度调整。
  • hue:色相调整的强度。默认值为0.1。如果设置为0,则不进行色相调整。
  • p:执行颜色抖动的概率。默认值为0.5。如果设置为1,则每个图像都会执行颜色抖动。

4.将图像转化为张量

在PyTorch的torchvision库中,ToTensor函数是一种将PIL Image或numpy.ndarray格式的图像转换为PyTorch Tensor格式的函数。它可以将图像中的像素值转换为0到1之间的标准化数值,并调整图像的通道顺序,使其符合PyTorch模型的输入要求。

ToTensor函数的使用方法如下:

from torchvision.transforms import ToTensor
transform = ToTensor()

一般来说,在使用Compose组合在一起的一组transform中,ToTensor函数应该放在最后一个位置,以便将图像转换为PyTorch Tensor格式的图像,并确保其他所有的transform都在Tensor转换之前完成。

5.标准化操作

在PyTorch的torchvision.transforms库中,Normalize函数是一种对图像进行标准化处理的函数。它可以将图像中的像素值进行归一化处理,使得图像的像素值均值为0,标准差为1,从而增强模型的收敛速度和泛化性能。

Normalize函数的使用方法如下:

from torchvision.transforms import Normalize
transform = Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

在上述代码中,我们首先导入了Normalize函数,并创建了一个名为transform的Normalize对象。其中,meanstd参数分别代表图像各通道像素值的平均值和标准差。在这里,我们以ImageNet数据集的图像均值和标准差为例进行了设置。

需要注意的是,Normalize函数应该在图像转换为PyTorch Tensor格式之后应用,即在ToTensor之后。这是因为Normalize需要对每个通道的像素值进行标准化,而ToTensor函数将图像中的像素值转换为PyTorch Tensor格式后,每个通道的像素值将存储在不同的维度上,因此才需要在ToTensor之后进行标准化处理。

6.同时结合多种增广方法

在PyTorch的torchvision库中,Compose函数是一种将多个数据增强操作组合在一起的函数。它可以将多个数据增强操作按照一定的顺序组合在一起,并将它们作为一个整体应用于数据集中的每个样本。Compose函数可以帮助我们方便地实现复杂的数据增强操作,同时也可以使我们的代码更加简洁和易读。

Compose函数的使用方法如下:

from torchvision.transforms import Compose
from torchvision.transforms import RandomCrop, RandomHorizontalFlip, ToTensor

transform = Compose([
    RandomCrop(32),
    RandomHorizontalFlip(),
    ToTensor()
])

在上述代码中,我们首先导入了Compose函数和其他一些数据增强操作,然后创建了一个名为transform的Compose对象。该Compose对象由三个数据增强操作组成:随机裁剪(RandomCrop),随机水平翻转(RandomHorizontalFlip)和转换为Tensor格式(ToTensor)。

到此这篇关于Pytorch中的图像增广和预处理方法(transforms类)的文章就介绍到这了,更多相关Pytorch图像增广和预处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pycharm专业版远程登录服务器的详细教程

    pycharm专业版远程登录服务器的详细教程

    这篇文章主要介绍了pycharm专业版远程登录服务器的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Pycharm最全报错的原因与解决方法总结(推荐!)

    Pycharm最全报错的原因与解决方法总结(推荐!)

    这篇文章主要给大家介绍了关于Pycharm最全报错的原因与解决方法的相关资料,文中记录了Python各种报错解释及处理方法,属于个人记录型,需要的朋友可以参考下
    2022-07-07
  • Python爬虫实现搭建代理ip池

    Python爬虫实现搭建代理ip池

    这篇文章主要介绍了Python爬虫实现搭建代理ip池,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的工作有所帮助
    2022-06-06
  • python实现多层感知器MLP(基于双月数据集)

    python实现多层感知器MLP(基于双月数据集)

    这篇文章主要为大家详细介绍了python实现多层感知器MLP,基于双月数据集,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 零基础使用Python读写处理Excel表格的方法

    零基础使用Python读写处理Excel表格的方法

    这篇文章主要介绍了Python读写处理Excel表格,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python跨文件调用函数以及在一个文件中执行另一个文件

    Python跨文件调用函数以及在一个文件中执行另一个文件

    这篇文章主要给大家介绍了关于Python跨文件调用函数以及在一个文件中执行另一个文件的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友可以参考下
    2022-12-12
  • 用Q-learning算法实现自动走迷宫机器人的方法示例

    用Q-learning算法实现自动走迷宫机器人的方法示例

    这篇文章主要介绍了用Q-learning算法实现自动走迷宫机器人的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Python实现删除列表首元素的多种方式总结

    Python实现删除列表首元素的多种方式总结

    在Python中,处理列表的操作是日常开发中不可避免的任务之一,其中,删除列表中的元素是一个常见的需求,本文为大家整理了Python中删除列表中的第一个元素的多种方法,需要的可以参考下
    2023-12-12
  • 详解python如何调用C/C++底层库与互相传值

    详解python如何调用C/C++底层库与互相传值

    Python作为一门脚本解释语言,本身又很好的结合C++,所以使用Python开发,在性能要求的地方调用C/C++底层库,这简直是神器。本文详细介绍了Python调用C/C++底层库,互相传值问题,下面一起来看看。
    2016-08-08
  • Python爬取京东商品信息评论存并进MySQL

    Python爬取京东商品信息评论存并进MySQL

    这篇文章主要介绍了Python爬取京东商品信息评论存并进MySQL,文章通过构建mysql数据表展开Python爬取信息存进MySQL的内容,需要的小伙伴可以参考一下
    2022-04-04

最新评论