pytorch初学笔记(三)Tranforms的使用

目录

一、transform的用法

1. tranforms的结构 

2. transforms的使用步骤

二、 transforms.ToTensor()的使用 

1. 内置__call__方法简介

2. ToTensor()使用

2.1 将PIL类型图像转换为tensor型 

2.2 将numpy类型图像转换为tensor型 

2.3 使用tensorboard显示tensor型图片

三、使用Tensor数据类型的原因


一、transform的用法

transforms在计算机视觉工具包torchvision下,torchvision.transforms是常用的图像预处理方法,对图像进行变换。

1. tranforms的结构 

transforms为工具箱,其中的class为不同的工具,可以使用帮助手册进行具体每个类以及其使用的查看。

pytorch初学笔记(三)Tranforms的使用_第1张图片

点击pycharm左下角的structure可以看到transforms中个各类的具体结构。

pytorch初学笔记(三)Tranforms的使用_第2张图片

transforms中有许多不同的类,分别对应不同的作用,比如最常用的ToTensor类,可以把PIL图片类型或者numpy类型转换为tensor型。

pytorch初学笔记(三)Tranforms的使用_第3张图片

2. transforms的使用步骤

需要创建transforms工具箱中具体的工具进行使用。 

  1. 首先冲transforms中选择想要使用的类,如选择ToTensor类,transforms.ToTensor()
  2. 为这个类的使用来创建具体的工具 ( 实例化对象 ),tool = transforms.ToTensor()
  3. 将想要输入的图形使用刚刚创建的tool进行变换操作,result_image=tool(input_image)
  4. 得到结果

pytorch初学笔记(三)Tranforms的使用_第4张图片

二、 transforms.ToTensor()的使用 

1. 内置__call__方法简介

Python __call__()方法(详解版) (biancheng.net)

call()方法是Python中一个很特殊的方法。凡是可调用对象,都可以通过调用__call__()方法来调用该对象。如果类中定义了__call__()方法,那么该类的实例对象也将成为可调用对象。该对象被调用时,将执行__call__()方法中的代码。

 该方法的功能类似于在类中重载 () 运算符,使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用。

因此当我们实例化ToTensor对象为tool时,tool = transforms.ToTensor(),则可以使用tool( )的形式来使用call函数。

如下所示为ToTensor中call函数所需的参数,为pic,即为PIL或numpy类型图像。所以可以在tool中传入pic参数来调用该方法,即 tool(pic)

    def __call__(self, pic):
        """
        Args:
            pic (PIL Image or numpy.ndarray): Image to be converted to tensor.

        Returns:
            Tensor: Converted image.
        """
        return F.to_tensor(pic)

2. ToTensor()使用

2.1 将PIL类型图像转换为tensor型 

  1. 创建PIL类型图像img_PIL
  2. 实例化ToTensor类的对象,起名为totensor_tool
  3.  隐式调用call方法,把img_PIL传入totensor_tool()中,生成tensor类型图像
  4. 输出tensor类型对象
from PIL import Image
from torchvision import transforms
#创建PIL图像
img_path = "datasets2/train/ants_image/0013035.jpg"
img_PIL = Image.open(img_path)
#创建ToTensor对象,实例化工具
totensor_tool = transforms.ToTensor()
#接收tensor类型图像
img_tensor = totensor_tool(img_PIL)
print(img_tensor)

pytorch初学笔记(三)Tranforms的使用_第5张图片

2.2 将numpy类型图像转换为tensor型 

1. 使用pip命令安装OpenCV(OpenCV创建的图形都是numpy类型)

2. 创建numpy类型图像

import cv2
img_cv = cv2.imread(img_path)

 可以看到创建出来的img_cv类型是numpy型。

2.3 使用tensorboard显示tensor型图片

 创建两个图片对象,一个为PIL型,一个为numpy型,都使用ToTensor转换为tensor型,然后使用tensorboard可视化图片。

#tensor数据类型的使用
#通过transform.ToTensor解决两个问题
#1. transform如何使用      2. tensor

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

img_path1 = "datasets2/train/ants_image/0013035.jpg"
#创建PIL图像
img_PIL = Image.open(img_path1)
#创建ToTensor对象,实例化工具
totensor_tool = transforms.ToTensor()
#接收tensor类型图像1
img_tensor1 = totensor_tool(img_PIL)

img_path2 = "datasets2/train/bees_image/16838648_415acd9e3f.jpg"
#创建numpy类型对象
img_cv = cv2.imread(img_path2)
#接收tensor类型图像2
img_tensor2 = totensor_tool(img_cv)

#使用tensorboard显示图片
writer = SummaryWriter("logs")
writer.add_image("Tensor_img1",img_tensor1)
writer.add_image("Tensor_img2",img_tensor2)

writer.close()

可以看到两张图片都进行了显示。 

pytorch初学笔记(三)Tranforms的使用_第6张图片

三、使用Tensor数据类型的原因

张量(Tensor)是神经网络中使用的主要数据结构,在网络的输入、转换和输出都涉及到张量。在深度学习和神经网络中,张量是n维数组,我们用张量这个词来表示所有的n值,比如标量是零维张量、矢量是一维张量、矩阵是二维张量、n维数组是n维张量。

在pytorch中使用tensor是因为tensor型可以给我们提供深度学习和神经网络训练过程中需要的重要参数,非常方便。

pytorch初学笔记(三)Tranforms的使用_第7张图片

你可能感兴趣的:(pytorch,深度学习,人工智能)