二、torchvision中的transforms,及常见的使用

小土堆视频链接:https://www.bilibili.com/video/BV1hE411t7RN?spm_id_from=333.788.videopod.episodes&vd_source=6cb513d59bf1f73f86d4225e9803d47b&p=10

前置知识:

  • __call__()是一种magic method,在类中实现这一方法可以使该类的实例(对象)想函数一样被调用
  • ToTensor类中包含__call__(self,pic)函数
    image

常见的Transforms:

事实上Transforms中包含了许多类:
image

以下是一些常见的用法:

1. ToTensor:

  1. 使用ToTensor创建对象
form PIL import Image
from torchvison import transforms

img_path="hymenoptera_data/train/ants/0013035.jpg"
img=Image.open(img_path)

# 使用ToTensor创建一个对象
tensor_trans=transforms.ToTensor()
# 这里使用了magic function,ToTensor类中包含了__call__()函数,所以可以直接将新建的对象实例当成函数使用,并传入参数
tensor_img=tensor_trans(img)
  1. 如何读取tensor数据(接着上文)
from torch.utils.tensorboard import SummaryWriter

writer=SummaryWriter("logs")
writer.add_image("tensor_img",tensor_img)
writer.close()

2. Normalize:

image
image
该方法将所输入的tensor类型的图片进行归一化

writer=SummaryWriter("logs")
img_path="..." # 图片的相对路径
img=Image.open(img_path)
print(img)

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

# 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("img_norm",img_norm,1)

writer.close()

3.Resize:

image
image

# Resize
print(img.size)
trans_resize=transforms.Resize((512,512))
img_resize=trans_resize(img)
# PIL -> resized PIL -> resized tensor
img_resize_tensor=trans_totensor(img_resize)
# PIL -> tensor ->resized tensor (现在的Resize方法进行了优化,可以直接传入tensor数据)
img_resize_tensor1=trans_resize(img_tensor)

# 显示两种方法的图像,结果是一样的
writer.add_image("img_resize_tensor",img_resize_tensor,1)
writer.add_image("img_resize_tensor1",img_resize_tensor1,1)
print(img_resize)

4.Compose

Compose中的参数是一个列表,python中的列表示形式是[数据1,数据2,···]。Compose中,数据需要时transforms类型,所以得到Compose([transforms参数1,transforms参数2,···])
image

#compose - resize - 2
trans_resize_2=transforms.Resize(512)
#组合起来,按顺序执行
trans_compose=transforms.Compose([trans_resize_2,trans_totensor])
img_resize_2=trans_compose(img)
writer.add_image("img_resize_2_tensor",img_resize_2,1)

Transforms学习总结:

  • 关注输入输出类型
  • 多看官方文档
  • 关注方法需要什么参数
  • 不知道返回值时,使用print(),或者是print(type()),或者是debug
posted @ 2025-03-11 16:58  W-Vicky11  阅读(58)  评论(0)    收藏  举报