精选文章 pytorch中的torchvision.transforms模块详解

pytorch中的torchvision.transforms模块详解

作者:坚硬果壳_ 时间: 2021-02-05 09:43:10
坚硬果壳_ 2021-02-05 09:43:10
【摘要】torchvision.transforms 
torchvision.transforms是pytorch中的图像预处理包,包含了很多种对图像数据进行变换的函数,这些都是在我们进行图像数据读入步骤中必不可少的。 
data_transforms = transforms.Compose([ transforms.RandomResizedCrop(224), transforms.Rand...

torchvision.transforms

torchvision.transforms是pytorch中的图像预处理包,包含了很多种对图像数据进行变换的函数,这些都是在我们进行图像数据读入步骤中必不可少的。

data_transforms = transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ])

transforms.Compose(transforms) 方法是将多种变换组合在一起。上述对data_transforms进行了四种变换,前两个是对PILImage进行的,分别对其进行随机大小和随机宽高比的裁剪,之后resize到指定大小224,以及对原始图像进行随机的水平翻转;

第三个transforms.ToTensor() 将PILImage转变为torch.FloatTensor的数据形式;

而最后一个Normalize则是对tensor进行的。

多种组合变换有一定的先后顺序,处理PILImage的变换方法(大多数方法)都需要放在ToTensor方法之前,而处理tensor的方法(比如Normalize方法)就要放在ToTensor方法之后。

transforms中的函数

1.对Tensor进行变换
torchvision.transforms.Normalize(mean, std):用给定的均值和标准差分别对每个通道的数据进行正则化。具体来说,给定均值(M1,…,Mn),给定标准差(S1,…,Sn),其中n是通道数(一般是3),对每个通道进行如下操作:
output[channel] = (input[channel] - mean[channel]) / std[channel]

比如:原来的tensor是三个维度的,值在[0,1]之间,经过变换之后就到了[-1,1]
计算如下:((0,1)-0.5)/0.5=(-1,1)

torchvision.transforms.ToTensor :把一个取值范围是[0,255]的PIL.Image或者shape为(H,W,C)的numpy.ndarray,转换成形状为[C,H,W],取值范围是[0,1.0]的torch.FloadTensor

torchvision.transforms.ToPILImage:将shape为(C,H,W)的Tensor或shape为(H,W,C)的numpy.ndarray转换成PIL.Image,值不变。

torchvision.transforms.CenterCrop(size)
将给定的PIL.Image进行中心切割,得到给定的size,size可以是tuple,(target_height, target_width)。size也可以是一个Integer,在这种情况下,切出来的图片的形状是正方形。

torchvision.transforms.RandomCrop(size, padding=0)
切割中心点的位置随机选取。size可以是tuple也可以是Integer。

torchvision.transforms.RandomHorizontalFlip
随机水平翻转给定的PIL.Image,概率为0.5。即:一半的概率翻转,一半的概率不翻转。

torchvision.transforms.RandomSizedCrop(size, interpolation=2)
先将给定的PIL.Image随机切,然后再resize成给定的size大小。

torchvision.transforms.Pad(padding, fill=0)
将给定的PIL.Image的所有边用给定的pad value填充。 padding:要填充多少像素 fill:用什么值填充

例子:

from torchvision import transforms
from PIL import Image
padding_img = transforms.Pad(padding=10, fill=0)
img = Image.open('test.jpg')

print(type(img))
print(img.size)

padded_img=padding(img)
print(type(padded_img))
print(padded_img.size)

(10, 10)

(30, 30) #由于上下左右都要填充10个像素,所以填充后的size是(30,30)
勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:202006-3 CCF CSP认证 Markdown渲染器 (可查看渲染后文本-详解大模拟)

下一篇:【Golang】Go的GOROOT,GOPATH,GOBIN和工程project目录结构

您可能感兴趣

  • 一位通信工程师眼中的电信及移动(转)

    我不是电信的人,我只不过是通信厂商的,到今年已经从事通信工作4年了,也就是为中国电信以及现在的移动和联通服务4年了.我作为一个通信工程师就说说我所看到的电信及移动. 1.ISDN. 我认为ISDN纯粹是废物,无丝毫用途,毫无利用价值.可能有点偏激了,但是事实就是这样,ISDN的提法10年前就有了,早已过时的技术.为什么西方大力推行ADSL的时候,中国在大力推行ISDN?我认为还是企业的体制问...

  • LILO启动问题详解

    《LILO启动问题详解》 -------------------------------------------------------------------------------- 原作者:cherami 注释:福西 (12/12/2000 19:01) 1、LILO输出无休止的0101010101...

  • Delphi中的图形显示技巧

    (06/11/1999) 概述   ----目前在许多学习软件、游戏光盘中,经常会看到各种   图形显示技巧,凭着图形的移动、交错、雨滴状、百页窗、积木堆叠等显现方式,使画面变得更为生动活泼,更 能吸引观众。本文将探讨如何在Delphi中实现各种图形显示技巧。   基本原理   ----在Delphi中,实现一副图象的显示是非常简单的,只要在Form中定义一个TImage组件,设置其pic...

  • 在 CTreeCtrl 中枚举系统中的所有窗口!(II)

    发信人: cvisual (贝贝), 信区: VisualC 标  题: 在 CTreeCtrl 中枚举系统中的所有窗口!(II) 发信站: BBS 水木清华站 (Tue May 19 14:37:24 1998)  这是实现文件  // WinList.cpp : implementation file //  #include "stdafx.h" #include "mfc.h" #i...

  • TCP/IP堆栈中的路由漏洞 (BSD,缺陷)

    TCP/IP堆栈中的路由漏洞 (BSD,缺陷)   (转自安络科技)涉及程序: LOOPBACK 和 MULTI-HOMED   描述: TCP/IP 堆栈中的 LOOPBACK 和 MULTI-HOMED 路由漏洞   详细: 在 TCP/IP 堆栈中存在一个漏洞:被用来测试回路或网络接口的信息包即使在机器被配置成不允许路由时也能通过其它接口获得路由。这意味着这些被设计成仅用来在机器内部起...

  • MFC应用程序中的对象通信

    Visual C++基于MFC的可视化编程技术给程序员带来了巨大的方便,程序员可以用很少的精力去关心用户界面的设计,而把主要精力投入到编制具体的事件操作代码。使用MFC AppWizard构造的应用程序框架,主要包括以下几个对象:应用程序对象、文档模板、主框架窗口对象、文档对象、视口对象等,它们各自的任务见表一,它们之间的关系见图一。 表一 应用程序的对象和任务 对象 任务 应用程序对象...

  • 使用SendMessage函数滚动文本框控件中的内容

    在Visual Basic 中, 可 以 通 过 程 序 使 文 本 框 控 件 中 的 内 容 进 行 滚 动, 而 不 用 等 待 用 户 单 击 滚 动 条 控 件, 可 以 通 过 使 用Windows API 的SendMessage 函 数 将 一 个 或 多 个 滚 动 消 息 发 送 到 系 统 来 实 现 上 述 功 能。 在 文 本 框 控 件 中 滚 动 ---- 在...

  • C#重点知识详解(二)

    第二章 内存管理 c#内存管理提供了与java一样的自动内存管理功能,让程序员从繁重的内存管理中摆脱出来,内存管理提高了代码的质量和提高了开发效率。 c#限制了着指针的使用,免除了程序员对内存泄漏的烦恼,但是不是意味着向java程序员一样c#程序员在也不能使用指针代来的好处。微软在设计C#语言时考虑到这个问题,在一方面抛弃指针的同时,另一方面采用折衷的办法,通过一个标志来时程序引入指针。 首...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
pytorch中的torchvision.transforms模块详解介绍:华为云为您免费提供pytorch中的torchvision.transforms模块详解在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多pytorch中的torchvision.transforms模块详解的相关内容。| 移动地址: pytorch中的torchvision.transforms模块详解 | 写博客