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的使用的更多相关文章

  1. Intro to CSS 3D transforms

    原文地址:Intro to CSS 3D transforms,本文只是翻译了其中的一部分,省去了作者写文章的原因浏览器兼容部分(已经过时) Perspective 元素需要设置需要设置perspec ...

  2. OpenCASCADE Coordinate Transforms

    OpenCASCADE Coordinate Transforms eryar@163.com Abstract. The purpose of the OpenGL graphics process ...

  3. IE10开始支持CSS3 Transitions, Transforms 和 Animations

    这是一个好消息,微软公开说明IE10预览版已经支持CSS3属性 Transitions, Transforms 和 Animations,你可以直接写transitions,而不是加个恶心的前缀-ms ...

  4. CSS3 笔记四(Transforms/Transition/Animations)

    CSS3 2D Transforms Methods translate() rotate() scale() skewX() skewY() matrix() 1> translate() T ...

  5. 前端开发教程:使用 CSS3 Transforms 构建圆形导航

    在本教程中我将告诉你如何使用 CSS 变换来创建圆形导航.教程逐一讲解实现这个样式将要涉及一些基本的数学知识并配合 CSS 变换来创建这些样式.不过不用担心,这里用到的数学知识真的是很简单的.教程使用 ...

  6. Codrops 优秀教程:CSS 3D Transforms 实现书本效果

    这个使用  CSS 3D Transforms 实现创意书本效果的来自 Codrops 网站.你可以看到两种类型的书设计:精装书和平装书.这两个效果都可以很容易地使用 CSS 修改.赶紧体验一下吧. ...

  7. CSS3 transforms 3D翻开

    R T L B   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  8. CSS3 Transitions, Transforms和Animation使用简介与应用展示

    CSS3 Transitions, Transforms和Animation使用简介与应用展示 by zhangxinxu from http://www.zhangxinxu.com本文地址:htt ...

  9. 图形变幻矩阵 Transforms

    https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d ...

  10. Cocos2D:变换(transforms)在图形编程中扮演的角色

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...

随机推荐

  1. Spring AOP里面的通知Advice类型

    @Before前置通知 在执行目标方法之前运行 @After后置通知 在目标方法运行结束之后 @AfterReturning返回通知 在目标方法正常返回值后运行 @AfterThrowing异常通知 ...

  2. PTA数据结构和答案解析

    背景:期末数据结构复习题 绪论和线性表 判断题 The Fibonacci number sequence {F N } is defined as: F 0 =0, F 1 =1, F N =F N ...

  3. NodeJS中Buffer与字符串相互转换时一个值得注意的问题

    什么问题 如果一个Buffer的 toString() 结果为乱码或含有乱码,那么用此字符串以 Buffer.from()方法构造出来的Buffer将与原来的Buffer不相同. 这一点其实很好理解, ...

  4. [oeasy]python0141_自制模块_module_reusability_复用性

    自制包内容 回忆上次内容 上次导入了外部的py文件 import my_module 导入一个自己定义的模块   可以使用my_module中的变量 不能 直接使用 my_module.py文件中的变 ...

  5. oeasy教您玩转vim - 33 - # 查找文本

    ​ 文字区块 回忆上节课内容 括号间跳转 成对括号间跳转 % 不成对括号间跳转 [( 跳转到上一个没配对的 ( [) 跳转到下一个没配对的 ) [{ 跳转到上一个没配对的 { [} 跳转到下一个没配对 ...

  6. [rCore学习笔记 012]彩色化LOG

    实验要求 实现分支:ch1 完成实验指导书中的内容并在裸机上实现 hello world 输出. 实现彩色输出宏(只要求可以彩色输出,不要求 log 等级控制,不要求多种颜色) 隐形要求 可以关闭内核 ...

  7. JavaScript高级~数组偏平化

    方式一: let arr=[11,[22,[33,[44]]],[55,66,77],88,99,['00']] let arr2=arr.toString().split("," ...

  8. 一文详解 JuiceFS 读性能:预读、预取、缓存、FUSE 和对象存储

    在高性能计算场景中,往往采用全闪存架构和内核态并行文件系统,以满足性能要求.随着数据规模的增加和分布式系统集群规模的增加,全闪存的高成本和内核客户端的运维复杂性成为主要挑战. JuiceFS,是一款全 ...

  9. java进行文件搜索的一个小案例

    分享一个小demo,可以查询某个文件目录下的某个文件并启动,来自黑马的IO教程 import java.io.File; import java.io.IOException; public clas ...

  10. Anaconda Navigator打不开

    问题描述:之前安装的Anaconda Navigator,好久不用了,今天却打不开了,只有那个绿色圆环图标出现在桌面中央,点一下就没了.但jupyter notebook和Spyder可以正常使用. ...