torchvision.transforms包的使用
torchvision.transforms是专门用来对数据进行相关的处理。我们可完成的操作如下:
- 归一化
- PIL.Image / numpy.ndarray 与Tensor的相互转化
- 对PIL.Image进行裁剪、缩放等操作
通常,在使用torchvision.transforms,我们通常使用transforms.Compose将transforms组合在一起。
PIL.Image/numpy.ndarray与Tensor的相互转换
PIL.Image/numpy.ndarray转化为Tensor,常常用在训练模型阶段的数据读取,而Tensor转化为PIL.Image/numpy.ndarray则用在验证模型阶段的数据输出。
import numpy as np
import cv2
import torch
from torchvision import transforms
img_path = "" # here is your img path
transform = transforms.Compose([transforms.ToTensor(), # convert range [0, 255] to range [0, 1]
])# ndarray -> tensor
img = cv2.imread(img_path)
print(type(img)) # <class 'numpy.ndarray'>
print(img.shape) # (300, 300, 3) H, W, C
img1 = transform1(img)
print(type(img1)) # <class 'torch.Tensor'>
print(img1.shape) # torch.Size([3, 300, 300]) C, H, W
print("img max value :",np.max(img), " img1 max value:", torch.max(img1)) # img max value : 255 img1 max value: tensor(1.)# PIL.Image -> tensor
from PIL import Image
img3 = Image.imread(img_path)
print(type(img3)) #<class 'PIL.Image.Image'>
img4 = transform1(img3)
print(type(img4)) # <class 'torch.Tensor'>
print(img4.shape) # torch.Size([3, 300, 300]) C, H, W
img3.show() # present the img
print("img3 max value :",np.max(img4), " img4 max value:", torch.max(img4)) # img3 max value : 255 img4 max value: tensor(1.)# tensor -> PIL.Image
transform2 = transforms.Compose([transforms.ToPILImage()])
img5 = transform2(img4)
img5.show()
归一化
归一化对神经网络的训练是非常重要的,那么我们如何归一化到[-1.0, 1.0]呢?只需要将上面的transform1改为如下所示:
transform1 = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean = [0.5, 0.5, 0.5], std = [0.5, 0.5, 0.5])]
)
transforms.Normalize使用如下公式进行归一化:
channel=(channel-mean)/std
这样一来,我们的数据中的每个值就变成了[-1,1]的数了。
# follow the code above
transform = transforms.Compose([transforms.ToTensor(),]
)
transform1 = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean = [0.5, 0.5, 0.5], std = [0.5, 0.5, 0.5])]
)
img1 = transform(img)
img2 = transform1(img)
print("img1 minimun valus is: ",torch.min(img1)," img2 minimnu valus is: ",torch.min(img2))
# output:
# img1 minimun valus is: tensor(0.) img2 minimnu valus is: tensor(-1.)
PIL.Image的缩放裁剪等操作
使用transforms.RandomCrop来达到目的。
文档中对该函数的其中一句描述如下:Crop the given PIL Image at a random location.
# follow the code abovetransform3 = transforms.Compose([transforms.ToTensor(), transforms.ToPILImage(),transforms.RandomCrop((100,100)),])
img6 = transform3(img3)
print(img6.size) # 100 * 100
img3.show()
img6.show()
参考
图像基本操作
torchvision.transforms包的使用相关推荐
- torchvision.transforms 的CenterCrop():在图片的中间区域进行裁剪
pytorch中transform函数 torchvision.transforms是pytorch中的图像预处理包 一般用Compose把多个步骤整合到一起: 比如说 transforms.Comp ...
- 【pytorch】torchvision.transforms 图像的变换详解;图像的预处理;数据增强
目录 1 torchvision.transforms下的具体操作 1.1 ToTensor() 1.2 Normalize 1.3 RandomRotation 1.4 Resize 1.5 Ran ...
- PyTorch源码解析--torchvision.transforms(数据预处理、数据增强)
PyTorch框架中有一个很常用的包:torchvision torchvision主要由3个子包构成:torchvision.datasets.torchvision.models.torchvis ...
- [Pytorch] torchvision.transforms.ToTensor
PyTorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets.torchvision.models.torchvisi ...
- 对Tensor进行变换 class torchvision.transforms.Normalize(mean, std) 给定均值:(R,G,B) 方差:(R,G,B),将会把Tensor正则化
对Tensor进行变换 class torchvision.transforms.Normalize(mean, std) 给定均值:(R,G,B) 方差:(R,G,B),将会把Tensor正则化.即 ...
- 【小白学PyTorch】7.最新版本torchvision.transforms常用API翻译与讲解
机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 小白学PyTorch | 6 模型的构建访问遍历存储(附代码) 小白学PyTorch | 5 torchvisio ...
- 【pytorch 】torchvision.transforms.CenterCrop==>从图像中心裁剪图片
transforms.CenterCrop torchvision.transforms.CenterCrop(size) 功能:从图像中心裁剪图片 size: 所需裁剪的图片尺寸 transform ...
- PyTorch 1.0 中文文档:torchvision.transforms
译者:BXuan694 transforms包含了一些常用的图像变换,这些变换能够用Compose串联组合起来.另外,torchvision提供了torchvision.transforms.func ...
- pytorch torchvision.transforms.ToTensor
API 将Shape=(HWC)的PIL.Image或者numpy.ndarray转换成shape=(CHW)的范围在[0.0,1.0]的torch.FloatTensor 像素值范围从[0, 255 ...
最新文章
- 300亿美元,AMD为什么要买Xilinx?
- 福利一波,赠票:2018杭州云栖大会 - 单日票(9月22日)
- 【运营】运营高手的“葵花宝典”,你就是下一个东方不败
- mysql连接池为何不用nio_MyCAT 在 Cobar 的基础上,完成了彻底的 NIO 通讯,并且合并了两个线程池...
- 不加样本就能做数据增强?还能提效?
- 0909关于操作系统
- CV《物体识别与检测3 - 多目标识别的优化技术》
- 关于ExtJs4的Grid带 查询 参数 分页(baseParams--extraParams)
- 《深度学习笔记》——初识PyTorch的学习笔记
- $.ajax()方法详解(转)
- wifi ap6212驱动移植及调试分析技术笔记
- Ubuntu系统设置截图快捷键
- GIF工具大全(网站)
- 格西烽火 串口助手(二)
- 苹果mov格式的视频怎么转换mp4?
- Android App 启动优化全记录
- SQP验厂要怎么做?
- 微软 香港云服务器,香港云服务器好用吗
- Django程序的发布
- win10 输入法禁用IME