【PyTorch】Transforms基本使用

news2025/7/22 10:20:27

文章目录

  • 二、Transforms基本使用
    • 1、Transforms的结构及用法
      • 1.1 如何使用
      • 1.2 TensorBoard查看
    • 2、常用的Transforms
      • 2.1 ToTensor
      • 2.2 Normalize
      • 2.3 Resize
      • 2.4 Compose
      • 2.5 RandomCrop

二、Transforms基本使用

Transforms主要是对特定格式的图片进行一些变化。

1、Transforms的结构及用法

Compose:

ToTensor:

1.1 如何使用

PIL Image to Tensor

from torchvision import transforms
from PIL import Image

img_path = "../data/tensorboard_data/train/ants_image/0013035.jpg"
img = Image.open(img_path)  # <class 'PIL.JpegImagePlugin.JpegImageFile'>

tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)

print(tensor_img)
tensor([[[0.3137, 0.3137, 0.3137,  ..., 0.3176, 0.3098, 0.2980],
         [0.3176, 0.3176, 0.3176,  ..., 0.3176, 0.3098, 0.2980],
         [0.3216, 0.3216, 0.3216,  ..., 0.3137, 0.3098, 0.3020],
         ...,
         ...,
         [0.9294, 0.9294, 0.9255,  ..., 0.5529, 0.9216, 0.8941],
         [0.9294, 0.9294, 0.9255,  ..., 0.8863, 1.0000, 0.9137],
         [0.9294, 0.9294, 0.9255,  ..., 0.9490, 0.9804, 0.9137]]])

numpy.ndarry to Tensor

from torchvision import transforms
import cv2

img_path = "../data/tensorboard_data/train/ants_image/0013035.jpg"
img = cv2.imread(img_path)  # <class 'numpy.ndarray'>

tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)

print(tensor_img)
tensor([[[0.9137, 0.9137, 0.9137,  ..., 0.9176, 0.9098, 0.8980],
         [0.9176, 0.9176, 0.9176,  ..., 0.9176, 0.9098, 0.8980],
         [0.9216, 0.9216, 0.9216,  ..., 0.9137, 0.9098, 0.9020],
         ...,
         ...,
         [0.3412, 0.3412, 0.3373,  ..., 0.1725, 0.3725, 0.3529],
         [0.3412, 0.3412, 0.3373,  ..., 0.3294, 0.3529, 0.3294],
         [0.3412, 0.3412, 0.3373,  ..., 0.3098, 0.3059, 0.3294]]])

1.2 TensorBoard查看

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

img_path = "../data/tensorboard_data/train/ants_image/0013035.jpg"

img = Image.open(img_path)

writer = SummaryWriter("logs")

tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)

writer.add_image("tensor_img", tensor_img)

writer.close()

2、常用的Transforms

2.1 ToTensor

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

writer = SummaryWriter("logs")
img = Image.open("../images/pytorch.webp")

trans_totensor = transforms.ToTensor()
img_totensor = trans_totensor(img)

writer.add_image("ToTensor", img_totensor)
writer.close()

2.2 Normalize

1、计算公式:

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

2、本实例中即:

(input - 0.5)/0.5 = 2 * input - 1

3、大致范围:

input[0, 1] —> result[-1, 1]

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

writer = SummaryWriter("logs")
img = Image.open("../images/pytorch.webp")

# 1.ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)

# 2.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()

2.3 Resize

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

writer = SummaryWriter("logs")
img = Image.open("../images/pytorch.webp")

# 1.ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)

# 2.Resize
print(img.size)  # (889, 500)
# img PIL -> resize -> img_resize PIL
trans_resize = transforms.Resize((450, 450))
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_resize(img)
print(img_resize)  # <PIL.Image.Image image mode=RGB size=450x450 at 0x1485DFE6310>
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)

writer.close()

2.4 Compose

还可以直接使用Compose

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

writer = SummaryWriter("logs")
img = Image.open("../images/pytorch.webp")

# 1.ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)

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

2.5 RandomCrop

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

writer = SummaryWriter("logs")
img = Image.open("../images/pytorch.webp")

# 1.ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)

# 2.RandomCrop
trans_random = transforms.RandomCrop((250, 444))
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()

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

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

相关文章

展锐UIS8310 CAT4物联网模块简介

1.简介 UIS8310是一个高度集成的应用处理器&#xff0c;支持TDD-LTE、FDD-LTE和WCDMA、GSM/GPRS/EDGE制式&#xff0c;并且支持LPDDR2。它的AP处理器是单核ARM CortexTM A7 1GHz&#xff0c;旨在为物联网提供经济高效、低功耗和高性能的解决方案。 UIS8310经过特别优化的架构可…

Servlet之RequestReponse 学习笔记

1 Request 1.1 Request继承关系 ServletRequest Java提供的请求对象根接口 HttpServletRequest Java提供的对Http协议封装的请求对象接口 RequestFacade Tomcat定义的实现类WebServlet("/demo2") public class Servlet2Demo extends HttpServlet {Overridep…

Vue 路由router的介绍以及使用方法

路由&#xff1a;简单来说类似于路由器&#xff0c;中转站。 1.理解: 一个路由&#xff08;route&#xff09;就是一组映射关系&#xff08;key - value&#xff09;&#xff0c;多个路由需要路由器&#xff08;router&#xff09;进行管理。 2.前端路由&#xff1a;key是路径&…

同源策略、跨域与JSONP

跨域与JSONP一、了解同源策略和跨域1.1 同源策略1.2 跨域二、JSONP2.1 什么是JSONP2.2 JSONP的实现原理2.3 自己实现一个简单的JSONP2.4 JSONP的缺点2.5 jQuery中的JSONP2.6 自定义参数及回调函数名称2.7 jQuery中JSONP的实现过程三、案例-淘宝搜索一、了解同源策略和跨域 1.1…

软考考完了,如何评职称?

很多考生以为软考初级、中级、高级资格考试通过了就是相应的职称了&#xff0c;然而并不是这样的&#xff0c;通过了软考考试只是相当于有了评职称的资格&#xff0c;并不是有了相应职称。 有了软考证书是可以申请评职称的&#xff0c;因为有了软考证书就有了评职称的资格哦&a…

【前端】flet:一款(即将)支持多语言开发的UI库

文章目录介绍开发生态支持语言运行体验组件API热更新开发计划 Roadmap2022 7月-8月安全手机端桌面端Controls(控件)核心功能用户指引&#xff08;User education&#xff09;2022 9月到12月手机端控件&#xff08;Controls&#xff09;编程语言支持核心功能介绍 Flet enables …

【云原生 | Kubernetes 系列】--Gitops持续交付 CD Push Pipeline实现

1. Tekton Trigger基础 Tekton Triggers简介 - 监控特定的事件,并在满足条件时自动触发Tekton PipelineTekton Triggers 为用户提供了一种声明式API 它允许用户按需定义监视的事件,并将其与特定的Pipeline连接,从而实例化出PipelineRun还允许将事件中的某些属性值信息注入到P…

使用springboot每日推送早安问候语到用户微信

本文主要实现给不同的用户推动不同的问候模板 准备工作 申请微信公众平台的测试号 申请微信测试公众号 创建成功后&#xff0c;可以看到appid和appsecret&#xff0c;这个后面认证时需要 申请模板 可自行修改 今天是&#xff1a;{{now.DATA}} 不管那一天&#xff0c;每一天…

【科学文献计量】科学文献知识网络分析基础

科学文献知识网络分析基础 1 知识网络分析基础2 知识网络图构成2.1 简单网络图绘制2.2 完整网络图绘制3 知识网络图中的术语3.1 术语和统计量概念3.2 获取术语信息实例3.3 最大子群和网络图孤立点的识别3.4 网络图节点度信息的统计1 知识网络分析基础 从分析的角度来看,社会网…

安保公司的商业计划书

安保公司的商业计划书年轻人&#xff0c;来做保安吧&#xff0c;少走二十年弯路安保公司的商业计划书安保品牌公司的商业模式真正的路反潮流&#xff0c;不上大学去创业&#xff0c;其实反而是领先的。 工厂肯定不能创业的&#xff0c;因为打工的技能和创业的技能不同。 如果…

【附源码】计算机毕业设计JAVA茶园文化交流平台演示录像2020

【附源码】计算机毕业设计JAVA茶园文化交流平台演示录像2020 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1…

SpringBoot框架Mockito的使用

SpringBoot框架Mockito的使用 一、简介 mock测试就是在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象&#xff0c;用一个虚拟的对象来创建以便测试的测试方法。 在具体的测试过程中&#xff0c;我们经常会碰到需要模拟数据或者接口的情况&#xff0c;因为环…

线性模型(穷举法实现)

参考视频&#xff1a;2.线性模型_哔哩哔哩_bilibili 参考视频中实现ywxywxywx 的代码&#xff0c;在加上偏置b后实现 ywxbywxbywxb 的线性模型 假设我们有这样一个线性模型&#xff1a;ywxbywxbywxb X和Y对应的数据如下 XY1.05.02.08.03.011.04.0&#xff1f; 预测值&#x…

开源知识付费APP代码分析

如今&#xff0c;传统的学校已经不能满足大众多元化的需求&#xff0c;各种教育培训机构落地生根。随着时间的推移&#xff0c;互联网与传统教育的结合也开拓了一种新的教育方式&#xff0c;这就是广为人知的知识付费。在线教育的突然崛起多半是因为疫情的“催化”&#xff0c;…

OceanBase 4.0 - 从分布式到单机,从单机到分布式

近些年国产化数据库如雨后春笋般冒出并遍地开花。据某技术平台不完全统计&#xff0c;国产化数据库&#xff08;见图 &#xff09;已达 200余个&#xff0c;对于这些数据库的名字&#xff0c;即使作为多年数据库从业者的我&#xff0c;也有很多是第一次听说。在这竞争激烈的数据…

FFplay文档解读-49-多媒体过滤器三

32.14 sendcmd, asendcmd 将命令发送到filtergraph中的过滤器。 这些过滤器读取要发送到filtergraph中其他过滤器的命令。 必须在两个视频滤镜之间插入sendcmd&#xff0c;必须在两个音频滤镜之间插入asendcmd&#xff0c;但除此之外&#xff0c;它们的行为方式相同。 可以…

[附源码]java毕业设计基于的高校学生考勤管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

vue中tinymce的使用

1.下载 npm i tinymce5.10.3 tinymce/tinymce-vue3.2.8 -S2.在node_modules中找到 &#xff08;我这里是vue2&#xff0c;vue3不是写在public下&#xff0c;具体的可以搜搜 看看&#xff09; 3.在public中新建 tinymce 文件夹 把三个文件复制进去 4.在components文件夹中新建…

Unity架构之详解域重新加载和场景重新加载

一、unity进入运行模式包括以下主要阶段 备份当前场景&#xff1a;这仅在场景被修改后发生。这样当退出运行模式时&#xff0c;Unity 将场景恢复为运行模式开始前的状态。Domain Reload&#xff1a;通过重新加载脚本域来重置脚本状态。Scene Reload&#xff1a;通过重新加载场…

h264编码算法流程

xh264编解码&#xff1a; 编码层&#xff1a;视频压缩解压缩等核心算法&#xff0c;VLC就是这一系列算法&#xff0c;得到的是编码后的比特序列&#xff0c;即VLC数据。 网络抽象层&#xff1a;将压缩后的原始码流拼接头信息用于解码时来识别&#xff0c;安排格式以方便后续的…