当前位置: 首页 > news >正文

Pytorch学习:torchvison.transforms常用包(ToTensor、Resize、Compose和RandomCrop)

torchvision.transforms常用包

    • 1. torchvision.transforms.ToTensor
    • 2. torchvision.transforms.Resize
    • 3. torchvision.transforms.Compose
    • 4. torchvision.transforms.Normalize
    • 5. torchvision.transforms.RandomCrop

1. torchvision.transforms.ToTensor

将PIL Image或ndarray转换为张量并相应缩放值。

官方文档:torchvision.transforms.ToTensor
CLASS torchvision.transforms.ToTensor

  • 将PIL Image或ndarray转换为张量并相应缩放值
  • 此转换不支持torchscript
  • 如果PIL Image属于其中一种模式(L、LA、P、I、F、RGB、YCbCr、RGBA、CMYK、1)或numpy. ndarray的dtype = np.uint8,则将范围[0,255]的PIL Image或numpy.ndarray(H x W x C)转换为范围[0.0,1.0]的形状(C x H x W)的火炬.FloatTensor
  • 在其他情况下,张量在不缩放的情况下返回。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor, 0)writer.close()

在这里插入图片描述

2. torchvision.transforms.Resize

将输入图像的大小调整为给定大小。
如果图像是torch tensor,则预期其具有[…,H,W]形状,其中…表示任意数量的前导维度。

官方文档:torchvision.transforms.Resize
CLASS torchvision.transforms.Resize(size, interpolation=InterpolationMode.BILINEAR, max_size=None, antialias='warn')
主要参数:

  • size(sequence or int):所需的输出大小。
    • 如果size是一个类似(h,w)的序列,则输出size将与此匹配。
    • 如果size是一个整数,图像的较小边缘将与此数字匹配。即,如果高度>宽度,则图像将被重新缩放为(尺寸 * 高度/宽度,尺寸)。
  • interpolation(InterpolationMode):所需插值枚举。
  • max_size(int,可选):调整大小后的图像的最大长边,如果在根据 size 调整大小之后图像的较长边缘大于 max_size ,则再次调整图像的大小,使得较长边缘等于 max_size 。
  • antialias(bool,optional):是否应用抗锯齿。它只影响具有双线性或双三次模式的张量,否则将被忽略。在PIL图像上,抗锯齿始终应用于双线性或双三次模式;在其他模式下(对于PIL图像和张量),抗锯齿没有意义,并且忽略此参数。(当前默认值为 None )可能的值为:
    • True :将为双线性或双三次模式应用抗锯齿。其他模式不受影响。这可能是你想要使用的。
    • False :在任何模式下都不会对张量应用抗锯齿。PIL图像在双线性或双三次模式下仍然是抗锯齿的,因为PIL不支持抗锯齿。
    • None :相当于张量的 False 和PIL图像的 True 。这个值的存在是由于遗留的原因,除非您真正知道自己在做什么,否则您可能不想使用它。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)# Resize
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)
writer.add_image("Resize", img_resize, 2)
print(img_resize)writer.close()

在这里插入图片描述

3. torchvision.transforms.Compose

将多个变换组合在一起。

官方文档: torchvision.transforms.Compose
CLASS torchvision.transforms.Compose(transforms)

  • transforms(list of Transform objects)-要组合的变换列表

代码实现

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)# 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("Compose", img_resize_2, 3)writer.close()

在这里插入图片描述

4. torchvision.transforms.Normalize

使用均值和标准差归一化张量图像。此转换不支持PIL图像。
给定平均值: (mean[1],…,mean[n]) 和标准值: (std[1],…,std[n]) 对于 n 通道,该变换将归一化输入 torch.*Tensor 的每个通道,即, output[channel] = (input[channel] - mean[channel]) / std[channel]

官方文档:torchvision.transforms.Normalize
CLASS torchvision.transforms.Normalize(mean, std, inplace=False)
主要参数:

  • mean(sequence):每个通道的均值序列。
  • std(sequence):每个通道的标准偏差序列。
  • inplace(booloptional):使用Bool使此操作就地执行。

代码实现

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)# 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, 1)writer.close()

在这里插入图片描述

5. torchvision.transforms.RandomCrop

在随机位置裁剪给定的图像。
如果图像是torch tensor,则预计具有[…,H,W]形状,其中…表示任意数量的前导维度,但如果使用非恒定填充,则预计输入最多具有2个前导维度。

官方文档:torchvision.transforms.RandomCrop
CLASS torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')
主要参数:

  • size (sequence or int):裁剪的所需输出大小。
    • 如果size是一个int而不是像(h,w)这样的序列,则会进行方形裁剪(size,size)
    • 如果提供长度为1的序列,则将其解释为(size[0],size[0])
  • padding(int or sequence, optional) :可选填充图像的每个边框。默认值为“无”。
    • 如果只提供一个int,则用于填充所有边框。
    • 如果提供长度为2的序列,则这分别是左/右和顶/底上的填充。
    • 如果提供长度为4的序列,则这分别是用于左、上、右和下边界的填充。
  • pad_if_needed (boolean) :如果图像小于所需的大小,它将填充图像,以避免引发异常。由于裁剪是在填充之后完成的,因此填充似乎是在随机偏移处完成的。
  • fill (number or tuple):常量填充的像素填充值。默认值为0。
    • 如果是长度为3的元组,则分别用于填充R、G、B通道。
    • 此值仅在padding_mode为常量时使用。
    • torch张量仅支持数字。PIL图像仅支持int或tuple值。
  • padding_mode (str) :填充类型。应为:恒定、边缘、反射或对称。默认值为常量。
    • constant:填充一个常量值,这个值是用fill指定的
    • edge:填充图像边缘的最后一个值。如果输入一个5D火炬张量,最后3个维度将被填充,而不是最后2个维度
    • reflect:填充图像的反射,而不重复边缘上的最后一个值。例如,在反射模式下,在两侧使用2个元素填充[1,2,3,4]将导致[3,2,1,2,3,4,3,2]
    • 对称:图像反射的焊盘重复边缘上的最后一个值。例如,在对称模式下,在两侧用2个元素填充[1,2,3,4]将导致[2,1,1,2,3,4,4,3]

代码实现

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)# 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()

在这里插入图片描述

相关文章:

Pytorch学习:torchvison.transforms常用包(ToTensor、Resize、Compose和RandomCrop)

torchvision.transforms常用包 1. torchvision.transforms.ToTensor2. torchvision.transforms.Resize3. torchvision.transforms.Compose4. torchvision.transforms.Normalize5. torchvision.transforms.RandomCrop 1. torchvision.transforms.ToTensor 将PIL Image或ndarray…...

算法通关村十二关 | 字符串转换

1. 转换小写字母 LeetCode709:给你一个字符串s,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。 每个字母都是有确定的ASCII的,可以根据码表操作子字符串,常见的ASCII范围是: a-z: 97-122, …...

前端进阶Html+css09----BFC模型

1.什么是BFC模型 全称是:Block formatting context(块级格式化上下文),是一个独立的布局环境,不受外界的影响。 2.FC,BFC,IFC 元素在标准流里都属于一个FC(Formatting Context)。 块级元素的布…...

重排链表(C语言)

题目: 示例: 思路: 这题我们将使用栈解决这个问题,利用栈先进后出的特点,从链表的中间位置进行入栈,寻找链表的中间位置参考:删除链表的中间节点,之后从头开始进行连接。 本题使用…...

el-table动态合并单元格

el-table使用这个方法合并单元格&#xff0c;:span-method“hbcell” <el-table size"small" :data"table.data" border empty-text"暂无数据" :cell-style"cellStyle" :header-cell-style"tableHeaderColor":span-meth…...

html元素

文章目录 html基本结构属性语义化为什么要语义化 示例head中属性样式一些概念块级元素与行级元素空白折叠 html编程没有css的html显示逻辑 html基本结构 html基本单元就是元素&#xff0c;每个元素有标记和属性&#xff0c;如&#xff1a; <a href"...">www&…...

push github

一、生成密钥 打开git bash执行下面指令&#xff0c;Enter下一步Enter下一步..生成ssh key 密钥&#xff1b; ssh-keygen -t rsa 二、 复制公共密钥到git hub 登录github&#xff0c;在选项setting >> SSH and GPG key >> add new ssh添加刚才的公钥地址即可 验证…...

iFluor 594 Styramide是一种荧光染料,常用于生物分子标记和成像

试剂 | 基础知识概述&#xff08;部分&#xff09;: 中文名称&#xff1a;Alexa Fluor 594酪Styramide 分子量&#xff1a;1341.71 胺的优异替代品 100 Slides 英文名称&#xff1a;iFluor 594 Ex (nm)&#xff1a;588 Em (nm)&#xff1a;604 规格标准&#xff1a;1g&am…...

动态规划入门之01背包变形嗑药

P1802 5 倍经验日 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 嗑药固然可耻&#xff0c;但是能让你快速变强 --鲁迅 手动滑稽&#xff0c;话归正题 动态规划之背包入门01背包模板_爱莉我老婆的博客-CSDN博客 这是01背包的模板&#xff0c;没看的可以去看看。 我们把…...

数据结构——栈和队列OJ题

栈和队列小提升&#xff01; 前言一、用队列实现栈队列接口实现&#xff08;1&#xff09;栈的接口定义&#xff08;2&#xff09;栈的初始化&#xff08;3&#xff09;入栈函数的定义&#xff08;4&#xff09;出栈函数的定义&#xff08;5&#xff09;查找栈顶元素&#xff0…...

同态排序算法

参考文献&#xff1a; [Batcher68] Batcher K E. Sorting networks and their applications[C]//Proceedings of the April 30–May 2, 1968, spring joint computer conference. 1968: 307-314. [SV11] Smart, N.P., Vercauteren, F.: Fully homomorphic SIMD operations. IA…...

“深入探索JVM内部机制:解析Java虚拟机的工作原理“

标题&#xff1a;深入探索JVM内部机制&#xff1a;解析Java虚拟机的工作原理 摘要&#xff1a;本文将介绍Java虚拟机&#xff08;JVM&#xff09;的工作原理&#xff0c;包括类加载、内存管理、垃圾回收和字节码执行等方面。通过深入理解JVM的内部机制&#xff0c;开发人员可以…...

为应用程序接入阿里云CDN优化网站访问速度

文章目录 1.KodCloud云盘系统接入CDN之前的效果2.配置KodCloud云盘接入CDN加速器2.1.添加CDN域名2.2.配置域名信息2.3.CDN推荐配置设置2.4.CDN加速器配置完成 3.配置云解析DNS增加CDN域名的解析4.为CDN加速器配置HTTPS5.验证网站是否接入CDN6.访问应用程序观察请求速度7.观察CD…...

索引设计规范

索引是帮助数据库高效获取数据的数据结构。索引是加速查询的常用技术手段。在设计索引时&#xff0c;要遵循索引设计规范&#xff0c;避免不必要的踩坑。 【推荐】索引存储结构推荐BTREE InnoDB和MyISAM存储引擎表&#xff0c;索引类型必须为BTRER&#xff0c;MEMORY表可以根…...

Appium 2安装与使用java对Android进行自动化测试

文章目录 1、Appium 2.1安装1.1、系统要求1.2、安装Appium2.1服务1.3、安装UiAutomator2驱动1.4、安装Android SDK platform tools1.5、下载OpenJDK 2、Android自动代码例子2.1、安装Android自动化测试元素定位工具Appium Inspector2.2、编写android app自动化测试代码和使用ex…...

小程序运营方式有哪些?如何构建小程序运营框架?

​如今&#xff0c;每个企业基本都做过至少一个小程序&#xff0c;但由于小程序本身不具备流量、也很少有自然流量&#xff0c;因此并不是每个企业都懂如何运营小程序。想了解小程序运营方式方法有哪些&#xff1f; 在正式运营小程序前&#xff0c;了解小程序的功能与企业实际经…...

【golang】for语句和switch语句

使用携带range子句的for语句时需要注意哪些细节&#xff1f; numbers1 : []int{1, 2, 3, 4, 5, 6} for i : range numbers1 {if i 3 {numbers1[i] | i} } fmt.Println(numbers1)这段代码执行后会打印出什么内容&#xff1f; 答案&#xff1a;[1 2 3 7 5 6] 当for语句被执行…...

三、数据库索引

1、索引介绍 索引是一种用于快速查询和检索数据的数据结构&#xff0c;其本质可以看成是一种排序好的数据结构。 常见的索引结构有&#xff1a;B数&#xff0c;B树&#xff0c;Hash和红黑树等。在MySQL中&#xff0c;无论是 InnoDB还是MyISAM&#xff0c;都使用了B树作为索引…...

长时间带什么耳机最舒服,分享长时间佩戴舒服的耳机推荐

时代在进步&#xff0c;科技在不断革新。近年来&#xff0c;一种崭新的耳机——骨传导耳机&#xff0c;如火如荼地进驻耳机市场&#xff0c;引起一阵热潮。不论是平日里的工作出勤还是运动时的挥洒汗水&#xff0c;相比传统耳机&#xff0c;骨传导耳机无疑更加贴合现代生活的需…...

Yolov8小目标检测(1)

💡💡💡本文目标:通过原始基于yolov8的红外弱小目标检测,训练得到初版模型,进行问题点分析; 💡💡💡Yolo小目标检测,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供每一步步骤和源码,带你轻松实现小目标检测涨点 💡💡…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...