目录
transforms在计算机视觉工具包torchvision下,torchvision.transforms是常用的图像预处理方法,对图像进行变换。
transforms为工具箱,其中的class为不同的工具,可以使用帮助手册进行具体每个类以及其使用的查看。

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

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

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

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)
- 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)

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

2. 创建numpy类型图像
- import cv2
- img_cv = cv2.imread(img_path)

可以看到创建出来的img_cv类型是numpy型。
创建两个图片对象,一个为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()
可以看到两张图片都进行了显示。

张量(Tensor)是神经网络中使用的主要数据结构,在网络的输入、转换和输出都涉及到张量。在深度学习和神经网络中,张量是n维数组,我们用张量这个词来表示所有的n值,比如标量是零维张量、矢量是一维张量、矩阵是二维张量、n维数组是n维张量。
在pytorch中使用tensor是因为tensor型可以给我们提供深度学习和神经网络训练过程中需要的重要参数,非常方便。
