Transforms(一)

一、概念

transforms就像是一个工具箱,里面装有很多类 (比如:totensor、resize等,可以在结构里查看到一个列表),类就是工具。

但是类不能直接使用,要创建其实例对象之后才能调用(tool=transforms.ToTensor())

而   实例对象名(参数) 这种形式可以自动调用call方法,进行工具的使用。

补充: call方法可以使对象具有当作函数的功能,当你调用对象实例并且参数满足条件时,就会自动调用call方法(说白了就是先实例化,满足条件后自动调用call方法)

注意到:init方法是 类名(参数),而call方法是 实例对象名(参数),都是能自动调用的

二、为什么需要Transforms?

tensor类型包装了一些训练神经网络所必须用到的参数(比如grad梯度)

三、如何使用Transforms?(以其中的ToTensor类为例)

ToTensor:把PIL.Image或numpy.array类型转成Tensor类型

实例化   +   实例名(参数:要转换的对象),即可调用

from PIL import Image
from torchvision import transforms

img_path=r"C:\Users\zzr\Desktop\Learning\dataset\hymenoptera_data\train\bees\16838648_415acd9e3f.jpg"
img=Image.open(img_path) #PIL.Image类型

tensor_trans=transforms.ToTensor() #生成ToTensor类的实例
img_tensor=tensor_trans(img) #把PIL.Image类型转换成torch.Tensor类型

print(img_tensor)


***区分:

使用Image.open('path’)生成的是 PIL.Image类型;

from PIL import Image

img_path="dataset/hymenoptera_data/train/bees/359928878_b3b418c728.jpg"
img_PIL=Image.open(img_path) #生成图像的PIL对象

使用cv2.imread('path')生成的是numpy.array类型

import cv2

img_path = r"C:\Users\zzr\Desktop\Learning\dataset\hymenoptera_data\train\bees\16838648_415acd9e3f.jpg"
img_array=cv2.imread(img_path) #numpy.array类型

(add_image要使用numpy.array或torch.Tensor类型) 

numpy.array(一个方法):PIL.Image——>numpy.array

img_array=np.array(img_PIL) #将PIL.Image类型转为numpy.array类型

ToTensor(一个类,仍需实例化):PIL.Image或numpy.array——>Tensor

tensor_trans=transforms.ToTensor() #生成ToTensor类的实例
img_tensor=tensor_trans(img_PIL) #把PIL.Image类型转换成torch.Tensor类型

上一篇:PDF文件页面提取操作小指南


下一篇:【系统架构设计师】目录提纲