
文章目录
简要介绍:Pytorch 中的图像预处理都跟 transforms 这个工具包有关系,它是一个常用的图像变换工具包。
一、Compose方式
Compose方式,支持链式处理,可以集合多个 transforms 的方法或者类。Compose方式的例子如下:
transforms.Compose([
transforms.CenterCrop(10), // 剪切为10x10大小
transforms.ToTensor(), // 像素值转换为0~1
])
二、Scriptable transforms方式
Scriptable transforms方式,通过即时运行的脚本方式实现图像变换。例子图示如下:
transforms = torch.nn.Sequential(
transforms.CenterCrop(10),
transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
)
scripted_transforms = torch.jit.script(transforms)
当以 script 脚本形式运行时候,transfroms 必须使用 torch.nn.Module 继承类实现链式处理流程的定义与组合。
三、transform 常用图像转换类功能列表
3.1 裁剪 — Crop
- 中心裁剪:
transforms.CenterCrop
功能:依据给定的 size 中心裁剪。 - 随机裁剪:
transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')
功能:依据给定的 size 随机裁剪。 - 随机长宽比裁剪:
transforms.RandomResizedCrop(size, scale=(0.08,1.0), ratio=(0.75, 1.333), interpolation=2)
功能:随机大小,随机长宽比裁剪原始图片,最后将图片 resize 到设定好的 size。 - 上下左右中心裁剪:
transforms.FiveCrop(size)
功能:对图片进行上下左右以及中心裁剪,获得 5 张图片,返回一个 4D-tensor。 - 上下左右中心裁剪后翻转:
transforms.TenCrop(size, vertical_flip=False)
功能:对图片进行上下左右以及中心裁剪,然后全部翻转(水平或者垂直),获得 10 张图片,返回一个 4D-tensor。
3.2 翻转和旋转 — Flip and Rotation
- 依概率 p 水平翻转:
transforms.RandomHorizontalFlip(p=0.5)
功能:依据概率 p 对 PIL 图片进行水平翻转。 - 依概率 p 垂直翻转:
transforms.RandomVerticalFlip(p=0.5)
功能:依据概率 p 对 PIL 图片进行垂直翻转。 - 随机旋转:
transforms.RandomRotation(degrees, resample=False, expand=False, center=None)
功能:依据 degrees 随机旋转一定角度。
3.3 图像变换
- resize:
transform.Resize(size, interpolation=2)
功能:重置图像分辨率。
其中,interpolation — 插值方式,默认为 PIL.Image.BILINEAR - 标准化:
transforms.Normalize(mean, std)
功能:对数据按通道进行标准化,即先减均值,再除以标准差,注意是h*w*c。 - 转为 tensor,并归一化至[0-1]:
transforms.ToTensor
功能:将 PIL Image 或者 ndarray 转换为 tensor,并且归一化到 [0, 1] 。
注意:归一化至 [0, 1] 是直接除以 255,若自己的 ndarray 数据尺度有变化,则需要针对性修改。 - 填充:
transforms.Pad(padding, fill=0, padding_mode='constant')
功能:对图像进行填充。 - 修改亮度、饱和度和对比度:
transforms.ColorJitter(brightness=0, constract=0, saturation=0, hue=0) - 转灰度图:
transforms.Grayscale(num_output_cahnnels=1)
功能:将图片转换为灰度图。 - 依概率 p 转为灰度图:
transforms.RandomGrayscale(p=0.5) - 线性变换:
transforms.LinearTransformation(transformation_matrix)
功能:对矩阵做线性变化处理,可用于白化处理! - 仿射变换:
transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0) - 转 PILImage:
transforms.ToPILImage(mode=None)
功能:将 tensor huozhe ndarray 的数据转换为 PIL Image 类型数据。 - 随机高斯模糊:
transforms.GaussianBlur
3.4 对 transforms 操作,使数据增强更灵活
transforms.RandomChoice(transforms)
从给定的一系列 transforms 中选一个进行操作。transforms.RandomApply(transforms, p=0.5)
给一个 transforms 加上概率,依概率进行操作。transforms.RandomOrder
将 transforms 中的操作随机打乱。
本文介绍了PyTorch中图像预处理的多种方法,包括Compose和Scriptabletransforms两种方式,详细列举了常用的图像转换类及其功能,如裁剪、翻转、旋转等,并提供了数据增强的灵活操作技巧。
1495





