P4:Transforms的使用

news2024/11/19 14:33:17

transform.py就像是一个工具箱,里面有很多工具(如:totensor、resize等不同的工具)。

使用规则:

拿特定格式的图片,通过使用工具,得到想要的结果。

1、transforms.ToTensor()的使用

1、作用:

将 PIL 、 numpy格式的图片转换为 tensor格式。

2、使用方法:

# 创建类
tensor_trans = transforms.ToTensor()
# 传参
img_trans = tensor_trans(img)

3、例子:

from PIL import Image
from torchvision import transforms

# 绝对路径 D:\workspace\PyTorch\hymenoptera_data\train\ants\0013035.jpg
# 相对路径 hymenoptera_data/train/ants/0013035.jpg
img_path = 'hymenoptera_data/train/ants/0013035.jpg'
img = Image.open(img_path)
# print(img)

# 1、transforms该如何使用
tensor_trans = transforms.ToTensor() # 对class进行创建
tensor_img = tensor_trans(img)

print(tensor_img)

4、用tensorboard来检验一下:

代码如下:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

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

# 绝对路径 D:\workspace\PyTorch\hymenoptera_data\train\ants\0013035.jpg
# 相对路径 hymenoptera_data/train/ants/0013035.jpg
img_path = 'hymenoptera_data/train/ants/0013035.jpg'
img = Image.open(img_path)
# print(img)

# 1、transforms该如何使用
tensor_trans = transforms.ToTensor() # 对class进行创建
tensor_img = tensor_trans(img)

print(tensor_img)


# 2、为什么我们需要Tensor数据类型
# tensor包括了我们神经网络中的一些参数,相当于对数据进行了包装
writer = SummaryWriter("logs")
writer.add_image("Tensor_img",tensor_img)
writer.close()

结果如下:

2、transforms.Normalize()的使用

1、作用:

将输入图片 减去均值,再除以方差

2、使用方法:

# 继承类
trans_norm = transforms.Normalize(均值,标准差) # 根据通道数来写
# 如果是RGB三通道的话,举例为: ([1,2,3] , [4,5,6])

# 调用传参
img_norm = trans_norm(img) # 这里img需要是tensor类型的

3、例子:

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter('logs')
img = Image.open('image/color.jpg')
print(img)

# ToTensor 的使用
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(img_tensor.shape)
writer.add_image('ToTensor',img_tensor)

# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([3, 4, 6], [7, 3, 2])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm, 2)

4、用tensorboard来检验一下:

结果如下:

3、transforms.Resize()的使用

1、作用:

将 PIL 格式的图片转换为特定尺寸。

2、使用方法:

# 继承类
trans_resize = transforms.Resize((xxx,xxx)) # xxx表示想要的尺寸
# 调用并传参
img_resize = trans_resize(img) # 这里img必须是PIL格式的

3、例子:

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

4、用tensorboard来检查一下:

结果如下:

4、transform.Compose()的使用

1、作用:

可以将多种变换进行组合。

2、使用方法:

# 继承类
trans_compose = transform.Compose([trans_resize_2 , trans_totensor])
# Compose()中的参数需要是一个列表

# 调用传参
img_resize_2 = trans_compose(img)

3、例子:

# Compose - resize  --- 2
# Compose进行的是一个等比缩放,不改变高和宽的比例,只改变最小边和最长边的大小关系
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
# Compose()的用法:
# Compose()中的参数需要是一个列表,Python中,列表的表示形式为[数据1、数据2...]
# 在Compose中,数据 需要是transforms类型
# 所以得到,Compose([transforms参数1,transforms参数2...])
img_resize_2 = trans_compose(img)
writer.add_image('Resize2',img_resize_2,0)

4、用tensorboard来检查一下:

结果如下:

5、transforms.RandomCrop()的使用

1、作用:

随机裁剪出所需尺寸的图片

2、使用方法:

# 继承类
trans_random = transforms.RandomCrop((100,200))

# 调用传参
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])

3、例子:

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

4、使用tensorboard来检查一下:

结果如下:

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实战1:基于tensorflow卷积网络实现面部关键点检测详细教程(代码+数据)

项目概述: 此任务的目标是预测面部图像上的关键点位置。这可以用作多个应用程序中的构建块,例如:检测面部关键点是一个非常具有挑战性的问题。人脸特征因人而异,即使是单个人,由于 3D 姿势、大小、位置、视角和光照条件等因素也存在很大差异。 直接上结果: 数据集描…

JSP SSM 个人博客系统系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP SSM 个人博客系统系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…

vue3-Teleport笔记

简单来写一下Teleport src/components/TeleportLearn.vue <script setup></script><template><div><Teleport to"body"><div>你好</div></Teleport></div> </template><style scoped></style&…

NVMe IO数据传输如何选择PRP or SGL?

在Host与Controller之间有数据交互时&#xff0c;Controller会多次访问Host内存。比如执行NVMe Read/Write:当Host下发NVMe Write命令时&#xff0c;Host会先放数据放在Host内存中&#xff0c;然后通知Controller过来取数据。Controller接到信息后&#xff0c;会通过PCIe Memor…

Python下载ts文件视频并合并

目录 一、ts文件的由来 二、下载ts文件 1.下载index.m3u8&#xff0c;并做相应处理 2.下载ts文件 三、合并ts文件 一、ts文件的由来 ts文件&#xff0c;ts即"Transport Stream"的缩写&#xff0c;特点就是要求从视频流的任一片段开始都是可以独立解码的&#x…

C 程序设计教程(06)—— C 语言的运算符与表达式

C 程序设计教程&#xff08;06&#xff09;—— C 语言的运算符与表达式 该专栏主要介绍 C 语言的基本语法&#xff0c;作为《程序设计语言》课程的课件与参考资料&#xff0c;用于《程序设计语言》课程的教学&#xff0c;供入门级用户阅读。 目录C 程序设计教程&#xff08;0…

【每日一题】【LeetCode】【第七天】盛最多水的容器

解决之路 因为是周日&#xff0c;找个中等题挑战一下。 题目描述 测试案例&#xff08;部分&#xff09; 第一次 想一下&#xff0c;因为涉及到底乘高&#xff0c;所以不能排序。逆序也没必要。 简化一下题干&#xff0c;盛水最多&#xff0c;也就是算面积最大&#xff0c…

【北邮果园大三上】运筹学期中前

第一章.线性规划 1.1例题 根据现实世界中的问题建立模型 一般表达式 ①和式 ②向量式 1.2变化标准&#xff1a; 1.3线性规划求解的基础原理和单纯解法 1.3.1解 ①基础概念 基 可行解与基础解 其他分类 ②判断举例 原式子&#xff1a; 判断标准 将一个未知数作为常熟&#…

从Wireshark看TCP连接的建立与关闭

http://t.zoukankan.com/jonathanlin-p-4282582.html TCP是一种面向连接、可靠的协议。TCP连接的建立与断开&#xff0c;都是需要经过通信双方的协商。用一句话概括就是&#xff1a;三次握手say hello&#xff08;建立连接&#xff09;&#xff1b;四次握手say goodbye&#x…

蓝桥杯Python组排序算法与函数

目录 一、排序算法 二、排序函数 1、Python 的 sort() 函数和 sorted() 函数 2、sort() 例子 3、sorted() 例子 4、部分排序 三、例题 1、统计数字&#xff08;lanqiaoOJ题号535&#xff09; 2、错误票据&#xff08;lanqiaoOJ题号205&#xff09; 3、奖学金&#xf…

线程池 - ThreadPoolExecutor 详解

线程池 - ThreadPoolExecutor 详解 线程池 ThreadPoolExecutor 源码解析参考 juc 专栏系列文章。 基本概述 线程池&#xff1a;一个容纳多个线程的容器&#xff0c;容器中的线程可以重复使用&#xff0c;省去了频繁创建和销毁线程对象的操作。 线程池作用&#xff1a; 降低资…

【基础】Elasticsearch 基础

Elasticsearch 基本概念及使用Elasticsearch 基本概念ES 的简介及使用场景ES 基本概念ES 与 Kibana 的安装Elasticsearch 分词器ES 内置分词器ik 分词器的安装和使用Elasticsearch 基本使用索引操作数据的增删改查DSL 查询聚合查询批量操作Elasticsearch 基本概念 ES 的简介及…

多线程锁相关

日升时奋斗&#xff0c;日落时自省 目录 1、常见的锁策略 1.1、悲观锁vs乐观锁 1.2、轻量级锁vs重量级锁 1.3、自旋锁vs挂起等待锁 1.4、互斥锁vs读写锁 1.5、公平锁vs非公平锁 1.6可重入锁vs不可重入锁 2、CAS 2.1、CAS解析 2.2、CAS的应用场景 2.2.1、实现原子类 …

JavaSE学习day2_03, 算数运算符

5. 算术运算符 5.1 分类&#xff1a; - * / % 5.2 细节&#xff1a; 1.运算规则。跟小学数学是一模一样的 2.如果是整数跟整数进行计算&#xff0c;结果只能是整数。直接去掉小数部分&#xff0c;保留整数。如5/22,而不是2.5. 3.如果想要结果中有小数&#xff0c;需要有小…

(二)K8S Namespace 和 Label

Namespace 1、K8S集群中默认的Namespace为default&#xff0c;通过Namespace可以实现Pod之间的相互隔离&#xff08;如测试环境、生成环境的隔离&#xff09; 2、通过K8S的资源配置机制限定不同的Namespace对CPU、内存的使用&#xff0c;再通过K8S授权机制将不同的Namespace交…

启动ruoyi框架(初学)

启动ruoyi框架&#xff08;初学&#xff09;&#xff08;RuoYi&#xff09; Ruo Yi启动ruoyi框架&#xff08;初学&#xff09;&#xff08;[RuoYi](http://doc.ruoyi.vip/)&#xff09;一、简介二、项目启动1.前端模组&#xff1a;RUOYI-UI2.后端模组&#xff1a;3.环境要求&a…

Java版阿里云/腾讯云域名动态映射DDNS到动态IPv4或IPv6

1 介绍 利用业余时间&#xff0c;整合了一下阿里云和腾讯云动态域名映射&#xff0c;并将其使用spring boot做了一下封装&#xff0c;正好可以把家里的闲置电脑和IP v6利用起来&#xff0c;具体使用方法如下&#xff0c;或者参考对应项目的readme文档 2 地址 aliyun-ddns&am…

数据分析-深度学习 Day3

youtube课程地址&#xff1a;&#xff08;实时更新&#xff09;https://www.youtube.com/playlist?listPLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2Jwww.youtube.com/playlist?listPLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2JB站课程地址&#xff1a;李宏毅2021机器学习【week3】&#xff1a…

基于tensorflow框架bert的自然灾害描述文本分类详细教程

概述: 使用tensorflow框架: 预测给定的推文是否与真正的灾难有关。如果是这样,预测一个1。如果不是,预测一个0 数据展示:

Java之String概述、对象创建原理和常见面试题、String类常用API、案例

目录String、ArrayList前言String简单介绍Arraylist简单介绍String 概述String类的特点详解总结String类创建对象的两种方式两种方式有什么区别吗&#xff1f;总结String常见面试题String类常用API-字符串内容比较总结String类常用API-遍历、替换、截取、分割操作String案例验证…