• PyTorch入门教学——Transforms使用


    1、Transforms简介

    • Transforms在是计算机视觉工具包torchvision下的包,常用于对图像进行预处理,提高泛化能力。具体有:
      • 数据中心化、数据标准化、缩放、裁剪、旋转、翻转、填充、噪声添加、灰度变换、线性变换、仿射变换和亮度、饱和度及对比度变换。
    • Transforms的使用结构:

    2、Tensor数据类型

    • 数据集只有转换为tensor数据类型才能被Transforms中的工具使用。这里使用到了ToTensor类,它可以将PIL Image、numpy.ndarray转换为tensor数据类型。
    • 代码案例——将PIL Image转换为tensor数据类型。
      • 首先在项目目录中准备好一张图片,并且新建一个python文件。
      • 在Transforms.py中输入如下代码,并运行。
          1. from torchvision import transforms
          2. from PIL import Image
          3. img_path = "images/热巴1.jpg" # 相对路径
          4. img = Image.open(img_path)
          5. print(img) # PIL Image数据类型
          6. tensor_trans = transforms.ToTensor() # 实例化
          7. tensor_img = tensor_trans(img) # 在括号中按ctrl+p可以查看需要传入什么参数
          8. print(tensor_img) # tensor数据类型
        • 可以看到PIL Image已经转换成了tensor数据类型。

    3、常见的Transforms

    • ToTensor:将PIL Image、numpy.ndarray转换为tensor数据类型。
    • Normalize:对图像像素进行归一化计算,可理解为改变颜色。
      • 计算公式:
          1. output[channel] = (input[channel] - mean[channel]) / std[channel]
          2. # 输出 = 输入 - 均值/ 标准差
    • Resize:重新设置PIL Image的大小,返回的也是PIL Image格式。
    • Compose:将不同的Transforms结合在一起。
    • 代码案例——先将图片大小进行调整,然后进行归一化计算。将ToTensor、Normalize、Resize返回的tensor数据类型,按顺序输入到Compose中。
      • 新建python文件,输入如下代码并运行。​​​​​​​
        1. from PIL import Image
        2. from torch.utils.tensorboard import SummaryWriter
        3. from torchvision import transforms
        4. writer = SummaryWriter("logs")
        5. img_path = "images/热巴1.jpg"
        6. img = Image.open(img_path)
        7. # ToTensor 转换类型
        8. trans_totensor = transforms.ToTensor()
        9. img_tensor = trans_totensor(img)
        10. writer.add_image("热巴", img_tensor)
        11. # Normalize 归一化
        12. print(img_tensor[0][0][0]) # 0层0行0列的像素
        13. trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) # 参数:均值,标准差
        14. img_norm = trans_norm(img_tensor)
        15. print(img_norm[0][0][0]) # 改变后,0层0行0列的像素
        16. writer.add_image("Normalize", img_norm)
        17. # Resize 设置大小
        18. print(img.size) # 图片大小
        19. trans_resize = transforms.Resize((512, 512))
        20. img_resize = trans_resize(img) # 返回的还是PIL image
        21. print(img.resize)
        22. img_resize = trans_totensor(img_resize) # 转化为totensor
        23. writer.add_image("Resize", img_resize)
        24. # Compose - resize第二种用法
        25. trans_resize_2 = transforms.Resize(512) # 等比缩放
        26. tran_compose = transforms.Compose([trans_resize_2, trans_totensor]) # 参数为数列,进行两种变换
        27. img_resize2 = tran_compose(img)
        28. writer.add_image("Compose", img_resize2)
        29. writer.close()
      • 打开TensorBoard,显示如下。
        • ToTensor
          •  
        • Normalize
        • Resize
        • Compose
  • 相关阅读:
    【NLP】第12章 检测客户情绪以做出预测
    LeetCode [96] 不同的二叉搜索树
    代码随想录算法训练营day55 | 392.判断子序列,115.不同的子序列
    微信小程序 navigator点击后有阴影 ,去掉navigator阴影效果
    vue2.0-3.0的区别
    磁盘的基本知识和基本命令
    897. 最长公共子序列
    Acwing 154. 滑动窗口
    SIMULIA-Simpack 2022x新功能介绍
    《基层女性》摘录
  • 原文地址:https://blog.csdn.net/weixin_45100742/article/details/133961064