torchvision.transforms对于使用Pytorch的人肯定不陌生,我也用了Pytorch但是对transform却不是真正掌握,图片的预处理对网络的性能十分重要,所以打算仔细看看pytorch的源码。
Transforms组成
Transforms are common image transforms. They can be chained together using
Compose
Transforms是常用的一些图像变换操作,可以用Compose
将这些变换组合在一起
Transfroms由5部分组成
- Transforms on PIL Image
- Transforms on torch.Tensor
- Conversion Transforms
- Generic Transforms
- Functional Transforms
其中,前两部分Transforms on PIL Image
和Transforms on torch.*Tensor
用的比较多。下面会详细说明,先说一下compose
compose
Compose
是一个类用来组合所有的变换操作。
class torchvision.transforms.Compose(transforms)
使用方法,应该很常见:
transforms.Compose([
transforms.CenterCrop(10),
transforms.ToTensor(),
])
Transforms on PIL Image
函数 | 用途 | 用法 |
---|---|---|
CenterCrop(size) | crops the given PIL image at the center 从图片中心剪裁一个size大小的图片 | CenterCrop(160) |
GrayScale(num) | convert image to grayscale 将图片变成灰度图 | GrayScale(1)或者 GrayScale(3) |
RandomCrop(size) | crop the given PIL image at a random location 在给定的图片中随机的剪裁一张size大小的图。 这个在训练中经常用到,算作一种数据增强的手段 | RandomCrop(224) |
RandomHorizontaFlip(p) | Horizontally flip the given image randomly with a given probability 按照给定概率随机的对图片进行水平镜像 这一条也经常用于训练 | RandomHorizontaFlip(0.5) |
Resize(size) | Resize the input PIL image to the given size 一般用在验证集和测试集 | Resize(224) |
Transforms on torch.Tensor
Tensor数据的处理只有一个函数Normalize(mean,std)
Normalize函数几乎都会用到,需要注意的是:
只能对Tensor数据进行Normalize,不能对PIL image用,即在用transform.Normalize()
前先使用下面的transform.ToTensor()
用法:
transform.Normalize([127.5,127.5,127.5],[128,128,128])
对指定通道的像素减去均值除以方差,一般用于图片的归一化,均值和方差的取值需要注意。
Conversion Transforms
这部分包括两个变换:
- class torchvision.transforms.ToPILImage(mode=None)
将Tensor形式变成PIL Image形式,用的不多 - class torchvision.transforms.ToTensor
将PIL Image形式变成Tensor形式,用的很多,只要你用到gpu都会涉及到。
Converts a PIL Image or numpy.ndarray (H x W x C) in the range [0, 255] to a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0].
将一个image或者numpy.ndarrya形式的图片,图片的取值范围[0,255]变成一个tensor,tensor的取值为[0,1],并且通道顺序由HWC变成CHW。
需要注意两点,图片的取值范围和通道顺序。取值范围会影响到接下来的归一化normalize
。通道顺序从高x宽x通道变成通道x高x宽,简单说就是从224x224x3变成3x224x224