Transforms的使用
Transform的作用
把图片经过Transforms的一些函数之后就会对图片进行一些变化。比如,resize就是改变其大小,totensor就是把图片PIL或者numpy类型转化为Tensor类型。
Transforms的结构及和 用法
totensor的使用
Transforms下的toTensor是一个对象,我们需要先实例化一个对象之后再通过这个实例化的对象进行调用。
from torchvision import transforms
tensor_class = transforms.ToTensor()
img_tensor = tensor_class(img_PIL)
为什么使用transforms转化为Tensor类型
因为tensor类型包装了我们神经网络中所需要的一些参数,而PIL或者numpy类型是没有的。

ToTensor实例代码
from PIL import Image
from torchvision.transforms import transforms
from torch.utils.tensorboard import SummaryWriter
img_PIL = Image.open("Dataset/hymenoptera_data/train/ants/0013035.jpg")
# print(img_PIL)
tensor_class = transforms.ToTensor()
img_tensor = tensor_class(img_PIL)
writer = SummaryWriter('logs')
writer.add_image('tensor-test',img_tensor,1,)
# print(img_tensor)
writer.close()
效果如下

常用的Transforms
Transforms的使用主要就是使用其中的一些常见 的类比如ToTensor(),Resize(),使用这些类的时候主要是注意其输入和输出,作用。最主要的是输入和输出。下图是transforms中的类,可以使用pycharm中的structure功能查看一个py文件中的函数和类。AIT+7快捷键

compose类

他的作用就是将transforms中的几个类结合使用。比如
transforms.Compose([transforms.CenterCrop(10),transforms.ToTensor()])
意思就是先进行CenterCrop再进行Totensor操作,要注意前一个类的输出符合后一个类的输入。
举例:
trans_Compose = transforms.Compose([transforms.Resize(216),transforms.ToTensor()])
img_PIL_to_resize_to_tensor = trans_Compose(img_PIL)
print(type(img_PIL_to_resize_to_tensor))
效果输出:

Normalize类
transforms.Normalize 是一个在深度学习库 PyTorch 中广泛使用的图像预处理函数,属于 torchvision.transforms 模块。该函数主要用于对输入数据(尤其是图像数据)进行标准化处理,以便提升模型训练的效率和效果。标准化处理的具体操作是对数据的每个通道(对于RGB图像即红、绿、蓝三个通道)执行如下操作:
output[channel] = (input[channel] - mean[channel]) / std[channel]
。通过这种方式,数据会被调整到均值为0、标准差为1的分布,这样的处理有助于消除不同通道间尺度不一致的问题,并使得模型学习过程更加稳定。
在实际应用中,transforms.Normalize 需要两个参数:mean 和 std,它们分别是每个通道的均值和标准差的列表。例如,对于典型的ImageNet数据集,常用的参数值为 mean=[0.485, 0.456, 0.406] 和 std=[0.229, 0.224, 0.225]。
需要注意的是,在应用 transforms.Normalize 之前,数据往往需要被转换成 PyTorch 的 Tensor 格式且其值通常位于[0, 1]或[-1, 1]区间内,这通常通过 transforms.ToTensor() 或其他预处理步骤完成。
from PIL import Image
from torchvision.transforms import transforms
from torch.utils.tensorboard import SummaryWriter
img_PIL = Image.open("Dataset/hymenoptera_data/train/ants/0013035.jpg")
# print(img_PIL)
#Totensor
tensor_class = transforms.ToTensor()
img_tensor = tensor_class(img_PIL)
#Nor
print(img_tensor[0][0][0])
trans_Nor = transforms.Normalize([1,2,0.5],[1,0.5,0.5])
img_Normal = trans_Nor(img_tensor)
print(img_Normal[0][0][0])
#
writer = SummaryWriter('logs')
writer.add_image('Totensor',img_tensor,1,)
writer.add_image('Normal',img_Normal,2)
# print(img_tensor)
writer.close()
效果如下:

Resize
改变图片大小,输入要么是(H,W)或者是一个整数,如果是(H,W)那么照片就是固定这个比例,如果是整数,那么就按照最小边来处理。通常适用于预处理那些尺寸不一的图像,使其适配模型所需的固定输入尺寸,同时保持图像内容的自然外观。
from PIL import Image
from torchvision.transforms import transforms
from torch.utils.tensorboard import SummaryWriter
img_PIL = Image.open("Dataset/hymenoptera_data/train/ants/0013035.jpg")
# print(img_PIL)
#Totensor
tensor_class = transforms.ToTensor()
img_tensor = tensor_class(img_PIL)
#Nor
print(img_tensor[0][0][0])
trans_Nor = transforms.Normalize([1,2,0.5],[1,0.5,0.5])
img_Normal = trans_Nor(img_tensor)
print(img_Normal[0][0][0])
#Resize
trans_Resize = transforms.Resize((100,300))
img_resize = trans_Resize(img_tensor)
# print(img_resize.shape)
#
writer = SummaryWriter('logs')
writer.add_image('Totensor',img_tensor,1,)
writer.add_image('Normal',img_Normal,2)
writer.add_image('resize',img_resize,3)
# print(img_tensor)
writer.close()
效果如下:

对于其他类的使用,多看官方文档,不会就翻译或者问chatgpt
Transforms的使用的更多相关文章
- Intro to CSS 3D transforms
原文地址:Intro to CSS 3D transforms,本文只是翻译了其中的一部分,省去了作者写文章的原因浏览器兼容部分(已经过时) Perspective 元素需要设置需要设置perspec ...
- OpenCASCADE Coordinate Transforms
OpenCASCADE Coordinate Transforms eryar@163.com Abstract. The purpose of the OpenGL graphics process ...
- IE10开始支持CSS3 Transitions, Transforms 和 Animations
这是一个好消息,微软公开说明IE10预览版已经支持CSS3属性 Transitions, Transforms 和 Animations,你可以直接写transitions,而不是加个恶心的前缀-ms ...
- CSS3 笔记四(Transforms/Transition/Animations)
CSS3 2D Transforms Methods translate() rotate() scale() skewX() skewY() matrix() 1> translate() T ...
- 前端开发教程:使用 CSS3 Transforms 构建圆形导航
在本教程中我将告诉你如何使用 CSS 变换来创建圆形导航.教程逐一讲解实现这个样式将要涉及一些基本的数学知识并配合 CSS 变换来创建这些样式.不过不用担心,这里用到的数学知识真的是很简单的.教程使用 ...
- Codrops 优秀教程:CSS 3D Transforms 实现书本效果
这个使用 CSS 3D Transforms 实现创意书本效果的来自 Codrops 网站.你可以看到两种类型的书设计:精装书和平装书.这两个效果都可以很容易地使用 CSS 修改.赶紧体验一下吧. ...
- CSS3 transforms 3D翻开
R T L B <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- CSS3 Transitions, Transforms和Animation使用简介与应用展示
CSS3 Transitions, Transforms和Animation使用简介与应用展示 by zhangxinxu from http://www.zhangxinxu.com本文地址:htt ...
- 图形变幻矩阵 Transforms
https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d ...
- Cocos2D:变换(transforms)在图形编程中扮演的角色
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...
随机推荐
- Spring AOP里面的通知Advice类型
@Before前置通知 在执行目标方法之前运行 @After后置通知 在目标方法运行结束之后 @AfterReturning返回通知 在目标方法正常返回值后运行 @AfterThrowing异常通知 ...
- PTA数据结构和答案解析
背景:期末数据结构复习题 绪论和线性表 判断题 The Fibonacci number sequence {F N } is defined as: F 0 =0, F 1 =1, F N =F N ...
- NodeJS中Buffer与字符串相互转换时一个值得注意的问题
什么问题 如果一个Buffer的 toString() 结果为乱码或含有乱码,那么用此字符串以 Buffer.from()方法构造出来的Buffer将与原来的Buffer不相同. 这一点其实很好理解, ...
- [oeasy]python0141_自制模块_module_reusability_复用性
自制包内容 回忆上次内容 上次导入了外部的py文件 import my_module 导入一个自己定义的模块 可以使用my_module中的变量 不能 直接使用 my_module.py文件中的变 ...
- oeasy教您玩转vim - 33 - # 查找文本
文字区块 回忆上节课内容 括号间跳转 成对括号间跳转 % 不成对括号间跳转 [( 跳转到上一个没配对的 ( [) 跳转到下一个没配对的 ) [{ 跳转到上一个没配对的 { [} 跳转到下一个没配对 ...
- [rCore学习笔记 012]彩色化LOG
实验要求 实现分支:ch1 完成实验指导书中的内容并在裸机上实现 hello world 输出. 实现彩色输出宏(只要求可以彩色输出,不要求 log 等级控制,不要求多种颜色) 隐形要求 可以关闭内核 ...
- JavaScript高级~数组偏平化
方式一: let arr=[11,[22,[33,[44]]],[55,66,77],88,99,['00']] let arr2=arr.toString().split("," ...
- 一文详解 JuiceFS 读性能:预读、预取、缓存、FUSE 和对象存储
在高性能计算场景中,往往采用全闪存架构和内核态并行文件系统,以满足性能要求.随着数据规模的增加和分布式系统集群规模的增加,全闪存的高成本和内核客户端的运维复杂性成为主要挑战. JuiceFS,是一款全 ...
- java进行文件搜索的一个小案例
分享一个小demo,可以查询某个文件目录下的某个文件并启动,来自黑马的IO教程 import java.io.File; import java.io.IOException; public clas ...
- Anaconda Navigator打不开
问题描述:之前安装的Anaconda Navigator,好久不用了,今天却打不开了,只有那个绿色圆环图标出现在桌面中央,点一下就没了.但jupyter notebook和Spyder可以正常使用. ...