from torchvision import transforms
# Define a transform to do the normalization of the data
transform_data = transforms.Compose([transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])
这里用到的 torchvision 工具库是 pytorch 框架下常用的图像处理包,可以用来生成图片和视频数据集(torchvision.datasets),做一些图像预处理(torchvision.transforms),导入预训练模型(torchvision.models),以及生成雪碧图和保存图像(torchvision.utils)。
其中,transforms函数对图像做预处理可以是:归一化(normalize),尺寸剪裁(resize),翻转(flip) 等。
上面的这些步骤实际操作起来往往是一系列的,此时可以用compose将这些图像预处理操作连起来。
如上面的代码,这里做的操作是:
- transforms.ToTensor() ,将一个PIL图像转换为tensor。即,(H*W*C)范围在[0,255]的PIL图像 转换为 (C*H*W)范围在[0,1]的torch.tensor。
- transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ,用均值(0.5, 0.5, 0.5)和标准差(0.5, 0.5, 0.5)对图像做归一化处理。
transforms函数另外的功能还包括:
Resize:把给定的图片resize到给定的尺寸。
ToPILImage: 将torch.tensor 转换为PIL图像。
CenterCrop:以输入图的中心点为中心做指定size的裁剪操作。
RandomCrop:以输入图的随机位置为中心做指定size的裁剪操作。
RandomHorizontalFlip:以0.5概率水平翻转给定的PIL图像。
RandomVerticalFlip:以0.5概率竖直翻转给定的PIL图像。
RandomResizedCrop:将给定图像随机裁剪为不同的大小和宽高比,然后缩放所裁剪得到的图像为制定的大小(有一个参数n)。
Grayscale:将给定图像转换为灰度图像。
RandomGrayscale:将图像以指定的概率转换为灰度图像。
FiveCrop: 从一张输入图像中裁剪出5张指定size的图像,包括4个角的图像和一个中心。
TenCrop:剪出10张指定size的图像。做法是在FiveCrop的基础上,再将输入图像进行水平或竖直翻转,然后进行FiveCrop操作,这样一张图像可得到10张crop图像。
Pad:对给定图像的所有边用的“padding”个像素用“fill”值填充。
ColorJitter:修改图像的亮度,对比度,饱和度和色度。
Lambda:做其参数指定的变换。
上述四个包及其具体函数的详细介绍参考Pytorch的中文文档:https://pytorch-cn.readthedocs.io/zh/latest/torchvision/torchvision-datasets/
代码实现可以参考github:https://github.com/pytorch/vision/tree/master/torchvision。