Torchvision中的Transforms的使用

一、transforms结构及用法

在这里插入图片描述

查看tansforms.py说明文档:

ToTensor类作用是:将一个PIL图片或numpy形式转换成tensor的数据类型

python的用法-》tensor数据类型
通过 transforms.ToTensor去看两个问题
1、transforms该如何使用(python)
2、为什么我们需要Tensor数据类型

from PIL import Image
from torchvision import transformsimg_path = "dataset/train/ants/0013035.jpg"
img = Image.open(img_path)
# 1、transforms该如何使用(python)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(tensor_img)

在这里插入图片描述
输出结果为向量。

·补充:利用opencv获得numpy类型:
import cv2
cv_img = cv2.imread(img_path)
print(type(cv_img))

在这里插入图片描述

使用ToTensor在tensorboard中加载图片:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformsimg_path = "dataset/train/ants/0013035.jpg"
img = Image.open(img_path)writer = SummaryWriter("logs")tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
# print(tensor_img)
writer.add_image("Tensor_img", tensor_img)
writer.close()

在这里插入图片描述
在Terminal中运行,点击链接即可:

 tensorboard --logdir=logs

二、常见Transforms的使用

在这里插入图片描述
新建一个文件夹images,里面存放一张图片

from PIL import Image
img = Image.open("images/0013035.jpg")
print(img)

运行后输出:

<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=768x512 at 0x2490E696FA0>

打开transforms说明文档,找到结构中的Compose:
在这里插入图片描述

Python中__call__的用法:

可以省略方法的调用。

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

输出:

__call__ hello zhangsanhello lisi

ToTensor的使用

(与上面 使用ToTensor在tensorboard中加载图片 相同)

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("images/0013035.jpg")
print(img)# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)
writer.close()

Normalize的使用

归一化:
在这里插入图片描述
归一化公式:

output[channel] = (input[channel] - mean[channel]) / std[channel]

案例中:
在这里插入图片描述

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("images/0013035.jpg")
# print(img)# 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])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm)
writer.close()

在这里插入图片描述

Resize()的使用

# Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
print(img_resize)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)

在这里插入图片描述
在这里插入图片描述

Compose()的使用

# Compose - resize -2
trans_resize_2 = transforms.Resize(512)
# PIL ->PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)

在这里插入图片描述
在这里插入图片描述

RandomCrop()的使用

# RandomCrop
trans_random = transforms.RandomCrop(512)
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)

在这里插入图片描述

所有代码:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("images/0013035.jpg")
# print(img)# 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])
img_norm = trans_norm(img_tensor)
# print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm)# Resize
# print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# print(img_resize)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
# print(img_resize)# Compose - resize -2
trans_resize_2 = transforms.Resize(512)
# PIL ->PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)# RandomCrop
trans_random = transforms.RandomCrop(512)
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.多看官方文档
3.关注方法需要什么参数
4.不知道返回值的时候:
· print
· print(type())
· debug

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/297738.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程--网络基础

这里写目录标题 协议的概念什么是协议典型协议 分层模型OSI七层模型与TCP/TP四层模型 通信过程协议格式以太网帧协议&#xff08;主要作用与mac地址&#xff0c;也就是网卡&#xff09;mac地址格式ARP协议总结 IP协议&#xff08;主要作用于IP&#xff09;UDP与TCP协议&#xf…

C++ 之LeetCode刷题记录(二)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 从今天开始cpp刷题之旅&#xff0c;多学多练&#xff0c;尽力而为。 先易后难&#xff0c;先刷简单的。 9、回文数 给你一个整数 x &#xff0c;如果 x 是一个…

小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法

最新版2.6.7版下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 很多会员在上传小程序前端时经常出现首页无法打开的情况&#xff0c;错误提示无法打开该页面&#xff0c;不支持打开&#xff0c;这种问题其实就是权限问题&#xff0c;页面是通过调用web-v…

算法基础之表达整数的奇怪方式

表达整数的奇怪方式 中国剩余定理: 求M 所有m之积 然后Mi M / mi x 如下图 满足要求 扩展中国剩余定理 找到x **使得x mod mi ai**成立 对于每两个式子 都可以推出①式 即 用扩展欧几里得算法 可以算出k1,-k2和m2–m1 判无解 : 若**(m2–m1) % d ! 0** 说明该等式无解 …

MySQL undo日志精讲3-从回滚段中申请 Undo 页面链表

回滚段-Rollback Segment Header 页面 回滚段的概念 我们现在知道一个事务在执行过程中最多可以分配4个 Undo 页面链表&#xff0c;在同一时刻不同事务拥有的 Undo 页面链表是不一样的&#xff0c;所以在同一时刻系统里其实可以有许许多多个 Undo 页面链表存在。为了更好的管…

【数据结构之顺序表】

数据结构学习笔记---002 数据结构之顺序表1、介绍线性表1.1、什么是线性表? 2、什么是顺序表?2.1、概念及结构2.2、顺序表的分类 3、顺序表接口的实现3.1、顺序表动态存储结构的Seqlist.h3.1.1、定义顺序表的动态存储结构3.1.2、声明顺序表各个接口的函数 3.2、顺序表动态存储…

Kubectl 部署有状态应用(下)

接上文 《Kubectl 部署有状态应用&#xff08;上&#xff09;》创建完StatefulSet后&#xff0c;本文继续介绍StatefulSet 扩展、更新、删除等内容。 StatefulSet 中的 Pod 验证序数索引和稳定的网络身份 StatefulSet 中的 Pod 具有唯一的序数索引和稳定的网络身份。 查看 …

外星人Alienware Area-51 R2原厂Win10预装系统

大三角外星人Area 15 R2原装出厂WINDOWS10系统 链接&#xff1a;https://pan.baidu.com/s/1JwDuHx1j7fRABtIpLmKW_g?pwdq4pd 提取码&#xff1a;q4pd 原厂系统自带所有驱动、外星人出厂主题壁纸、专属LOGO标志、Office办公软件、MyAlienware、外星人控制中心等预装程序 文…

2023最新轻松升级、安装和试用Navicat Premium 16.3.3 教程详解

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Qt designer界面和所有组件功能的详细介绍(全!!!)

PyQt5和Qt designer的详细安装教程&#xff1a;https://blog.csdn.net/qq_43811536/article/details/135185233?spm1001.2014.3001.5501 目录 1. 界面介绍2. Widget Box 常用组件2.1 Layouts&#xff08;布局&#xff09;2.2 Spacers&#xff08;间隔器&#xff09;2.3 Item V…

python实现bp神经网络对csv文件进行数据预测

参考资源&#xff1a; sklearn库 bp神经网络[从原理到代码一篇搞定]&#xff08;2&#xff09;_sklearn 神经网络-CSDN博客 十分钟上手sklearn&#xff1a;安装&#xff0c;获取数据&#xff0c;数据预处理 - 知乎 (zhihu.com) 一个实例讲解如何使用BP神经网络(附代码) - 知…

操作系统 内存管理篇

一.程序的装入和链接 装入方式&#xff1a; 链接方式&#xff1a; 二.进程的内存映像 三.内存的分配 1.连续分配 分配方式&#xff1a; 2.不连续分配 分页&#xff1a;页面大小一致 引入快表&#xff08;和 cache 处理思路一致&#xff09; 升级到二级页表 分段&#xff1a;…