首页 > 其他分享 >Pytorch入门-Transforms

Pytorch入门-Transforms

时间:2024-03-13 20:36:22浏览次数:36  
标签:__ 入门 image imge Pytorch transforms import trans Transforms

目录

在PyTorch中,transforms是一个用于图像预处理和数据增强的模块,通常与torchvision库一起使用。torchvision提供了大量预先定义的transforms,它们可以方便地应用于图像数据,以进行预处理或增强。这些transforms对于训练和评估机器学习模型(尤其是深度学习模型)非常有用。

python中的call方法
在Python中,__call__ 是一个特殊方法,也被称为“魔法方法”或“双下划线方法”。当一个对象实例被当作函数一样调用时,Python会自动调用该对象的 __call__ 方法。这意味着你可以定义你自己的对象,使其能够被“调用”,就像调用一个函数一样。

class Person:
    def __call__(self,name):
        print("__call__"+"Hello"+name)

    def hello(self,name):
        print("hello"+name)

person = Person()
person("zhangsan")
person.hello("lisi")

image

class CallableClass:  
    def __init__(self, value):  
        self.value = value  
  
    def __call__(self, *args, **kwargs):  
        print(f"Called with {args} and {kwargs}")  
        return self.value  
  
# 创建一个实例  
obj = CallableClass(42)  
  
# 使用该实例,就像调用一个函数一样  
result = obj(1, 2, 3, a=4, b=5)  
  
print(result)  # 输出: 42

Compose

在PyTorch中,Compose是一个功能强大的工具,它允许你将多个转换(transforms)组合成一个单一的转换序列。这样,你就可以一次性地对数据进行一系列复杂的预处理操作。Compose通常与torchvision.transforms模块一起使用,该模块提供了许多预定义的转换函数。

from torchvision import transforms  
  
# 定义一系列的转换  
transform_sequence = transforms.Compose([  
    transform1,  
    transform2,  
    transform3,  
    # ...  
])  
  
# 然后你可以将这个转换序列应用于图像  
transformed_image = transform_sequence(image)
from torchvision import transforms  
from PIL import Image  
  
# 加载一张图像  
image = Image.open('path_to_image.jpg')  
  
# 定义转换序列  
transform = transforms.Compose([  
    transforms.Resize((256, 256)),  # 将图像大小调整为256x256  
    transforms.CenterCrop(224),     # 从中心裁剪出224x224的区域  
    transforms.ToTensor(),           # 将PIL图像或NumPy ndarray转换为torch.Tensor  
    transforms.Normalize(           # 对图像进行标准化  
        mean=[0.485, 0.456, 0.406], # 使用ImageNet数据集上的RGB通道的均值  
        std=[0.229, 0.224, 0.225]   # 使用ImageNet数据集上的RGB通道的标准差  
    )  
])  
  
# 应用转换序列到图像  
transformed_image = transform(image)

在这个例子中,我们首先使用Resize将图像大小调整为256x256,然后使用CenterCrop从中心裁剪出224x224的区域。接着,使用ToTensor将图像转换为PyTorch张量,最后使用Normalize对图像进行标准化处理。所有这些转换都被组合在一起,并通过一次调用transform(image)来应用。

ToTensor

image

这是transforms源码中的解释

在PyTorch中是一个常用的转换函数,用于将PIL Image或NumPy ndarray转换为torch.Tensor。但是,在转换过程中,它会自动将图像的像素值范围从[0, 255]缩放到[0.0, 1.0]。这通常是因为神经网络的输入通常期望在[0.0, 1.0]范围内。

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

writer = SummaryWriter("logs")
imge_path = "images/OIP.jpg"
imge = Image.open(imge_path)
trans_totensor = transforms.ToTensor()
# 这是就是call函数的调用
imge_tensor = trans_totensor(imge)

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

Normalize

image
归一化公式:

\[output[channel] = \frac{(input[channel] - mean[channel])}{std[channel]} \]

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

writer = SummaryWriter("logs")
imge_path = "images/OIP.jpg"
imge = Image.open(imge_path)

# ToTensor
trans_totensor = transforms.ToTensor()
imge_tensor = trans_totensor(imge)
writer.add_image("ToTensor", imge_tensor)

print(imge_tensor[0][0][0])
# Normalize
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(imge_tensor)
print(img_norm[0][0][0])
writer.add_image("Norm",img_norm)


writer.close()

可以看出来归一化的结果还是有些不同的
image

Resize

# Resize
print(imge.size)
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(imge)

print(img_resize)
img_resize=trans_totensor(img_resize)
writer.add_image("Resize",img_resize,0)

writer.close()

标签:__,入门,image,imge,Pytorch,transforms,import,trans,Transforms
From: https://www.cnblogs.com/cxy8/p/18070783

相关文章

  • spark大数据快速编程入门
    1.Hadoop生态圈相关组件 namenode:master节点,处理客户端的请求。datanode:slave节点,存储实际数据,汇报存储信息给namenode。client:切分文件,访问hdfs,与namenode交互,获取文件位置信息,与datanode交互,读取和写入数据。secondarynamenode:辅助namenode,分担其工作量,紧急情况下和辅......
  • Proxmark3入门指南
    Proxmark3笔记——Proxmark3完全入门指南写在前面这里所有针对扇区、区块的计数都是从0开始算一些需要知道的知识为了能看懂笔记,需要能回答以下问题ID卡和IC卡主要的区别是什么?什么是全加密卡和半加密卡,区别是什么。IC卡分哪几个大类?IC卡的卡号储存在哪个扇区?是前几位......
  • 【模型转换】PyTorch模型转ONNX模型
    我们主要使用torch.onnx.export()函数来实现PyTorch模型到ONNX模型的转换。importtorchimporttorchvision.modelsasmodelsdevice="cpu"#加载预训练的ResNet18模型model=models.resnet18(pretrained=True)model.eval().to(device)#定义输入input=torc......
  • C++初阶:1_C++入门
    C++入门零.本节知识点安排目的C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标:补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用域方面、IO方面、函数......
  • PCB 从入门到未知
    首先声明:本人纯属记录自己的学习过程,如果此篇文章有一丝作用,请点赞加关注,会持续记录自己的学习过程1.新建工程的步骤(1)先建立一个PCB工程(2)给PCB添加一个Schemtic2.安装库文件(1)点击库,进入到安装界面(2)点击安装,找到自己存放库的文件夹(3)选中要安装的文件,然后点击打开即......
  • Pandas从入门到精通
    Pandas一、Pandas简介1.pandas是什么Pandas是一个开源的数据分析和数据处理库,它是基于Python编程语言的Pandas提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。Pandas是数据科学和分析领域中常用的工具之一,它使得用户能够轻......
  • 浅淡 C++ 与 C++ 入门
            我们知道,C语言是结构化和模块化的语言,适用于较小规模的程序。而当解决复杂问题,需要高度抽象和建模时,C语言则不合适,而C++正是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式。        因此在这篇博客,将会介绍C++中引入哪些......
  • 【自动化测试入门】用Airtest - Selenium对Firefox进行自动化测试(0基础也能学会)
    1.前言本文将详细介绍如何使用AirtestIDE驱动Firefox测试,以及脱离AirtestIDE怎么驱动Firefox(VScode为例)。看完本文零基础小白也能学会Firefox浏览器自动化测试!!!2.如何使用AirtestIDE驱动Firefox浏览器对于Web自动化测试,目前AirtestIDE支持chrome浏览器和Firefox2种浏览器,今天......
  • ThreadLocal 快速入门
    ThreadLocal快速入门ThreadLocal是Java中的一个类,用于创建线程局部变量。线程局部变量是一种特殊的变量,每个线程都有自己的副本,互相之间不会相互影响。这在多线程环境中非常有用,可以避免线程间共享变量导致的并发问题。定义与作用:ThreadLocal是Java中的一个类,用于......
  • springmvc入门登录功能
    学习springmvc的时候的一个入门功能,登录功能。配置好web框架,导入需要springjar包和springmvc需要的两个jar包,就可以编码了,首先写了登录需要的jsp页面<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>Title</title></hea......