PyTorch学习之数据增强(image transformations)

时间:2019-01-18
本文章向大家介绍PyTorch学习之数据增强(image transformations),主要包括PyTorch学习之数据增强(image transformations)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

位于torchvision.transforms下面。

0 Compose

torchvision.transforms.Compose(transforms)

用法:

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

1 常见变换

1-1 Resize

图像尺寸变化

torchvision.transforms.Resize(size, interpolation=2)

1-2 标准化

对数据按通道进行标准化,即先减均值,再除以标准差,注意是 hwc

torchvision.transforms.Normalize(mean, std)

参数:

mean-均值
std-标准差

1-3 转换为 PILImage

将 tensor 或者 ndarray 的数据转换为 PIL Image 类型数据

torchvision.transforms.ToPILImage(mode=None)

参数:

mode- 为 None 时,为 1 通道, mode=3 通道默认转换为 RGB, 4 通道默认转换为 RGBA

1-4 转为 Tensor

将 PIL Image 或者 ndarray 转换为 tensor,并且归一化至[0-1]

torchvision.transforms.ToTensor

2 裁剪 Crop

2-1 中心裁剪 CenterCrop

依据给定的 size 从中心裁剪

torchvision.transforms.CenterCrop(size)

2-2 随机裁剪 RandomCrop

依据给定的 size 随机裁剪

torchvision.transforms.RandomCrop(size, padding=0, pad_if_needed=False)

参数:

padding-此参数是设置填充多少个 pixel。
pad_if_needed-如果图片小于指定尺寸,是否边缘填充。

2-3 随机长宽比裁剪 RandomResizedCrop

随机大小,随机长宽比裁剪原始图片,最后将图片 resize 到设定好的 size

torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.33), interpolation=2)

参数:

scale- 随机 crop 的大小区间。
ratio- 随机长宽比设置
interpolation- 插值的方法,默认为双线性插值

2-4 上下左右中心裁剪 FiveCrop

对图片进行上下左右以及中心裁剪,获得 5 张图片,返回一个 4D-tensor

torchvision.transforms.FiveCrop(size)

2-5 上下左右中心裁剪后翻转 TenCrop

对图片进行上下左右以及中心裁剪,然后全部翻转(水平或者垂直),获得 10 张图
片,返回一个 4D-tensor。

torchvision.transforms.TenCrop(size, vertical_flip=False)

参数:

vertical_flip (bool) - 是否垂直翻转,默认为 flase,即默认为水平翻转

3 翻转和旋转(Flip & Rotation)

3-1 随机水平翻转 RandomHorizontalFlip

依据概率 p 对 PIL 图片进行水平翻转

torchvision.transforms.RandomHorizontalFlip(p=0.5)

参数:

p- 概率,默认值为 0.5

3-2 随机垂直翻转 RandomVerticalFlip

依据概率 p 对 PIL 图片进行垂直翻转

torchvision.transforms.RandomVerticalFlip(p=0.5)

参数:

p- 概率,默认值为 0.5

3-3 随机旋转 RandomRotation

依 degrees 随机旋转一定角度

torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None)

参数:

degress- 若为单个数,如 30,则表示在(-30, +30)之间随机旋转;若为 sequence,如(30, 60),则表示在 30-60 度之间随机旋转。
resample- 重采样方法选择,可选NEAREST, BILINEAR, BICUBIC,默认为NEAREST
expand- True:填满输出图片,False:不填充。
center- 可选为中心旋转还是左上角旋转。默认中心旋转

4 图像变换

4-1 亮度对比度饱和度变换

修改亮度、对比度和饱和度

torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)

参数:

brightness - [max(0, 1 - brightness), 1 + brightness]
contrast - [max(0, 1 - contrast), 1 + contrast]
saturation - [max(0, 1 - saturation), 1 + saturation]
hue - [-hue, hue] && 0<=hue<= 0.5

4-2 转灰度图

将图片转换为灰度图

torchvision.transforms.Grayscale(num_output_channels=1)

参数:

num_output_channels- (int) ,当为 1 时,正常的灰度图,当为 3 时, 3 channel with r ==g == b

4-3 随机转灰度图

依概率 p 将图片转换为灰度图

torchvision.transforms.RandomGrayscale(p=0.1)

4-4 线性变换

对矩阵做线性变化,可用于白化处理

torchvision.transforms.LinearTransformation(transformation_matrix)

参数:

transformation_matrix (Tensor) – tensor [D x D], D = C x H x W

*Applications: - whitening: zero-center the data, compute the data covariance matrix
[D x D] with np.dot(X.T, X), perform SVD on this matrix and pass it as transformation_matrix.

4-5 仿射变换

仿射变换

torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)

参数:

degrees-旋转角度
translate -水平或者垂直移动的范围
scale - 放缩尺度因子
resample-重采样方式NEAREST, BILINEAR, BICUBIC
fillcolor-填充空白区域的颜色

4-6 填充

torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')

参数:

padding-,此参数是设置填充多少个 pixel。
fill- (int or tuple) 填充值
padding_mode- 填充模式,这里ᨀ供了 4 种填充模式, 1.constant 常量。 2.edge 边缘值。 3.reflect 镜像 4. symmetric 对称

5 Lambda

根据用户自定义函数变换。

torchvision.transforms.Lambda(lambd)

参数:

lambd-用户自定义函数

6 对transform操作

6-1 概率transforms

给一个 transform 加上概率,依概率进行操作

torchvision.transforms.RandomApply(transforms, p=0.5)

6-2 随机transforms

从给定的一系列 transforms 中选一个进行操作

torchvision.transforms.RandomChoice(transforms)

6-3 乱序transforms

将 transforms 中的操作随机打乱

torchvision.transforms.RandomOrder(transforms)