Transforms结构及用法

  • 一、Transforms的使用
  • 二、TensorBoard显示
  • 三、常用的Transforms
    • 1. ToTensor()
    • 2. ToPILImage()
    • 3. Normalize()
    • 4. Resize()
    • 5. Compose()
    • 6. RandomCrop()
  • 四、总结

transforms.py相当于一个工具箱,里面有很多工具,比如totensor(将数据转换为tensor类型)、resize等。这个工具箱的输入是图片

一、Transforms的使用

from PIL import Image
from torchvision import transforms# 绝对路径:/home/xjy/PycharmProjects/pythonProject/dataset/train/ants/0013035.jpg
# 相对路径:dataset/train/ants/0013035.jpg
img_path = "dataset/train/ants/0013035.jpg"
img = Image.open(img_path)
print(img) # <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=768x512 at 0x7FE4A77C61D0>tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(tensor_img) # tensor([[...]])

首先我们需要创建一个具体的工具,如transforms.ToTensor(),然后我们需要去使用这个工具,将输入转换为输出result = tool(input),即上面的tensor_img = tensor_trans(img)

PS. 使用opencv的代码:

import cv2
cv_img = cv2.imread(img_path) # 为ndarray格式

二、TensorBoard显示

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms# 绝对路径:/home/xjy/PycharmProjects/pythonProject/dataset/train/ants/0013035.jpg
# 相对路径:dataset/train/ants/0013035.jpg
img_path = "dataset/train/ants/0013035.jpg"
img = Image.open(img_path)
print(img) # <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=768x512 at 0x7FE4A77C61D0>tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(tensor_img) # tensor([[...]])writer = SummaryWriter("logs") # save_dir : logs
writer.add_image("Tensor_img", tensor_img)
writer.close()

运行后在终端输入tensorboard --logdir=logs --port=6007即可显示图片

三、常用的Transforms

需要去关注输入、输出、作用。不同的函数会生成不同的数据类型,如

Image.open() PIL
ToTensor() tensor
cv.imread() narrays

1. ToTensor()

首先,回顾一下类的用法:

class Person:def __call__(self, name):print("__call__" + " Hello " + name)def hello(self, name):print("hello " + name)person = Person()
person("Zhangsan") # __call__ Hello Zhangsan
person.hello("lisi") # hello lisi

接着看一下ToTensor()的用法:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformsimg = Image.open("images/pink.jpg")
print(img)
# <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x375 at 0x7FC0B136F240>writer = SummaryWriter("logs")trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)
writer.close()

因为add_image()函数要求输入torch.Tensor, numpy.array, or string/blobname的图片,所以需要先将img转换为tensor类型。

2. ToPILImage()

作用:将tensor或ndarray数据类型转换为PIL image类型

3. Normalize()

作用:归一化一个tensor image,其公式为 result[channel] = (input[channel] - mean[channel]) / std[channel],那么如果input的范围为[0,1],将mean和std均设置为0.5,那么result的范围就会为[-1,1]。

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("images/pink.jpg")
print(img)
# <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x375 at 0x7FC0B136F240># ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)# Normalize
# print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) # mean, std
img_norm = trans_norm(img_tensor)
# print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm)writer.close()

显示的结果如图:

4. Resize()

作用:将输入的PIL图片resize成给定的尺寸,输出仍为PIL image数据类型

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("images/pink.jpg")
print(img)
# <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x375 at 0x7FC0B136F240># Resize
print(img.size) # (500, 375)
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)
print(img_resize) # <PIL.Image.Image image mode=RGB size=512x512 at 0x7FAB69DFBE10># 显示
trans_totensor = transforms.ToTensor()
img_resize = trans_totensor(img_resize)
print(img_resize)
writer.add_image("Resize", img_resize)writer.close()

5. Compose()

作用:transforms.Compose([trans_resize_2, trans_totensor]),其输入为PIL image,输出tensor

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("images/pink.jpg")
print(img)
# <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x375 at 0x7FC0B136F240># ToTensor
trans_totensor = transforms.ToTensor()# Compose - resize - 2
trans_resize_2 = transforms.Resize(512) # 等比缩放
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)writer.close()

6. RandomCrop()

作用:随机裁剪

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("images/pink.jpg")
print(img)
# <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=500x375 at 0x7FC0B136F240># ToTensor
trans_totensor = transforms.ToTensor()# RandomCrop()
trans_random = transforms.RandomCrop(256)
# trans_random = transforms.RandomCrop((256, 300))
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):img_crop = trans_compose_2(img)writer.add_image("RandomCrop", img_crop, i)writer.close()

四、总结

  1. 要关注输入和输出类型,多看看官方文档。
  2. 还要关注方法需要什么参数,可以将光标放在函数的括号内,同时按ctrl+p可弹出参数提示。
  3. 不知道返回值类型的时候,可以用print()或者print(type())或者debug获取。

【Pytorch学习】Transforms相关推荐

  1. PyTorch学习笔记——图像处理(transforms.Normalize 归一化)

    PyTorch学习笔记--图像处理 transforms.Normalize 归一化 回顾 torchvision.ToTensor 归一化 transforms.Normalize 公式 回顾 to ...

  2. Pytorch学习-Task1

    PyTorch学习-Task1:PyTorch张量计算与Numpy的转换 张量 Tensor 1.张量的定义 2.张量的运算 3.Tensor与Numpy类型的转换 4.自动求导 pytorch 与神 ...

  3. pytorch 学习笔记目录

    1 部分内容 pytorch笔记 pytorch模型中的parameter与buffer_刘文巾的博客-CSDN博客 pytorch学习笔记 torchnn.ModuleList_刘文巾的博客-CSD ...

  4. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

  5. pytorch学习笔记(2):在MNIST上实现一个CNN

    参考文档:https://mp.weixin.qq.com/s/1TtPWYqVkj2Gaa-3QrEG1A 这篇文章是在一个大家经常见到的数据集 MNIST 上实现一个简单的 CNN.我们会基于上一 ...

  6. PyTorch学习笔记(四):PyTorch基础实战

    PyTorch实战:以FashionMNIST时装分类为例: 往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本 ...

  7. Pytorch学习笔记7——自定义数据集

    Pytorch学习笔记7--自定义数据集 1.读取数据 首先继承自torch.utils.data.Dataset 重写len与getitem train就用train数据集,test就用test数据 ...

  8. PyTorch学习笔记2:nn.Module、优化器、模型的保存和加载、TensorBoard

    文章目录 一.nn.Module 1.1 nn.Module的调用 1.2 线性回归的实现 二.损失函数 三.优化器 3.1.1 SGD优化器 3.1.2 Adagrad优化器 3.2 分层学习率 3 ...

  9. PyTorch :transforms 数据增强:裁剪、翻转、旋转

    在之前课程中,我们已经熟悉了 PyTorch 中 transforms 的运行机制,它提供了大量的图像增强方法,例如裁剪.旋转.翻转等等,以及可以自定义实现增强方法.本节课中,我们将进一步学习 tra ...

  10. 莫烦---Pytorch学习

    今天翻翻资料,发现有些地方的说明不太到位,修改过来了. Will Yip 2020.7.29 莫烦大神Pytorch -->> 学习视频地址 2020年开年就遇上疫情,还不能上学,有够难受 ...

最新文章

  1. 一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式
  2. 设置Django关闭Debug后的静态文件路由
  3. jenkins 对 maven对应的 jvm 配置参数
  4. 请教如何实现UITextField值变化的实时监视
  5. Java中静态代码块、构造代码块的区别
  6. 信鸽推送的集成AndroidStudio版本
  7. ADS1115(测量ADC)的使用教程(IIC)
  8. 【SSL】1653数字游戏
  9. IDE、SCSI接口区别
  10. 小熊派gd32f303学习之旅(3)—串口打印第一个Hello world程序
  11. MSP430G2553 Launchpad 硬件I2C驱动
  12. 如何选购一款优质的台式电脑电源?
  13. 地下城堡游戏小脚本儿——自动炼金
  14. 【学习笔记】正则语言的可检验性(性质检验)
  15. AD绘制怎么画3D封装库?
  16. java 匹配任意字符_正则表达式匹配任意字符(包括换行符)
  17. 设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆。要求两个成员变量。一个是圆心,一 个是半径,提供计算面积的方法。为上述Cricle类添加一个方法,计算一个点(Point)是否在圆内
  18. UE4官网教程 风格化效果
  19. python3中的rank函数
  20. 登录webqq得金山快盘空间5G

热门文章

  1. java定义类模板_定义模板——函数模板和类模板
  2. 软件测试-测试面试题
  3. ST 电机控制工作台帮助文档翻译 之 STM32F3x 的 OCP 和 OVP(使用嵌入式模拟的过压保护(仅限 STM32F3x))
  4. 人脸识别技术综述,出自OPPO研究院
  5. Typora+图床详解(小白都能学得会)
  6. 2021年起重机司机(限桥式起重机)考试题库及起重机司机(限桥式起重机)找解析
  7. 荣耀50手机系列正式发布,售价2399元起,主要竞争对手瞄准苹果
  8. 最简单的直播源抓取方法
  9. python脚本自动消除安卓版_微信跳一跳脚本重出江湖,python实现安卓iOS自动版与手动版!...
  10. 第二届『Citric杯』NOIP提高组模拟赛