赞
踩
PyTorch 教程系列:https://blog.csdn.net/qq_38962621/category_10652223.html
对于视觉方向的图像处理方面,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()
])
本节所提到的所有的transforms
的操作都可以以三种数据中的一种为参数:
(Channel, Height, Weight)
(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格式的图片起作用,即不能用于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 上,详细的参数说明请参考: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格式的图片,不支持torchscripttorchvision.transforms.ToTensor
:将一个PIL Image格式的图片转换为tensor格式的图片,不支持torchscript,这个很重要!Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。