Pytorch中的图像增广transforms类和预处理方法
作者:北岛寒沫 发布时间:2022-09-10 22:21:06
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对象。其中,mean
和std
参数分别代表图像各通道像素值的平均值和标准差。在这里,我们以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)。
来源:https://blog.csdn.net/hanmo22357/article/details/129765962
猜你喜欢
- 本文实例为大家分享了python批量下载抖音视频的具体代码,供大家参考,具体内容如下知识储备:博主是在Pycharm下进行的 文件夹:dou
- 人工智能是一种未来性的技术,目前正在致力于研究自己的一套工具。一系列的进展在过去的几年中发生了:无事故驾驶超过300000英里并在三个州合法
- 在利用javascript内置的eval函数,将json格式的字符串转换成JS对象时,需要用一对"()"先将该字符串包住
- 关于DHT协议DHT协议作为BT协议的一个辅助,是非常好玩的。它主要是为了在BT正式下载时得到种子或者BT资源。传统的网络,需要一台中央服务
- 1. 使用.logfile 方法#!/usr/bin/env pythonimport pexpectimport syshost=&quo
- 该脚本的功能是卸载android手机中安装的所有第三方应用,主要是使用adb shell pm、adb uninstall 命令,所以使用的
- 前言随着人工智能研究的不断兴起,Python的应用也在不断上升,由于Python语言的简洁性、易读性以及可扩展性,特别是在开源工具和深度学习
- 在使用AJAX开发网站时,经常有朋友遇到乱码的问题,而且一下子难以找到解决方法。其实解决AJAX中文乱码问题很简单。1、服务端程序:<
- 接着python里面的xlrd模块详解(一)中我们我们来举一个实例:我们来举一个从Excel中读取账号和密码的例子并调用:&diam
- Python if判断语句中包含ori= 0if i == 1 or 5: print(i)此时并非是判断i是否等于1或者5,而
- 本来是想从网上找找有没有现成的爬取空气质量状况和天气情况的爬虫程序,结果找了一会儿感觉还是自己写一个吧。主要是爬取北京包括北京周边省会城市的
- 三个工具包python操作excel的三个工具包如下,注意,只能操作.xls,不能操作.xlsx。• xlrd: 对excel进行读相关操作
- 本文实例讲述了python通过urllib2获取带有中文参数url内容的方法。分享给大家供大家参考。具体如下:对于中文的参数如果不进行编码的
- 在项目开发中,异常处理是不可或缺的。异常处理帮助人们debug,通过更加丰富的信息,让人们更容易找到bug的所在。异常处理还可以提高程序的容
- 关于string的split 和 join 方法对导入os模块进行os.path.splie()/os.path.join() 貌似是处理机
- TensorFlow是一款优秀的深度学习框架,支持多种常见的操作系统,例如Windows10,Mac Os等等,同时也支持运行在NVIDIA
- pytorch中如何只让指定变量向后传播梯度?(或者说如何让指定变量不参与后向传播?)有以下公式,假如要让L对xvar求导:(1)中,L对x
- 在深度学习或者其他类型的GPU运算过程中,对于GPU信息的监测也是一个非常常用的功能。如果仅仅是使用系统级的GPU监测工具,就没办法非常细致
- type,元类,类,对象简单描述1.type是python内建元类,新建的元类需要继承type2.元类用来创建类,类用来创建对象类的生成方式
- 使用py时可能需要连续运行多条shell 命令1.# coding: UTF-8import sysreload(sys)sys.setde