【Pytorch学习】Transforms
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()
四、总结
- 要关注输入和输出类型,多看看官方文档。
- 还要关注方法需要什么参数,可以将光标放在函数的括号内,同时按ctrl+p可弹出参数提示。
- 不知道返回值类型的时候,可以用
print()
或者print(type())
或者debug
获取。
【Pytorch学习】Transforms相关推荐
- PyTorch学习笔记——图像处理(transforms.Normalize 归一化)
PyTorch学习笔记--图像处理 transforms.Normalize 归一化 回顾 torchvision.ToTensor 归一化 transforms.Normalize 公式 回顾 to ...
- Pytorch学习-Task1
PyTorch学习-Task1:PyTorch张量计算与Numpy的转换 张量 Tensor 1.张量的定义 2.张量的运算 3.Tensor与Numpy类型的转换 4.自动求导 pytorch 与神 ...
- pytorch 学习笔记目录
1 部分内容 pytorch笔记 pytorch模型中的parameter与buffer_刘文巾的博客-CSDN博客 pytorch学习笔记 torchnn.ModuleList_刘文巾的博客-CSD ...
- 深度学习入门之PyTorch学习笔记:卷积神经网络
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...
- pytorch学习笔记(2):在MNIST上实现一个CNN
参考文档:https://mp.weixin.qq.com/s/1TtPWYqVkj2Gaa-3QrEG1A 这篇文章是在一个大家经常见到的数据集 MNIST 上实现一个简单的 CNN.我们会基于上一 ...
- PyTorch学习笔记(四):PyTorch基础实战
PyTorch实战:以FashionMNIST时装分类为例: 往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本 ...
- Pytorch学习笔记7——自定义数据集
Pytorch学习笔记7--自定义数据集 1.读取数据 首先继承自torch.utils.data.Dataset 重写len与getitem train就用train数据集,test就用test数据 ...
- PyTorch学习笔记2:nn.Module、优化器、模型的保存和加载、TensorBoard
文章目录 一.nn.Module 1.1 nn.Module的调用 1.2 线性回归的实现 二.损失函数 三.优化器 3.1.1 SGD优化器 3.1.2 Adagrad优化器 3.2 分层学习率 3 ...
- PyTorch :transforms 数据增强:裁剪、翻转、旋转
在之前课程中,我们已经熟悉了 PyTorch 中 transforms 的运行机制,它提供了大量的图像增强方法,例如裁剪.旋转.翻转等等,以及可以自定义实现增强方法.本节课中,我们将进一步学习 tra ...
- 莫烦---Pytorch学习
今天翻翻资料,发现有些地方的说明不太到位,修改过来了. Will Yip 2020.7.29 莫烦大神Pytorch -->> 学习视频地址 2020年开年就遇上疫情,还不能上学,有够难受 ...
最新文章
- 一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式
- 设置Django关闭Debug后的静态文件路由
- jenkins 对 maven对应的 jvm 配置参数
- 请教如何实现UITextField值变化的实时监视
- Java中静态代码块、构造代码块的区别
- 信鸽推送的集成AndroidStudio版本
- ADS1115(测量ADC)的使用教程(IIC)
- 【SSL】1653数字游戏
- IDE、SCSI接口区别
- 小熊派gd32f303学习之旅(3)—串口打印第一个Hello world程序
- MSP430G2553 Launchpad 硬件I2C驱动
- 如何选购一款优质的台式电脑电源?
- 地下城堡游戏小脚本儿——自动炼金
- 【学习笔记】正则语言的可检验性(性质检验)
- AD绘制怎么画3D封装库?
- java 匹配任意字符_正则表达式匹配任意字符(包括换行符)
- 设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆。要求两个成员变量。一个是圆心,一 个是半径,提供计算面积的方法。为上述Cricle类添加一个方法,计算一个点(Point)是否在圆内
- UE4官网教程 风格化效果
- python3中的rank函数
- 登录webqq得金山快盘空间5G
热门文章
- java定义类模板_定义模板——函数模板和类模板
- 软件测试-测试面试题
- ST 电机控制工作台帮助文档翻译 之 STM32F3x 的 OCP 和 OVP(使用嵌入式模拟的过压保护(仅限 STM32F3x))
- 人脸识别技术综述,出自OPPO研究院
- Typora+图床详解(小白都能学得会)
- 2021年起重机司机(限桥式起重机)考试题库及起重机司机(限桥式起重机)找解析
- 荣耀50手机系列正式发布,售价2399元起,主要竞争对手瞄准苹果
- 最简单的直播源抓取方法
- python脚本自动消除安卓版_微信跳一跳脚本重出江湖,python实现安卓iOS自动版与手动版!...
- 第二届『Citric杯』NOIP提高组模拟赛