一、Transforms的结构及用法
- 导入transforms
from torchvision import transforms
- 作用:图片输入transforms后,可以得到一些预期的变换
1. Transforms的python用法
写在前面:tensor数据类型
通过transforms.ToTensor去说明两个问题:第一,transforms该如何使用;第二,Tensor数据类型相较于普通数据类型有什么区别,为什么需要tensor这个数据类型。
(1)将PIL或numpy.ndarray类型的图片转化为tensor数据类型
具体方法:transforms.Totensor()
from torchvision import transforms
tensor_trans=transforms.ToTensor() #创建transforms.ToTensor()工具
tensor_img=tensor_trans(pic) #pic为要转化为tensor类的PIL或numpy.ndarray类型的图像数据
举例:
from torchvision import transforms
from PIL import Image
#读入图像如果读取绝对路径要把\改为\\,如果读取相对路径,则没有这样的困扰
img_path="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg" #图片路径
img=Image.open(img_path)
print(img)
#将PIL类型图片转化为tensor类型的图片
tensor_trans=transforms.ToTensor()
tensor_img=tensor_trans(img)
print(tensor_img)
#将numpy.ndarray类型的图片转化为tensor类型
import cv2
cv_img=cv2.imread(img_path) #将图片转化为ndarray数据
tensor_cv_img=tensor_trans(cv_img)
print(tensor_cv_img)
补充:如何读取tensor类型的图片数据
- 方法:同样是上一篇提到的SummaryWriter中的add_image函数。下面是一个代码实例。
from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("logs")
writer.add_image("Tensor_img",tensor_img)
writer.close()
(2)为什么需要tensor数据类型?
- tensor数据类型内部包含了神经网络理论基础需要的一些参数
二、常见的Transforms
功能 | 数据类型 | 对应函数 |
---|---|---|
输入 | PIL | Image.open() |
输出 | tensor | Totensor() |
作用 | narrays | cv.imread() |
1. Compose类详解
- 主要作用:将不同的transforms结合到一起,比如让不同类型的数据先经过一个中心裁剪,再合成一个tensor类型的数据
(1)关于Compose类中__call__函数的一些说明
随便写个类举例子:
class Person:
def __call__(self, name):
print("__call__ "+"Hello "+name)
def