Loading [MathJax]/jax/input/TeX/jax.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,1brightness),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]=(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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
最强AI芯片英伟达H200深夜发布,Llama2-70B推理提速90%,2024年二季度发货
英伟达在 2023 年全球超算大会(SC2023)上发布了目前世界上最强的 AI 芯片 H200。
机器之心
2023/11/15
5730
最强AI芯片英伟达H200深夜发布,Llama2-70B推理提速90%,2024年二季度发货
老黄深夜炸场,世界最强AI芯片H200震撼发布!性能飙升90%,Llama 2推理速度翻倍,大批超算中心来袭
不仅如此,这两款芯片还是互相兼容的。这意味着,使用H100训练/推理模型的企业,可以无缝更换成最新的H200。
新智元
2023/11/14
5060
老黄深夜炸场,世界最强AI芯片H200震撼发布!性能飙升90%,Llama 2推理速度翻倍,大批超算中心来袭
最强AI芯片英伟达H200发布:HBM容量提升76%,大模型性能提升90%!
11月14日消息,英伟达(Nvidia)于当地时间13日上午在 “Supercomputing 23”会议上正式发布了全新的H200 GPU,以及更新后的GH200 产品线。
芯智讯
2023/11/16
1.2K0
最强AI芯片英伟达H200发布:HBM容量提升76%,大模型性能提升90%!
碾压H100!英伟达GH200超级芯片首秀MLPerf v3.1,性能跃升17%
刚刚,MLCommons发布了MLPerf v3.1版本更新,并加入了两个全新基准:LLM推理测试MLPerf Inference v3.1,以及存储性能测试MLPerf Storage v0.5。
新智元
2023/09/19
4180
碾压H100!英伟达GH200超级芯片首秀MLPerf v3.1,性能跃升17%
算力之战,英伟达再度释放AI“炸弹”
近日,在计算机图形学顶会SIGGRAPH 2023现场,英伟达再度释放深夜“炸弹”,大模型专用芯片迎来升级版本。
科技云报道
2023/08/18
2510
算力之战,英伟达再度释放AI“炸弹”
最强大模型训练芯片H200发布!141G大内存,AI推理最高提升90%,还兼容H100
作为首款搭载HBM3e内存的GPU,内存带宽也从3.35TB/s提升至4.8TB/s,提升43%。
量子位
2023/11/15
1.3K0
最强大模型训练芯片H200发布!141G大内存,AI推理最高提升90%,还兼容H100
对于英伟达的 GH200 ,你可能有些误解 !
NVIDIA GH200 可能是目前市面上最容易被误解的产品之一。同时在阅读相关文章后,我们认识到,对于 NVIDIA 推出的这款极具创新性的产品,可能还需要给大家提供一个基础性的介绍。
通往ICT之路
2024/09/14
5100
对于英伟达的 GH200 ,你可能有些误解 !
英伟达生成式AI超级芯片GH200,两倍H100算力,黄仁勋:它会疯狂推理
当地时间 8 月 8 日,英伟达 CEO 黄仁勋在计算机图形学顶会 SIGGRAPH 2023 上发布了专为生成式 AI 打造的下一代 GH200 Grace Hopper 平台,并推出了 OVX 服务器、AI Workbench 等一系列重磅更新。
机器之心
2023/09/08
6070
英伟达生成式AI超级芯片GH200,两倍H100算力,黄仁勋:它会疯狂推理
英伟达DGX SuperPOD超级计算解决方案
DGX SuperPOD是英伟达推出的一种高度集成的超级计算解决方案,旨在为企业和研究机构提供高性能的人工智能计算能力。这种解决方案允许用户快速构建和部署大规模的GPU集群,以应对复杂的AI和机器学习挑战。
用户7353950
2024/11/23
6740
英伟达DGX SuperPOD超级计算解决方案
英伟达推出最强AI芯片:首发HMB3e,大模型运行能力提升3.5倍!
早在今年5月29日,AI芯片大厂英伟达(NVIDIA) CEO黄仁勋就在COMPUTEX 2023展前发布会上,正式发布了升级版的GH200 Grace Hopper超级芯片,旨在助力开发面向生成式AI语言应用、推荐系统和数据分析工作负载的巨型、下一代模型。
芯智讯
2023/09/07
5020
英伟达推出最强AI芯片:首发HMB3e,大模型运行能力提升3.5倍!
英伟达吞噬世界!新架构超级GPU问世,AI算力一步提升30倍
「这不是演唱会。你们是来参加开发者大会的!」老黄出场时,现场爆发出了巨大的欢呼声。
机器之心
2024/03/19
4350
英伟达吞噬世界!新架构超级GPU问世,AI算力一步提升30倍
全新“核弹”!英伟达B200发布:2080亿个晶体管,FP4算力高达40PFlops!
当地时间3月18日,人工智能(AI)芯片龙头厂商英伟达在美国加州圣何塞召开了GTC2024大会,正式发布了面向下一代数据中心和人工智能应用的“核弹”——基于Blackwell架构的B200 GPU,将在计算能力上实现巨大的代际飞跃,预计将在今年晚些时候正式出货。同时,英伟达还带来了Grace Blackwell GB200超级芯片等。
芯智讯
2024/03/19
4K0
全新“核弹”!英伟达B200发布:2080亿个晶体管,FP4算力高达40PFlops!
老黄携「超级GPU」炸场!E级AI超算性能飞升,买越多越划算,谷歌微软Meta抢先试用
随后,便祭出大杀器——「超级GPU」 GH200,并宣布谷歌云、Meta和微软将率先获得GH200。
AiCharm
2023/06/07
6290
老黄携「超级GPU」炸场!E级AI超算性能飞升,买越多越划算,谷歌微软Meta抢先试用
老黄发布最强AIGC芯片!内存容量暴增近50%,可运行任意大模型,“生成式AI的iPhone时刻已来”
在计算机图形学顶会SIGGRAPH上,老黄宣布了英伟达最新的超级芯片NVIDIA DGX GH200 Grace Hopper。
量子位
2023/09/08
4450
老黄发布最强AIGC芯片!内存容量暴增近50%,可运行任意大模型,“生成式AI的iPhone时刻已来”
英伟达B200打破摩尔定律!老黄顺便公开GPT-4的秘密
时隔两年,英伟达官宣新一代Blackwell架构,为AI带来30倍推理加速。定位直指“新工业革命的引擎” 。
量子位
2024/03/20
2690
英伟达B200打破摩尔定律!老黄顺便公开GPT-4的秘密
老黄狂拼CPU!英伟达掏出800亿晶体管显卡,外加世界最快AI超算Eos
---- 新智元报道   编辑:编辑部 【新智元导读】「拼装」CPU,4纳米显卡,世界最快AI超算,还有游戏开发者的元宇宙。这次,老黄的百宝箱里都有啥? 今天,老黄穿着他的皮衣又来了! 3月22日晚,英伟达GTC 2022开幕。 虽然没有了那个熟悉的厨房,但这次的阵仗反而更加豪华。 英伟达用Omniverse把新总部从内到外渲染了一遍! 800亿个晶体管的Hopper H100 随着拔地而起的平台,英伟达推出了为超算设计的最新AI显卡Hopper H100。 相比于「只有」540亿个晶体管的前辈A
新智元
2022/03/24
9400
【AI系统】GPU 架构回顾(从2018年-2024年)
2018 年 Turing 图灵架构发布,采用 TSMC 12 nm 工艺,总共 18.6 亿个晶体管。在 PC 游戏、专业图形应用程序和深度学习推理方面,效率和性能都取得了重大进步。相比上一代 Volta 架构主要更新了 Tensor Core(专门为执行张量/矩阵操作而设计的专门执行单元,深度学习计算核心)、CUDA 和 CuDNN 库的不断改进,更好地应用于深度学习推理。RT Core(Ray Tracing Core)提供实时的光线跟踪渲染,包括具有物理上精确的投影、反射和折射,更逼真的渲染物体和环境。支持 GDDR6 内存,与 GDDR5 内存相比,拥有 14 Gbps 传输速率,实现了 20%的的效率提升。NVLink2.0 支持 100 GB/s 双向带宽,使特定的工作负载能够有效地跨两个 GPU 进行分割并共享内存。
用户11307734
2024/11/27
7070
给英伟达1.6万亿个晶体管,它就能承托全球互联网流量
大数据文摘授权转载自AI科技评论 作者:包永刚 英伟达(Nvidia)一年一度的GTC大会如期而至,两年一更新的GPU架构Hopper也正式亮相。 今年,NVIDIA创始人兼CEO黄仁勋在英伟达新总部大楼发布了一系列新品,从新架构GPU H100,到Grace CPU 超级芯片,再到汽车、边缘计算的硬件新品,以及全面的软件更新。 英伟达的全新发布再次向外界宣告,英伟达不止是一家芯片公司,而是全栈计算公司。他们正在加强其在AI、汽车等领域的领导力,同时也在努力占领下一波AI浪潮以及元宇宙的先机。 当然,作为一
大数据文摘
2022/03/24
5510
囤 H100 的都成了大冤种!英伟达发布最新 AI 芯片 H200:性能提升 2 倍,成本下降 50%
周一,半导体行业巨头英伟达发布了新一代人工智能芯片 H200,旨在为各种 AI 模型提供训练和部署支持。
深度学习与Python
2023/11/18
4910
囤 H100 的都成了大冤种!英伟达发布最新 AI 芯片 H200:性能提升 2 倍,成本下降 50%
英伟达B200成本约6000美元,售价或高达4万美元!
3月20日消息,据CNBC报道,英伟达(Nvidia)CEO黄仁勋在接受其采访时表示,英伟达计划以 3 万至 4 万美元的价格出售用于 AI 和 HPC 工作负载的全新Blackwell GPU B200。不过,这只是一个大概的价格,因为英伟达更倾向于销售面向数据中心的整体解决方案,而不仅仅是芯片或加速卡本身。与此同时,Raymond James 分析师认为英伟达 B200 芯片的硬件成本约为 6,000 美元。
芯智讯
2024/03/26
6820
英伟达B200成本约6000美元,售价或高达4万美元!
推荐阅读
最强AI芯片英伟达H200深夜发布,Llama2-70B推理提速90%,2024年二季度发货
5730
老黄深夜炸场,世界最强AI芯片H200震撼发布!性能飙升90%,Llama 2推理速度翻倍,大批超算中心来袭
5060
最强AI芯片英伟达H200发布:HBM容量提升76%,大模型性能提升90%!
1.2K0
碾压H100!英伟达GH200超级芯片首秀MLPerf v3.1,性能跃升17%
4180
算力之战,英伟达再度释放AI“炸弹”
2510
最强大模型训练芯片H200发布!141G大内存,AI推理最高提升90%,还兼容H100
1.3K0
对于英伟达的 GH200 ,你可能有些误解 !
5100
英伟达生成式AI超级芯片GH200,两倍H100算力,黄仁勋:它会疯狂推理
6070
英伟达DGX SuperPOD超级计算解决方案
6740
英伟达推出最强AI芯片:首发HMB3e,大模型运行能力提升3.5倍!
5020
英伟达吞噬世界!新架构超级GPU问世,AI算力一步提升30倍
4350
全新“核弹”!英伟达B200发布:2080亿个晶体管,FP4算力高达40PFlops!
4K0
老黄携「超级GPU」炸场!E级AI超算性能飞升,买越多越划算,谷歌微软Meta抢先试用
6290
老黄发布最强AIGC芯片!内存容量暴增近50%,可运行任意大模型,“生成式AI的iPhone时刻已来”
4450
英伟达B200打破摩尔定律!老黄顺便公开GPT-4的秘密
2690
老黄狂拼CPU!英伟达掏出800亿晶体管显卡,外加世界最快AI超算Eos
9400
【AI系统】GPU 架构回顾(从2018年-2024年)
7070
给英伟达1.6万亿个晶体管,它就能承托全球互联网流量
5510
囤 H100 的都成了大冤种!英伟达发布最新 AI 芯片 H200:性能提升 2 倍,成本下降 50%
4910
英伟达B200成本约6000美元,售价或高达4万美元!
6820
相关推荐
最强AI芯片英伟达H200深夜发布,Llama2-70B推理提速90%,2024年二季度发货
更多 >
交个朋友
加入腾讯云官网粉丝站
双11活动抢先看 更有社群专属礼券掉落
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场