PyTorch入门教学——Transforms使用

1、Transforms简介

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

2、Tensor数据类型

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

3、常见的Transforms

  • ToTensor:将PIL Image、numpy.ndarray转换为tensor数据类型。
  • Normalize:对图像像素进行归一化计算,可理解为改变颜色。
    • 计算公式:
      • output[channel] = (input[channel] - mean[channel]) / std[channel]
        # 输出 = 输入 - 均值/ 标准差
  • Resize:重新设置PIL Image的大小,返回的也是PIL Image格式。
  • Compose:将不同的Transforms结合在一起。
  • 代码案例——先将图片大小进行调整,然后进行归一化计算。将ToTensor、Normalize、Resize返回的tensor数据类型,按顺序输入到Compose中。
    • 新建python文件,输入如下代码并运行。​​​​​​​
    • from PIL import Image
      from torch.utils.tensorboard import SummaryWriter
      from torchvision import transforms
      
      writer = SummaryWriter("logs")
      img_path = "images/热巴1.jpg"
      img = Image.open(img_path)
      # ToTensor 转换类型
      trans_totensor = transforms.ToTensor()
      img_tensor = trans_totensor(img)
      writer.add_image("热巴", img_tensor)
      # Normalize 归一化
      print(img_tensor[0][0][0])  # 0层0行0列的像素
      trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])  # 参数:均值,标准差
      img_norm = trans_norm(img_tensor)
      print(img_norm[0][0][0])  # 改变后,0层0行0列的像素
      writer.add_image("Normalize", img_norm)
      # Resize 设置大小
      print(img.size)  # 图片大小
      trans_resize = transforms.Resize((512, 512))
      img_resize = trans_resize(img)  # 返回的还是PIL image
      print(img.resize)
      img_resize = trans_totensor(img_resize)  # 转化为totensor
      writer.add_image("Resize", img_resize)
      # Compose - resize第二种用法
      trans_resize_2 = transforms.Resize(512)  # 等比缩放
      tran_compose = transforms.Compose([trans_resize_2, trans_totensor])  # 参数为数列,进行两种变换
      img_resize2 = tran_compose(img)
      writer.add_image("Compose", img_resize2)
      
      writer.close()
      
    • PyTorch入门教学——Transforms使用_第5张图片
    • 打开TensorBoard,显示如下。
      • PyTorch入门教学——Transforms使用_第6张图片
      • ToTensor
        •  PyTorch入门教学——Transforms使用_第7张图片
      • Normalize
        • PyTorch入门教学——Transforms使用_第8张图片
      • Resize
        • PyTorch入门教学——Transforms使用_第9张图片
      • Compose
        • PyTorch入门教学——Transforms使用_第10张图片

你可能感兴趣的:(PyTorch,pytorch,人工智能,python)