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包的使用相关推荐

  1. torchvision.transforms 的CenterCrop():在图片的中间区域进行裁剪

    pytorch中transform函数 torchvision.transforms是pytorch中的图像预处理包 一般用Compose把多个步骤整合到一起: 比如说 transforms.Comp ...

  2. 【pytorch】torchvision.transforms 图像的变换详解;图像的预处理;数据增强

    目录 1 torchvision.transforms下的具体操作 1.1 ToTensor() 1.2 Normalize 1.3 RandomRotation 1.4 Resize 1.5 Ran ...

  3. PyTorch源码解析--torchvision.transforms(数据预处理、数据增强)

    PyTorch框架中有一个很常用的包:torchvision torchvision主要由3个子包构成:torchvision.datasets.torchvision.models.torchvis ...

  4. [Pytorch] torchvision.transforms.ToTensor

    PyTorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets.torchvision.models.torchvisi ...

  5. 对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正则化.即 ...

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

    机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 小白学PyTorch | 6 模型的构建访问遍历存储(附代码) 小白学PyTorch | 5 torchvisio ...

  7. 【pytorch 】torchvision.transforms.CenterCrop==>从图像中心裁剪图片

    transforms.CenterCrop torchvision.transforms.CenterCrop(size) 功能:从图像中心裁剪图片 size: 所需裁剪的图片尺寸 transform ...

  8. PyTorch 1.0 中文文档:torchvision.transforms

    译者:BXuan694 transforms包含了一些常用的图像变换,这些变换能够用Compose串联组合起来.另外,torchvision提供了torchvision.transforms.func ...

  9. pytorch torchvision.transforms.ToTensor

    API 将Shape=(HWC)的PIL.Image或者numpy.ndarray转换成shape=(CHW)的范围在[0.0,1.0]的torch.FloatTensor 像素值范围从[0, 255 ...

最新文章

  1. 300亿美元,AMD为什么要买Xilinx?
  2. 福利一波,赠票:2018杭州云栖大会 - 单日票(9月22日)
  3. 【运营】运营高手的“葵花宝典”,你就是下一个东方不败
  4. mysql连接池为何不用nio_MyCAT 在 Cobar 的基础上,完成了彻底的 NIO 通讯,并且合并了两个线程池...
  5. 不加样本就能做数据增强?还能提效?
  6. 0909关于操作系统
  7. CV《物体识别与检测3 - 多目标识别的优化技术》
  8. 关于ExtJs4的Grid带 查询 参数 分页(baseParams--extraParams)
  9. 《深度学习笔记》——初识PyTorch的学习笔记
  10. $.ajax()方法详解(转)
  11. wifi ap6212驱动移植及调试分析技术笔记
  12. Ubuntu系统设置截图快捷键
  13. GIF工具大全(网站)
  14. 格西烽火 串口助手(二)
  15. 苹果mov格式的视频怎么转换mp4?
  16. Android App 启动优化全记录
  17. SQP验厂要怎么做?
  18. 微软 香港云服务器,香港云服务器好用吗
  19. Django程序的发布
  20. win10 输入法禁用IME

热门文章

  1. Enhancement spot 增强点简介
  2. ORA-12519: TNS: 没有找到适用的服务处理
  3. 5、Power Query-抓取网页数据做漂亮的图表
  4. FICO年结完全手册
  5. 一次性供应商不能用特别总账标准程序修改
  6. co11n——生产订单确认的BAPI
  7. Query 创建方法
  8. 在线旅游的2020:洗牌重组、直播自救、跨界面敌
  9. 玖富(NASDAQ:JFU) :2019年Q4机构资金占比增至79.8%,科技赋能业务成果显著
  10. 环境污染,拿什么来保障食品安全?