分享最新版本torchvision.transforms常用API翻译与讲解

参考目录:
目录

1 基本函数
    1.1 Compose
    1.2 RandomChoice
    1.3 RandomOrder
2 PIL上的操作
    2.1 中心切割CenterCrop
    2.2 随机切割RandomCrop
    2.3 随机比例切割
    2.4 颜色震颤ColorJitter
    2.5 随机旋转RandomRotation
    2.6 灰度化Grayscale
    2.7 size
    2.8 概率随机(常用)
3 Tensor上的操作
    3.1 标准化Normalize
4 PIL,Tensor转换函数
    4.1 ToPILImage
    4.2 ToTensor
5 案例代码分析

老样子,先看官方对torchvision.transforms的介绍:

这个Transforms是常见的图像的转换(包含图像增强等), 然后不同的transforms可以通过Compose函数连接起来(类似于Sequence把网络层连接起来一样的感觉)。后面的是关于图像分割任务了的介绍,因为入门PyTorch主要是图像分类,所以后面先不提了。
1 基本函数
1.1 Compose

【代码】

torchvision.transforms.Compose(transforms)

【介绍】

将不同的transform压缩在一起,这是非常重要的函数

【代码举例】

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

1.2 RandomChoice

【代码】

torchvision.transforms.RandomChoice(transforms)

【介绍】

用法和Compose相同,是在transform的list中随机选择1个transform进行执行。
1.3 RandomOrder

【代码】

torchvision.transforms.RandomOrder(transforms)

【介绍】

用法和Compose相同,是乱序list中的transform。

之前的课程提到了,在torchvision官方的数据集中,提供的数据是PIL格式的数据,然后我们需要转成FloatTensor形式的数据。因此这里图像增强的处理也分成在PIL图片上操作的和在FloatTensor张量上操作的两种。
2 PIL上的操作
2.1 中心切割CenterCrop

【代码】

torchvision.transforms.CenterCrop(size)

【介绍】

以PIL图片中心为中心,进行图片切割。比较常用

【参数】
size (sequence or int) – 想要切割出多大的图片。如果size是一个整数,那么就切割一个正方形;如果是一个(height,width)的tuple,那么就切割一个长方形。

【代码举例】

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

2.2 随机切割RandomCrop

【代码】

torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode=‘constant’)

【介绍】

和CenterCrop类似,但是是随机选取中心进行切割的

【参数】

size也是可以是int可以是tuple(height,width)
padding就是是否对图片进行填充,你可以输入2元组,表示左右填充和上下填充,也可以输入四元组,表示左上右下的填充;
pad_if_needed是boolean,一般是True。随机选取如果选取的比较边缘,超出了边界,那么是否进行填充
fill (int),你选择填充的是0(黑色),还是255(白色)呢?这个尽在padding_mode='constant'时有效
padding_mode表示填充的方法。有四种:'constant', 'edge', 'reflect' or 'symmetric' . 默认是constant常数填充。edge是填充边缘的那个像素值,一般效果比constant强一些,自己做的项目中;reflect和symmetric都是表示以边界为轴进行镜像的填充,区别在于:
    reflect:[1,2,3,4,5]进行padding=2的时候,那么就是[3,2,1,2,3,4,5,4,3]
    symmetric:[1,2,3,4,5]进行padding=2的时候,那么就是[2,1,1,2,3,4,5,5,4]
    区别是否重复边界的哪一个元素。两种方法差别不大。

2.3 随机比例切割

【代码】

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

【介绍】

这个比较有意思,随机大小切割图片,然后再resize到设置的size大小。

参数中scale控制切割图片的大小是原图的比例,然后ratio控制切割图片的高宽比(纵横比),默认是从3/4 到 4/3。切割完成后再resize到设置的size大小。这个方法一般用在训练inception网络。
2.4 颜色震颤ColorJitter

【代码】

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

【介绍】

随机修改亮度brightness,对比度contrast, 饱和度saturation,色相hue

【参数】

brightness (float or tuple (min, max)) – 如果输入是一个float,那么建议在选取一个小于1的浮点数。亮度系数会从区间[max(0,1−brightness),1+brightness]

均匀选取,如果我使用这个,我设置brightness是0.1的话,那么这个系数就是[0.9,1.1]之间随机选取。如果输入时一个tuple的话,那么就是在 [min,max]

中选取。

contrast (float or tuple (min, max)) – 和上面一样,也是一个系数的选取。

saturation (float or tuple (min, max)) – 和上面一样,也是一个系数的选取。

hue (float or tuple (min, max)) – hue是色相。这里色相的取值应该小于0.5。如果输入时一个float,那么取值应该0<=hue<=0.5
,系数在[−hue,hue] 选取;如果是tuple,那么就是[min,max]

2.5 随机旋转RandomRotation

【代码】

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

【介绍】

就是随机的按照角度宣传图片
http://www.zjkhmdz.com
【参数】

degrees (int or tuple (min,max)) – 老规矩了,整数旋转角度就是[-int,int],tuple就是[min,max]

expand (bool, optional) – True就是让扩大图片,让图片可以包括所有内容(图片旋转的话,四个角的信息其实是旋转到了图片的外面,这个是扩大图片的像素尺寸,如果True在后面还要接一个resize的transforms); 默认是False,旋转后的图片和输入图片是同样的尺寸。

center (2-tuple, optional) – 可以设置成非图片中心的旋转

fill (n-tuple or int or float) – 设置填充像素值的,默认是0,一般也会选取0.

2.6 灰度化Grayscale

【代码】

torchvision.transforms.Grayscale(num_output_channels=1)

【介绍】

这个函数虽然不重要,但是会用的话可以提高变成速度哈哈。就是把图片转换成灰度的。

【参数】

num_output_channels (int) – 正常情况下灰度图片是单通道的,但是这里你可以设置成3,这样的话,会输出3个通道的灰度图片(三个通道的特征值相同),这样的话,你就不用修改torchvision的预训练模型中的输入接口了。(因为之前提到的,预训练模型使用ImageNet训练的,输入都是三通道彩色图)

2.7 size

【代码】

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

【介绍】

把PIL图片resize成指定大小
http://www.qhznssj.com
【参数】

size (tuple(height,width) or int) – tuple的话就直接resize成指定大小;int的话,就按照比例,让图片的短边长度变成int大小。
interpolation (int, optional) – 插值方法,一般都使用默认的PIL.Image.BILINEAR双重线性插值。

2.8 概率随机(常用)

图像增强有:变成灰度,镜像,翻转,平移,旋转等。

【代码】

变成灰度,输入输出通道数默认相同

torchvision.transforms.RandomGrayscale(p=0.1)

随机水平翻转

torchvision.transforms.RandomHorizontalFlip(p=0.5)

随机竖直翻转

torchvision.transforms.RandomVerticalFlip(p=0.5)

【参数】

p:表示执行这个transform的概率

3 Tensor上的操作
3.1 标准化Normalize

【代码】

torchvision.transforms.Normalize(mean, std, inplace=False)

【参数】

mean和std都是list,[mean_1,...,mean_n]和[std_1,...,std_n],n为通道数。每一个通道都应该有一个mean和std。计算的方法是,就是常用的那种:

output[channel]=(input[channel]−mean[channel])std[channel]

4 PIL,Tensor转换函数
4.1 ToPILImage

torchvision.transforms.ToPILImage(mode=None)

【介绍】

把一个tensor或者np的array转换成PIL。值得注意的是,如果输入时Tensor,那么维度应该是 C x H x W ,如果是numpy的话,是 H x W x C。 (这是一个一般不会出现,但是一旦出现很难想到的问题。)http://www.bjytbc.com
4.2 ToTensor

torchvision.transforms.ToTensor

【介绍】

把PIL或者numpy转换成Tensor。PIL和Numpy (格式H x W x C,范围[0,255]),转换成Tensor(格式C x H x W,范围[0,1])
5 案例代码分析

from PIL import Image
from torchvision import transforms

def loadImage():
# 读取图片
im = Image.open(“brunch.jpg”)
im = im.convert(“RGB”)
im.show()
return im
im = loadImage()

你可能感兴趣的:(分享最新版本torchvision.transforms常用API翻译与讲解)