PyTorch教程-6:详解PyTorch中的transforms

笔者PyTorch的全部简单教程请访问:https://www.jianshu.com/nb/48831659

PyTorch教程-6:详解PyTorch中的transforms

对于视觉方向的图像处理方面,PyTorch提供了很好的预处理接口,对于图像的转换处理,使用 torchvision.tranforms 模块使得这些操作非常高效。本文就介绍这个非常强大的工具,先引入transforms模块:

import torchvision.transforms as transforms

完整的参考:https://pytorch.org/docs/stable/torchvision/transforms.html

组合多个变换操作

transforms.Compose() 方法接收一个 transforms 方法的list为参数,将这些操作组合到一起,返回一个新的tranforms。通常用于包装一个完整的变换操作的pipeline

import torchvision.transforms as transforms

myTransforms = transforms.Compose([
    transforms.CenterCrop(10),
    transforms.ToTensor()
])

对PIL Image和Tensor同时起作用的操作

本节所提到的所有的transforms的操作都可以以三种数据中的一种为参数:

  • PIL格式的Image
  • tensor表示的图片,其形状为 (Channel, Height, Weight)
  • 一个tensor数组表示的多个图片,其形状为 (Batch, Channel, Height, Weight)

这些方法列在下边,对于需要详细查看其参数含义的操作,可以直接参考:
https://pytorch.org/docs/stable/torchvision/transforms.html#transforms-on-pil-image-and-torch-tensor

  • torchvision.transforms.CenterCrop(size)size为一个整数或者tuple,从图片中心裁剪出size大小的图片
  • torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0):对图像的亮度、对比度、饱和度和色调进行调节,每个参数接收一个float值或者一个float tuple (min, max)
  • torchvision.transforms.FiveCrop(size)size为一个整数或者tuple,从图片中心和四个角裁剪出一共五张size大小的图片
  • torchvision.transforms.Grayscale(num_output_channels=1):将图片转换为灰度图,参数可取1或3,取3时,三个通道返回同样的值
  • torchvision.transforms.Pad(padding, fill=0, padding_mode='constant'):对图片做padding操作
  • torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=0, fillcolor=0):对图像进行随机的仿射变换
  • torchvision.transforms.RandomApply(transforms, p=0.5):接收一个transforms的list为参数,依据它对图片进行随机的变换
  • torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant'):在图片的随机位置剪裁并返回新图像
  • torchvision.transforms.RandomGrayscale(p=0.1):以p的概率将图片随机转换为灰度图
  • torchvision.transforms.RandomHorizontalFlip(p=0.5):以p的概率随机将图片水平翻转
  • torchvision.transforms.RandomPerspective(distortion_scale=0.5, p=0.5, interpolation=2, fill=0):以p的概率将图片进行随机透视变换
  • torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=2):将图片随机地进行剪裁得到给定大小或者长宽比的图片
  • torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None, fill=None):随机对图片旋转一个角度
  • torchvision.transforms.RandomVerticalFlip(p=0.5):以p的概率随机将图片垂直(上下)翻转
  • torchvision.transforms.Resize(size, interpolation=2):将图片大小放缩到给定大小
  • torchvision.transforms.TenCrop(size, vertical_flip=False):将图片的四个角和中心进行裁剪后,返回他们的反转后的图片,默认水平反转
  • torchvision.transforms.GaussianBlur(kernel_size, sigma=(0.1, 2.0)):对图片进行高斯模糊

仅对PIL Image起作用的操作

本小节提到的方法仅对PIL Image格式的图片起作用,即不能用于torchscript(什么是TorchScript:https://pytorch.org/docs/stable/jit.html?highlight=torchscript)。详细的参数说明请参考:https://pytorch.org/docs/stable/torchvision/transforms.html#transforms-on-pil-image-only

  • torchvision.transforms.RandomChoice(transforms):接收一个transforms的list为参数,从list中随机挑选一个对图片进行变换
  • torchvision.transforms.RandomOrder(transforms):接收一个transforms的list为参数,将list中的所有变换操作进行随机排序后对图片进行变换

仅对Tensor起作用的操作

本小节提到的方法仅能够作用于 Tensor 上,详细的参数说明请参考:https://pytorch.org/docs/stable/torchvision/transforms.html#transforms-on-torch-tensor-only

  • torchvision.transforms.LinearTransformation(transformation_matrix, mean_vector):对tensor进行矩阵变换后减去一个向量
  • torchvision.transforms.Normalize(mean, std, inplace=False):对图片进行标准化
  • torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False):随机选取图片中的矩形区域并删除其像素值
  • torchvision.transforms.ConvertImageDtype(dtype: torch.dtype):将tensor的数据类型转换为给定的torch.dtype的类型

用于进行转换的操作

本小节提到的方法用于数据类型的转换,详细的参数说明请参考:https://pytorch.org/docs/stable/torchvision/transforms.html#conversion-transforms

  • torchvision.transforms.ToPILImage(mode=None):将一个tensor格式的图片转换为PIL Image格式的图片,不支持torchscript
  • torchvision.transforms.ToTensor:将一个PIL Image格式的图片转换为tensor格式的图片,不支持torchscript,这个很重要

你可能感兴趣的:(PyTorch教程-6:详解PyTorch中的transforms)