• 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为不同的工具,可以使用帮助手册进行具体每个类以及其使用的查看。

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

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

    2. transforms的使用步骤

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

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

    1. def __call__(self, pic):
    2. """
    3. Args:
    4. pic (PIL Image or numpy.ndarray): Image to be converted to tensor.
    5. Returns:
    6. Tensor: Converted image.
    7. """
    8. 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类型对象
    1. from PIL import Image
    2. from torchvision import transforms
    3. #创建PIL图像
    4. img_path = "datasets2/train/ants_image/0013035.jpg"
    5. img_PIL = Image.open(img_path)
    6. #创建ToTensor对象,实例化工具
    7. totensor_tool = transforms.ToTensor()
    8. #接收tensor类型图像
    9. img_tensor = totensor_tool(img_PIL)
    10. print(img_tensor)

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

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

    2. 创建numpy类型图像

    1. import cv2
    2. img_cv = cv2.imread(img_path)

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

    2.3 使用tensorboard显示tensor型图片

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

    1. #tensor数据类型的使用
    2. #通过transform.ToTensor解决两个问题
    3. #1. transform如何使用 2. tensor
    4. import cv2
    5. from PIL import Image
    6. from torch.utils.tensorboard import SummaryWriter
    7. from torchvision import transforms
    8. img_path1 = "datasets2/train/ants_image/0013035.jpg"
    9. #创建PIL图像
    10. img_PIL = Image.open(img_path1)
    11. #创建ToTensor对象,实例化工具
    12. totensor_tool = transforms.ToTensor()
    13. #接收tensor类型图像1
    14. img_tensor1 = totensor_tool(img_PIL)
    15. img_path2 = "datasets2/train/bees_image/16838648_415acd9e3f.jpg"
    16. #创建numpy类型对象
    17. img_cv = cv2.imread(img_path2)
    18. #接收tensor类型图像2
    19. img_tensor2 = totensor_tool(img_cv)
    20. #使用tensorboard显示图片
    21. writer = SummaryWriter("logs")
    22. writer.add_image("Tensor_img1",img_tensor1)
    23. writer.add_image("Tensor_img2",img_tensor2)
    24. writer.close()

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

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

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

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

  • 相关阅读:
    Kotlin 环境下解决属性初始化问题
    dns安全策略
    二维码登录的原理
    SpringCloud - Spring Cloud Alibaba 之 Seata分布式事务服务;集成Nacos配置中心(十九)
    基于springboot的社区医院管理系统的设计
    12月7日即将讲解激发态与非绝热分子动力学
    Python入坑系列-pyside6桌面编程之认识并设置理想字体效果
    MyBatisPlus笔记
    【C++】set & map 的底层封装
    【MySQL高级篇】一文带你吃透数据库和表的操作之DDL|实战案例详解
  • 原文地址:https://blog.csdn.net/weixin_45662399/article/details/127567318