文章作者:Tyan
博客:noahsnail.com | CSDN | 简书
0. 运行环境
python 3.6.8, pytorch 1.5.0
1. torchvision.transforms
在深度学习中,计算机视觉(CV)是其中的一大方向,而在CV任务中,图像变换(Image Transform)通常是必不可少的一环,其可以用来对图像进行预处理,数据增强等。本文主要整理PyTorch中torchvision.transforms
提供的一些功能(代码加示例)。具体定义及参数可参考PyTorch文档。
1.1 torchvision.transforms.Compose
Compose
的主要作用是将多个变换组合在一起,具体用法可参考2.5。下面的示例结果左边为原图,右边为保存的结果。
2. Transforms on PIL Image
这部分主要是对Python最常用的图像处理库Pillow中Image的处理。基本环境及图像如下:
1 | import torchvision.transforms as transforms |
2.1 torchvision.transforms.CenterCrop(size)
CenterCrop
的作用是从图像的中心位置裁剪指定大小的图像。例如一些神经网络的输入图像大小为224*224
,而训练图像的大小为256*256
,此时就需要对训练图像进行裁剪。示例代码及结果如下:
1 | size = (224, 224) |
2.2 torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
ColorJitter
的作用是随机修改图片的亮度、对比度和饱和度,常用来进行数据增强,尤其是训练图像类别不均衡或图像数量较少时。示例代码及结果如下:
1 | brightness = (1, 10) |
2.3 torchvision.transforms.FiveCrop(size)
FiveCrop
的作用是分别从图像的四个角以及中心进行五次裁剪,图像分类评估时分为Singl Crop Evaluation/Test
和Multi Crop Evaluation/Test
,FiveCrop
可以用在Multi Crop Evaluation/Test
中。示例代码及结果如下:
1 | size = (224, 224) |
2.4 torchvision.transforms.Grayscale(num_output_channels=1)
Grayscale
的作用是将图像转换为灰度图像,默认通道数为1,通道数为3时,RGB三个通道的值相等。示例代码及结果如下:
1 | transform = transforms.Grayscale() |
2.5 torchvision.transforms.Pad(padding, fill=0, padding_mode=’constant’)
Pad
的作用是对图像进行填充,可以设置要填充的值及填充的大小,默认是图像四边都填充。示例代码及结果如下:
1 | size = (224, 224) |
2.6 torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)
RandomAffine
的作用是保持图像中心不变的情况下对图像进行随机的仿射变换。示例代码及结果如下:
1 | degrees = (15, 30) |
2.7 torchvision.transforms.RandomApply(transforms, p=0.5)
RandomApply
的作用是以一定的概率执行提供的transforms
操作,即可能执行,也可能不执行。transforms
可以是一个,也可以是一系列。示例代码及结果如下:
1 | size = (224, 224) |
2.8 torchvision.transforms.RandomChoice(transforms)
RandomChoice
的作用是从提供的transforms
操作中随机选择一个执行。示例代码及结果如下:
1 | size = (224, 224) |
2.9 torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode=’constant’)
RandomCrop
的作用是在一个随机位置上对图像进行裁剪。示例代码及结果如下:
1 | size = (224, 224) |
2.10 torchvision.transforms.RandomGrayscale(p=0.1)
RandomGrayscale
的作用是以一定的概率将图像变为灰度图像。示例代码及结果如下:
1 | p = 0.5 |
2.11 torchvision.transforms.RandomHorizontalFlip(p=0.5)
RandomHorizontalFlip
的作用是以一定的概率对图像进行水平翻转。示例代码及结果如下:
1 | p = 0.5 |
2.12 torchvision.transforms.RandomOrder(transforms)
RandomOrder
的作用是以随机顺序执行提供的transforms
操作。示例代码及结果如下:
1 | size = (224, 224) |
2.13 torchvision.transforms.RandomPerspective(distortion_scale=0.5, p=0.5, interpolation=3, fill=0)
RandomPerspective
的作用是以一定的概率对图像进行随机的透视变换。示例代码及结果如下:
1 | distortion_scale = 0.5 |
2.14 torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=2)
RandomResizedCrop
的作用是以随机大小和随机长宽比裁剪图像并缩放到指定的大小。示例代码及结果如下:
1 | size = (256, 256) |
2.15 torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None, fill=None)
RandomRotation
的作用是对图像进行随机旋转。示例代码及结果如下:
1 | degrees = (15, 30) |
2.16 torchvision.transforms.RandomSizedCrop(args, *kwargs)
已废弃,参见RandomResizedCrop
。
2.17 torchvision.transforms.RandomVerticalFlip(p=0.5)
RandomVerticalFlip
的作用是以一定的概率对图像进行垂直翻转。示例代码及结果如下:
1 | p = 1 |
2.18 torchvision.transforms.Resize(size, interpolation=2)
Resize
的作用是对图像进行缩放。示例代码及结果如下:
1 | size = (224, 224) |
2.19 torchvision.transforms.Scale(args, *kwargs)
已废弃,参加Resize
。
2.20 torchvision.transforms.TenCrop(size, vertical_flip=False)
TenCrop
与2.3类似,除了对原图裁剪5个图像之外,还对其翻转图像裁剪了5个图像。
3. Transforms on torch.*Tensor
3.1 torchvision.transforms.LinearTransformation(transformation_matrix, mean_vector)
LinearTransformation
的作用是使用变换矩阵和离线计算的均值向量对图像张量进行变换,可以用在白化变换中,白化变换用来去除输入数据的冗余信息。常用在数据预处理中。
3.2 torchvision.transforms.Normalize(mean, std, inplace=False)
Normalize
的作用是用均值和标准差对Tensor
进行归一化处理。常用在对输入图像的预处理中,例如Imagenet竞赛的许多分类网络都对输入图像进行了归一化操作。
3.3 torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)
RandomErasing
的作用是随机选择图像中的一块区域,擦除其像素,主要用来进行数据增强。示例代码及结果如下:
1 | p = 1.0 |
4 Conversion Transforms
4.1 torchvision.transforms.ToPILImage(mode=None)
ToPILImage
的作用是将pytorch的Tensor
或numpy.ndarray
转为PIL的Image。示例代码及结果如下:
1 | img = Image.open('tina.jpg') |
4.2 torchvision.transforms.ToTensor
ToTensor
的作用是将PIL Image
或numpy.ndarray
转为pytorch的Tensor
,并会将像素值由[0, 255]
变为[0, 1]
之间。通常是在神经网络训练中读取输入图像之后使用。示例代码如下:
1 | img = Image.open('tina.jpg') |
5. Code
代码参见https://github.com/SnailTyan/deep-learning-tools/blob/master/transforms.py。