Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解

【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解

作者头像
机器学习炼丹术
发布于 2020-09-14 07:53:33
发布于 2020-09-14 07:53:33
1.5K0
举报

参考目录:

  • 1 基本函数
    • 1.1 Compose
    • 1.2 RandomChoice
    • 1.3 RandomOrder
  • 2 PIL上的操作
    • 2.1 中心切割CenterCrop
    • 2.2 随机切割RandomCrop
    • 2.3 随机比例切割
    • 2.4 颜色震颤ColorJitter
    • 2.5 随机旋转RandomRotation
    • 2.6 灰度化Grayscale
    • 2.7 size
    • 2.8 概率随机(常用)
  • 3 Tensor上的操作
    • 3.1 标准化Normalize
  • 4 PIL,Tensor转换函数
    • 4.1 ToPILImage
    • 4.2 ToTensor
  • 5 案例代码分析

老样子,先看官方对torchvision.transforms的介绍:

这个Transforms是常见的图像的转换(包含图像增强等), 然后不同的transforms可以通过Compose函数连接起来(类似于Sequence把网络层连接起来一样的感觉)。后面的是关于图像分割任务了的介绍,因为入门PyTorch主要是图像分类,所以后面先不提了。

1 基本函数

1.1 Compose

【代码】

torchvision.transforms.Compose(transforms)

【介绍】

将不同的transform压缩在一起,这是非常重要的函数

【代码举例】

代码语言:javascript
AI代码解释
复制
transforms.Compose([
     transforms.CenterCrop(10),
     transforms.ToTensor(),
 ])

1.2 RandomChoice

【代码】

torchvision.transforms.RandomChoice(transforms)

【介绍】

用法和Compose相同,是在transform的list中随机选择1个transform进行执行。

1.3 RandomOrder

【代码】

torchvision.transforms.RandomOrder(transforms)

【介绍】

用法和Compose相同,是乱序list中的transform。


之前的课程提到了,在torchvision官方的数据集中,提供的数据是PIL格式的数据,然后我们需要转成FloatTensor形式的数据。因此这里图像增强的处理也分成在PIL图片上操作的和在FloatTensor张量上操作的两种


2 PIL上的操作

2.1 中心切割CenterCrop

【代码】

torchvision.transforms.CenterCrop(size)

【介绍】

以PIL图片中心为中心,进行图片切割。比较常用

【参数】size (sequence or int) – 想要切割出多大的图片。如果size是一个整数,那么就切割一个正方形;如果是一个(height,width)的tuple,那么就切割一个长方形。

【代码举例】

代码语言:javascript
AI代码解释
复制
transforms.Compose([
     transforms.CenterCrop(10),
     transforms.ToTensor(),
 ])

2.2 随机切割RandomCrop

【代码】

torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')

【介绍】

和CenterCrop类似,但是是随机选取中心进行切割的

【参数】

  • size也是可以是int可以是tuple(height,width)
  • padding就是是否对图片进行填充,你可以输入2元组,表示左右填充和上下填充,也可以输入四元组,表示左上右下的填充;
  • pad_if_needed是boolean,一般是True。随机选取如果选取的比较边缘,超出了边界,那么是否进行填充
  • fill (int),你选择填充的是0(黑色),还是255(白色)呢?这个尽在padding_mode='constant'时有效
  • padding_mode表示填充的方法。有四种:'constant', 'edge', 'reflect' or 'symmetric' . 默认是constant常数填充。edge是填充边缘的那个像素值,一般效果比constant强一些,自己做的项目中;reflect和symmetric都是表示以边界为轴进行镜像的填充,区别在于:
    • reflect:[1,2,3,4,5]进行padding=2的时候,那么就是[3,2,1,2,3,4,5,4,3]
    • symmetric:[1,2,3,4,5]进行padding=2的时候,那么就是[2,1,1,2,3,4,5,5,4]
    • 区别是否重复边界的哪一个元素。两种方法差别不大。

2.3 随机比例切割

【代码】

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

【介绍】

这个比较有意思,随机大小切割图片,然后再resize到设置的size大小。

参数中scale控制切割图片的大小是原图的比例,然后ratio控制切割图片的高宽比(纵横比),默认是从3/4 到 4/3。切割完成后再resize到设置的size大小。这个方法一般用在训练inception网络。

2.4 颜色震颤ColorJitter

【代码】

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

【介绍】

随机修改亮度brightness,对比度contrast, 饱和度saturation,色相hue

【参数】

  • brightness (float or tuple (min, max)) – 如果输入是一个float,那么建议在选取一个小于1的浮点数。亮度系数会从区间
[max(0, 1 - brightness), 1 + brightness]

均匀选取,如果我使用这个,我设置brightness是0.1的话,那么这个系数就是

[0.9,1.1]

之间随机选取。如果输入时一个tuple的话,那么就是在

[min,max]

中选取。

  • contrast (float or tuple (min, max)) – 和上面一样,也是一个系数的选取。
  • saturation (float or tuple (min, max)) – 和上面一样,也是一个系数的选取。
  • hue (float or tuple (min, max)) – hue是色相。这里色相的取值应该小于0.5。如果输入时一个float,那么取值应该
0<= hue <= 0.5

,系数在

[-hue, hue]

选取;如果是tuple,那么就是

[min, max]

2.5 随机旋转RandomRotation

【代码】

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

【介绍】

就是随机的按照角度宣传图片

【参数】

  • degrees (int or tuple (min,max)) – 老规矩了,整数旋转角度就是[-int,int],tuple就是[min,max]
  • expand (bool, optional) – True就是让扩大图片,让图片可以包括所有内容(图片旋转的话,四个角的信息其实是旋转到了图片的外面,这个是扩大图片的像素尺寸,如果True在后面还要接一个resize的transforms); 默认是False,旋转后的图片和输入图片是同样的尺寸。
  • center (2-tuple, optional) – 可以设置成非图片中心的旋转
  • fill (n-tuple or int or float) – 设置填充像素值的,默认是0,一般也会选取0.

2.6 灰度化Grayscale

【代码】

torchvision.transforms.Grayscale(num_output_channels=1)

【介绍】

这个函数虽然不重要,但是会用的话可以提高变成速度哈哈。就是把图片转换成灰度的。

【参数】

  • num_output_channels (int) – 正常情况下灰度图片是单通道的,但是这里你可以设置成3,这样的话,会输出3个通道的灰度图片(三个通道的特征值相同),这样的话,你就不用修改torchvision的预训练模型中的输入接口了。(因为之前提到的,预训练模型使用ImageNet训练的,输入都是三通道彩色图)

2.7 size

【代码】

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

【介绍】

把PIL图片resize成指定大小

【参数】

  • size (tuple(height,width) or int) – tuple的话就直接resize成指定大小;int的话,就按照比例,让图片的短边长度变成int大小。
  • interpolation (int, optional) – 插值方法,一般都使用默认的PIL.Image.BILINEAR双重线性插值。

2.8 概率随机(常用)

图像增强有:变成灰度,镜像,翻转,平移,旋转等。

【代码】

代码语言:javascript
AI代码解释
复制
# 变成灰度,输入输出通道数默认相同
torchvision.transforms.RandomGrayscale(p=0.1)
# 随机水平翻转
torchvision.transforms.RandomHorizontalFlip(p=0.5)
# 随机竖直翻转
torchvision.transforms.RandomVerticalFlip(p=0.5)

【参数】

  • p:表示执行这个transform的概率

3 Tensor上的操作

3.1 标准化Normalize

【代码】

代码语言:javascript
AI代码解释
复制
torchvision.transforms.Normalize(mean, std, inplace=False)

【参数】

  • mean和std都是list,[mean_1,...,mean_n]和[std_1,...,std_n],n为通道数。每一个通道都应该有一个mean和std。计算的方法是,就是常用的那种:
output[channel] = \frac{(input[channel] - mean[channel]) } {std[channel]}

4 PIL,Tensor转换函数

4.1 ToPILImage

代码语言:javascript
AI代码解释
复制
torchvision.transforms.ToPILImage(mode=None)

【介绍】

把一个tensor或者np的array转换成PIL。值得注意的是,如果输入时Tensor,那么维度应该是 C x H x W ,如果是numpy的话,是 H x W x C。 (这是一个一般不会出现,但是一旦出现很难想到的问题。)

4.2 ToTensor

代码语言:javascript
AI代码解释
复制
torchvision.transforms.ToTensor

【介绍】

把PIL或者numpy转换成Tensor。PIL和Numpy (格式H x W x C,范围[0,255]),转换成Tensor(格式C x H x W,范围[0,1])

5 案例代码分析

代码语言:javascript
AI代码解释
复制
from PIL import Image
from torchvision import transforms

def loadImage():
    # 读取图片
    im = Image.open("brunch.jpg")
    im = im.convert("RGB")
    im.show()
    return im
im = loadImage()

图片是我在英国留学的时候,有一道菜叫无花果土司,虽然不好吃但是好看,原图:

代码语言:javascript
AI代码解释
复制
#从中心裁剪一个600*600的图像
output = transforms.CenterCrop(600)(im)
output.show()
代码语言:javascript
AI代码解释
复制
# 从中心裁一个长为600,宽为800的图像
output = transforms.CenterCrop((600,800))(im)
output.show()
代码语言:javascript
AI代码解释
复制
#随机裁剪一个600*600的图像
output = transforms.RandomCrop(600)(im)
output.show()
代码语言:javascript
AI代码解释
复制
#随机裁剪一个600*800的图像
output = transforms.RandomCrop((600,800))(im)
output.show()
代码语言:javascript
AI代码解释
复制
#从上、下、左、右、中心各裁一个300*300的图像
outputs = transforms.FiveCrop(300)(im)
outputs[4].show()

类似的图片,就不占用painful了

代码语言:javascript
AI代码解释
复制
#p默认为0.5,这里设成1,那么就肯定会水平翻转
output = transforms.RandomHorizontalFlip(p=1.0)(im)
output.show()
代码语言:javascript
AI代码解释
复制
output = transforms.RandomVerticalFlip(p=1)(im)
output.show()
代码语言:javascript
AI代码解释
复制
#在(-30,30)之间选择一个角度进行旋转
output = transforms.RandomRotation(30)(im)
output.show()
代码语言:javascript
AI代码解释
复制
#在60-90之间选择一个角度进行旋转
output = transforms.RandomRotation((60,90))(im)
output.show()
代码语言:javascript
AI代码解释
复制
output = transforms.Resize((400,500))(im)
output.show()

这个图像一样就尺寸变小了,就不放图了。

代码语言:javascript
AI代码解释
复制
trans = transforms.Compose([transforms.CenterCrop(300),
                            transforms.RandomRotation(30),
                            ])
output = trans(im)
output.show()

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习炼丹术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
玩转pytorch中的torchvision.transforms
文章作者:Tyan 博客:noahsnail.com | CSDN | 简书
Tyan
2020/06/16
3.2K0
玩转pytorch中的torchvision.transforms
Pytorch 中的数据增强方式最全解释
本文主要介绍 Pytorch 中 torchvision.transforms 几个数据增强函数的使用
机器视觉CV
2019/10/28
7.9K0
Pytorch 中的数据增强方式最全解释
Torchvision transforms 总结
Transfoms 是很常用的图片变换方式,可以通过compose将各个变换串联起来 1. class torchvision.transforms.Compose (transforms) 这个类将多个变换方式结合在一起 参数:各个变换的实例对象 举例:
全栈程序员站长
2022/09/12
1.4K0
数据增强之图像变换与自定义transforms
功能:调整亮度、对比度、饱和度、色相。在照片的拍照过程中,可能会由于设备、光线问题,造成色彩上的偏差,因此需要调整这些属性,抵消这些因素带来的扰动。
timerring
2023/07/20
6590
轻松学Pytorch-使用torchvision的transforms实现图像预处理
Pytorch中的图像预处理都跟transforms这个工具包有关系,它是一个常用的图像变换工具包,主要支持方式有两中:
OpenCV学堂
2021/05/10
3.2K0
轻松学Pytorch-使用torchvision的transforms实现图像预处理
数据增强之裁剪、翻转与旋转
数据增强又称为数据增广,数据扩增,它是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力。
timerring
2023/07/20
9600
数据增强之裁剪、翻转与旋转
Pytorch模型训练实用教程学习笔记:一、数据加载和transforms方法总结
最近在重温Pytorch基础,然而Pytorch官方文档的各种API是根据字母排列的,并不适合学习阅读。 于是在gayhub上找到了这样一份教程《Pytorch模型训练实用教程》,写得不错,特此根据它来再学习一下Pytorch。 仓库地址:https://github.com/TingsongYu/PyTorch_Tutorial
zstar
2022/09/20
1.3K0
Pytorch模型训练实用教程学习笔记:一、数据加载和transforms方法总结
PyTorch入门:(三)Transforms的使用
可以看到Tensor数据类型中有很多属性,除了data即数据属性外,还有一些比较重要的属性:
Here_SDUT
2022/08/08
6010
PyTorch入门:(三)Transforms的使用
PyTorch是使用GPU和CPU优化的深度学习张量库——torchvision
CIFAR10 数据集是一个广泛使用的数据集,包含10类彩色图像,每类有6000张图像(5000张训练集,1000张测试集)。下面是如何加载 CIFAR10 的示例:
用户11315985
2024/10/16
5320
PyTorch是使用GPU和CPU优化的深度学习张量库——torchvision
python深度学习库pytorch::transforms练习:opencv,scikit-image,PIL图像处理库比较
项目地址:https://github.com/Oldpan/Pytorch-Learn/tree/master/Image-Processing
老潘
2018/06/21
1.5K0
python深度学习库pytorch::transforms练习:opencv,scikit-image,PIL图像处理库比较
终于来了!Torchvision的图像变换API会扩展到目标检测、图像分割和视频任务
最近,pytorch官网发布了一个消息,TorchVision正不断地增加新的接口:
用户9875047
2022/12/07
7110
pytorch DataLoader(1): opencv,skimage,PIL,Tensor转换以及transforms
本文进入热榜收到了不少关注,所以将本文的代码放在了GitHub上,jupyter的,有需要的自取。
烤粽子
2021/07/07
2.2K0
pytorch DataLoader(1): opencv,skimage,PIL,Tensor转换以及transforms
PIL Image与tensor在PyTorch图像预处理时的转换
PIL(Python Imaging Library)是Python中最基础的图像处理库,而使用PyTorch将原始输入图像预处理为神经网络的输入,经常需要用到三种格式PIL Image、Numpy和Tensor,其中预处理包括但不限于「图像裁剪」,「图像旋转」和「图像数据归一化」等。而对图像的多种处理在code中可以打包到一起执行,一般用transforms.Compose(transforms)将多个transform组合起来使用。如下所示
SL_World
2021/09/18
4.5K0
PyTorch 1.0 中文文档:torchvision.transforms
transforms包含了一些常用的图像变换,这些变换能够用Compose串联组合起来。另外,torchvision提供了torchvision.transforms.functional模块。functional可以提供了一些更加精细的变换,用于搭建复杂的变换流水线(例如分割任务)。
ApacheCN_飞龙
2022/05/07
2010
数据读取与数据扩增方法
https://tianchi.aliyun.com/competition/entrance/531795/introduction
Datawhale
2020/06/16
1.7K0
数据读取与数据扩增方法
【Pytorch】笔记三:数据读取机制与图像预处理模块
疫情在家的这段时间,想系统的学习一遍 Pytorch 基础知识,因为我发现虽然直接 Pytorch 实战上手比较快,但是关于一些内部的原理知识其实并不是太懂,这样学习起来感觉很不踏实, 对 Pytorch 的使用依然是模模糊糊, 跟着人家的代码用 Pytorch 玩神经网络还行,也能读懂,但自己亲手做的时候,直接无从下手,啥也想不起来, 我觉得我这种情况就不是对于某个程序练得不熟了,而是对 Pytorch 本身在自己的脑海根本没有形成一个概念框架,不知道它内部运行原理和逻辑,所以自己写的时候没法形成一个代码逻辑,就无从下手。这种情况即使背过人家这个程序,那也只是某个程序而已,不能说会 Pytorch, 并且这种背程序的思想本身就很可怕, 所以我还是习惯学习知识先有框架(至少先知道有啥东西)然后再通过实战(各个东西具体咋用)来填充这个框架。而「这个系列的目的就是在脑海中先建一个 Pytorch 的基本框架出来, 学习知识,知其然,知其所以然才更有意思 ;)」。
阿泽 Crz
2020/08/28
2.3K0
【Pytorch】笔记三:数据读取机制与图像预处理模块
「深度学习一遍过」必修10:pytorch 框架的使用
CenterCrop,ColorJitter,FiveCrop,Grayscale,Pad,RandomAffine,RandomApply, RandomCrop,RandomGrayscale, RandomHorizontalFlip,RandomPerspective,RandomResizedCrop,RandomRotation, RandomSizedCrop, RandomVerticalFlip, Resize,Scale,TenCrop,GaussianBlur,RandomChoice,RandomOrder, LinearTransformation,Normalize,RandomErasing,ConvertImageDtype, ToPILImage,ToTensor,Lambda
荣仔_最靓的仔
2022/01/10
7050
「深度学习一遍过」必修10:pytorch 框架的使用
小白学PyTorch | 8 实战之MNIST小试牛刀
在这个文章中,主要是来做一下MNIST手写数字集的分类任务。这是一个基础的、经典的分类任务。建议大家一定要跟着代码做一做,源码和数据已经上传到公众号。回复【pytorch】获取数据和源码哦~
机器学习炼丹术
2020/09/14
8560
小白学PyTorch | 8 实战之MNIST小试牛刀
Pytorch的基本介绍及模型训练流程
PyTorch是一个很著名的支持GPU加速和自动求导的深度学习框架,在最近几年收到学术界的热捧,主要是因为其动态图机制符合思维逻辑,方便调试,适合于需要将想法迅速实现的研究者。PyTorch是Torch7团队开发的。Torch是一个开源科学计算框架,可以追溯到2002年纽约大学的项目。Torch的核心在于在构建深度神经网络及其优化和训练,为图像,语音,视频处理以及大规模机器学习问题提供快速高效的计算方案。为了追求更高的速度,灵活性和可扩展性,Torch采用Lua作为它的开发语言,但lua语言的受众比较局限。为了满足当今业界里Python先行(Python First)的原则,PyTorch应运而生,由Facebook人工智能研究员(FAIR)于2017年在GitHub上开源。顾名思义,PyTorch使用python作为开发语言,近年来和tensorflow, keras, caffe等热门框架一起,成为深度学习开发的主流平台之一。
Here_SDUT
2022/09/19
2K0
Pytorch的基本介绍及模型训练流程
pytorch DataLoader(3)_albumentations数据增强(分割版)
本文代码 系列前置文章: pytorch DataLoader(1): opencv,skimage,PIL,Tensor转换以及transforms pytorch DataLoader(2): Dataset,DataLoader自定义训练数据_opencv,skimage,PIL接口 翻译文章: 将Albumentations用于语义分割任务
烤粽子
2021/07/07
2.1K0
pytorch DataLoader(3)_albumentations数据增强(分割版)
推荐阅读
相关推荐
玩转pytorch中的torchvision.transforms
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场