9.Transforms的使用(一)(二)

Transforms的使用(一)

Transforms是什么?

Transforms主要是对图片进行一些变换,一般用于数据预处理,数据在读取到pytorch之后通常都需要对数据进行预处理,包括尺寸缩放、转换张量、数据中心化或标准化等等,这些操作都是通过transforms进行的。

1.transforms的结构及用法

结构

创建一个transforms.py的python文件,然后导入库(从torchvision中引用transforms函数)。

from torchvision import transforms

image-20240519033305245

image-20240519033514208

通过上图两次按住Ctrl,查看 transforms.py文件(工具箱),可以看到它定义了很多 class文件(工具)

image-20240519033651682

一些类(工具)

Compose类:结合不同的transforms
ToTensor类:把一个PIL的Image或者numpy数据类型的图片转换成 tensor 的数据类型
ToPILImage类:把一个图片转换成PIL Image
Normalize类:归一化,标准化,用来对数据预处理
Resize类:尺寸变换,即输入一张图片,将图片转变为指定的大小。如果只传入一个参数,就将最小边变成size,最大边等比例变成原来最小边的倍数
CenterCrop类:中心裁剪
Regularize类:正则化,防止模型过拟合的技术
使用
  • transforms.py 工具箱
  • 工具箱里放着 totensor / resize等类 工具

拿一些特定格式的图片,经过工具(class文件)后,就会输出我们想要的图片变换的结果。

2.tensor数据类型

通过transforms.Totensor去解决两个问题:

(1)transforms该如何使用;

(2)我们为什么需要tensors数据类型。

2.1 transforms该如何使用

从transforms中选择一个class,首先对它创建,根据创建的工具知道需要什么东西,返回出结果。
可以理解为,transforms.py是一个工具箱,里面有很多工具,像ToTensor/Resize等,可以将这些工具看成模板,利用这些模板来创建我们需要的工具,根据这些工具的使用方法,输入数据,输出结果。

image-20240519042304444

例如,ToTensor可以将一个 PIL Image 或 numpy.ndarray 转换为 tensor的数据类型

image-20240519035924241

代码实战

Ctrl+P可以提示函数里需要填什么参数

(PIL Image数据处理):

from PIL import Image
from torchvision import transforms

img_path = "dataset/train/ants_image/0013035.jpg"
img = Image.open(img_path) #Image是python中的一个图片的库,使用open()读取图片,得到的img数据类型是Image对象

tensor_trans = transforms.ToTensor()  # 引用transforms中的totensor,返回的是totensor的对象。可以理解为用tensor_trans接收totensor的对象。
tensor_img = tensor_trans(img)  # 将img图片转换成tensor格式。(鼠标放括号里,ctrl+p可以查看需要什么括号里需要什么参数。)
print(tensor_img)  # 查看tensor_img的数据类型

image-20240519041801545

运行结果:

image-20240519041903818

2.2 Tensor数据类型与其他图片数据类型有什么区别?为什么需要tensors数据类型。

因为在神经网络当中,肯定要将数据转化为tensor的类型,才能继续处理,进行训练。

Tensor 数据类型包装了反向神经网络所需要的一些理论基础的参数**,如:_backward_hooks、_grad等**(先转换成Tensor数据类型,再训练)

在Python Console输入下列代码,回车运行:

from PIL import Image
from torchvision import transforms
 
img_path= "dataset/train/ants_image/0013035.jpg"  
img = Image.open(img_path)   
 
tensor_trans = transforms.ToTensor() 
tensor_img = tensor_trans(img)  

image-20240519043308106

右侧属性栏:

image-20240519043333654

打开img,可以看到用Python内置函数读取的图片具有的参数:

image-20240519043438836

再打开tensor_img,看一下它具有的参数:

image-20240519043501805

3.两种读取图片的方式

1.PIL Image
from PIL import Image
img_path = "dataset/train/ants_image/0013035.jpg" #要打开的图片路径
img = Image.open(img_path)
img.show()

在控制台调试结果如下:

image-20240519044250353

2. numpy.ndarray(通过opencv)
import cv2
cv_img=cv2.imread(img_path) #括号里的参数是图片路径

控制台调试发现没安装OpenCV,去anaconda prompt面板安装一下:

conda activate pytorch
pip install opencv-python==4.3.0.38

image-20240519050420876

验证是否安装成功:

python
import cv2

image-20240519050726292

重新在控制台调试读取图片,属性栏出现cv_img,说明读取成功了

image-20240519050843251

上节课以 numpy.array 类型为例,这节课使用 torch.Tensor 类型,结合TensorBoard,观察训练结果:

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

img_path = "dataset/train/ants_image/0013035.jpg" #用相对路径,绝对路径里的\在Windows系统下会被当做转义符
img = Image.open(img_path) #Image是python中的一个图片的库,使用open()读取图片,得到的img数据类型是Image对象

writer = SummaryWriter("logs")

# 1、Transforms该如何使用
tensor_trans = transforms.ToTensor()  # 引用transforms中的totensor,返回的是totensor的对象。可以理解为用tensor_trans接收totensor的对象。
tensor_img = tensor_trans(img)  # 将img图片转换成tensor格式,#创建出tensor_trans后,传入其需要的参数,即可返回结果
#print(tensor_img)  # 查看tensor_img的数据类型

writer.add_image("Tensor_img", tensor_img)  # .add_image(tag, img_tensor, global_step)
# tag即名称
# img_tensor的类型为torch.Tensor/numpy.array/string/blobname
# global_step为int类型

writer.close()

image-20240519045323847

运行后,在 Terminal 里输入:

tensorboard --logdir=logs

image-20240519045617127

打开链接,查看TensorBoard:

image-20240519045527554

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值