参考链接:https://pytorch.org/docs/stable/torchvision/transforms.html
transforms包含了一些常用的图像变换,这些变换能够用Compose
串联组合起来。另外,torchvision提供了torchvision.transforms.functional
模块。functional可以提供了一些更加精细的变换,用于搭建复杂的变换流水线(例如分割任务)。
class torchvision.transforms.Compose(transforms)
用于把一系列变换组合到一起。
参数:
Transform
对象)- 一系列需要进行组合的变换。示例:
>>> transforms.Compose([
>>> transforms.CenterCrop(10),
>>> transforms.ToTensor(),
>>> ])
class torchvision.transforms.CenterCrop(size)
在中心处裁剪PIL图片。
参数:
class torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
随机改变图片的亮度、对比度和饱和度。
参数:
class torchvision.transforms.FiveCrop(size)
从四角和中心裁剪PIL图片。
注意:
该变换返回图像元组,可能会导致图片在网络中传导后和数据集给出的标签等信息不能匹配。处理方法见下面的示例。
参数:
示例:
>>> transform = Compose([
>>> FiveCrop(size), # 这里产生了一个PIL图像列表
>>> Lambda(lambda crops: torch.stack([ToTensor()(crop) for crop in crops])) # 返回4维张量
>>> ])
>>> # 在测试阶段你可以这样做:
>>> input, target = batch # input是5维张量,target是2维张量。
>>> bs, ncrops, c, h, w = input.size()
>>> result = model(input.view(-1, c, h, w)) # 把batch size和ncrops融合在一起
>>> result_avg = result.view(bs, ncrops, -1).mean(1) # crops上的平均值
class torchvision.transforms.Grayscale(num_output_channels=1)
把图片转换为灰阶。
参数:
返回:
返回类型:
class torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')
对PIL图像的各条边缘进行扩展。
参数:
class torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)
保持像素的分布中心不变,对图像做随机仿射变换。
参数:
class torchvision.transforms.RandomApply(transforms, p=0.5)
对transforms中的各变换以指定的概率决定是否选择。
参数:
class torchvision.transforms.RandomChoice(transforms)
从列表中随机选择一种变换。
class torchvision.transforms.RandomCrop(size, padding=0, pad_if_needed=False)
对给出的PIL图片在随机位置处进行裁剪。
参数:
class torchvision.transforms.RandomGrayscale(p=0.1)
以概率p(默认0.1)将图片随机转化为灰阶图片。
参数:
返回:
返回类型:
class torchvision.transforms.RandomHorizontalFlip(p=0.5)
以给定的概率随机水平翻折PIL图片。
参数:
class torchvision.transforms.RandomOrder(transforms)
以随机的顺序对图片做变换。
class torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=2)
以随机的形状和长宽比裁剪图片。
以随机的形状(默认从原始图片的0.08到1.0) 和随机长宽比(默认从3/4到4/3)裁剪图片。然后调整到指定形状。这一变换通常用于训练Inception网络。
参数:
class torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None)
以指定的角度选装图片。
参数:
class torchvision.transforms.RandomSizedCrop(*args, **kwargs)
注意:该变换已被弃用,可用RandomResizedCrop代替。
class torchvision.transforms.RandomVerticalFlip(p=0.5)
以给定的概率随机垂直翻折PIL图片。
参数:
class torchvision.transforms.Resize(size, interpolation=2)
将输入PIL图片调整大小到给定形状。
参数:
PIL.Image.BILINEAR
。class torchvision.transforms.Scale(*args, **kwargs)
注意:该变换已被弃用,可用Resize代替。
class torchvision.transforms.TenCrop(size, vertical_flip=False)
将PIL图片以四角和中心裁剪,同时加入翻折版本。(默认以水平的方式翻折)
注意:
该变换返回图像元组,可能会导致图片在网络中传导后和数据集给出的标签等信息不能匹配。处理方法见下面的示例。
参数:
示例:
>>> transform = Compose([
>>> TenCrop(size), # 这里产生了一个PIL图像列表
>>> Lambda(lambda crops: torch.stack([ToTensor()(crop) for crop in crops])) 返回4维张量
>>> ])
>>> # 在测试阶段你可以这样做:
>>> input, target = batch # input是5维张量, target是2维张量
>>> bs, ncrops, c, h, w = input.size()
>>> result = model(input.view(-1, c, h, w)) # 把batch size和ncrops融合在一起
>>> result_avg = result.view(bs, ncrops, -1).mean(1) # crops上的平均值
class torchvision.transforms.LinearTransformation(transformation_matrix)
用一个预先准备好的变换方阵对图片张量做变换。
torch.*Tensor会被transformation_matrix拉平,和变换矩阵做点积后调整到原始张量的形状。
应用:
参数:
class torchvision.transforms.Normalize(mean, std)
用平均值和标准差标准化输入图片。给定n
个通道的平均值(M1,...,Mn)
和标准差(S1,..,Sn)
,这一变换会在torch.*Tensor
的每一个通道上进行标准化,即input[channel] = (input[channel] - mean[channel]) / std[channel]
。
参数:
__call__(tensor)
参数:
返回:
返回类型:
class torchvision.transforms.ToPILImage(mode=None)
把张量或ndarray转化为PIL图像。
把形状为C x H x W的torch.*Tensor或者形状为H x W x C的numpy矩阵ndarray转化为PIL图像,保留值的上下界。
参数 :
mode
设置为None
(默认),按照下面的规则进行处理:mode
会设置为RGB
。mode
会设置为RGBA
。mode
由数据类型决定(即int
,float
,short
)。__call__(pic)
参数:
返回:
返回类型:
class torchvision.transforms.ToTensor
将PIL Image
或numpy.ndarray
转化成张量。
把PIL图像或[0, 255]范围内的numpy.ndarray(形状(H x W x C))转化成torch.FloatTensor,张量形状(C x H x W),范围在[0.0, 1.0]中。输入应是是PIL图像且是模式(L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1)中的一种,或输入是numpy.ndarray且类型为np.uint8。
__call__(pic)
参数:
返回:
返回类型:
class torchvision.transforms.Lambda(lambd)
将用户定义的函数用作变换。
参数:
functional可以提供了一些更加精细的变换,用于搭建复杂的变换流水线。和前面的变换相反,函数变换的参数不包含随机数种子生成器。这意味着你必须指定所有参数的值,但是你可以自己引入随机数。比如,对一组图片使用如下的functional变换:
import torchvision.transforms.functional as TF
import random
def my_segmentation_transforms(image, segmentation):
if random.random() > 5:
angle = random.randint(-30, 30)
image = TF.rotate(image, angle)
segmentation = TF.rotate(segmentation, angle)
# 更多变换 ...
return image, segmentation
torchvision.transforms.functional.adjust_brightness(img, brightness_factor)
调整图像亮度。
参数:
返回:
返回类型:
torchvision.transforms.functional.adjust_contrast(img, contrast_factor)
调整图像对比度。
参数:
返回:
返回类型:
torchvision.transforms.functional.adjust_gamma(img, gamma, gain=1)
对图像进行伽马矫正。
又称幂率变换。RGB模式下的强度按照下面的等式进行调整:
I o u t = 255 × g a i n × ( I i n 255 ) γ I_{out} = 255 \times gain \times (\dfrac{I_{in}}{255})^\gamma Iout=255×gain×(255Iin)γ
更多细节见伽马矫正。
参数:
torchvision.transforms.functional.adjust_hue(img, hue_factor)
调整图像色相。
调整时,先把图像转换到HSV空间,然后沿着色相轴(H轴)循环移动。最后切换回图像原始模式。
hue_factor
是H通道的偏移量,必须在[-0.5, 0.5]
的范围内。
更多细节见色相。
参数:
返回:
返回类型:
torchvision.transforms.functional.adjust_saturation(img, saturation_factor)
调整图像的颜色饱和度。
参数:
返回:
返回类型:
torchvision.transforms.functional.affine(img, angle, translate, scale, shear, resample=0, fillcolor=None)
保持图片像素分布中心不变,进行仿射变换。
参数:
PIL.Image.NEAREST
或 PIL.Image.BILINEAR
或 PIL.Image.BICUBIC
, 可选)– 可选的重采样滤波器,见滤波器。如果不设置该选项,或者图像模式是“1”或“P”,设置为PIL.Image.NEAREST
。torchvision.transforms.functional.crop(img, i, j, h, w)
裁剪指定PIL图像。
参数:
返回:
返回类型:
torchvision.transforms.functional.five_crop(img, size)
在四角和中心处裁剪图片。
注意:
该变换返回图像元组,可能会导致图片在网络中传导后和你的Dataset
给出的标签等信息不能匹配。
参数:
返回:
返回类型:
torchvision.transforms.functional.hflip(img)
将指定图像水平翻折。
参数:
返回:
返回类型:
torchvision.transforms.functional.normalize(tensor, mean, std)
用均值和方差将图像标准化。
更多细节见Normalize
。
参数:
返回:
返回类型:
torchvision.transforms.functional.pad(img, padding, fill=0, padding_mode='constant')
用指定的填充模式和填充值填充PIL图像。
参数:
constant:用常数填充,该常数值由fill指定。
edge:用边上的值填充。
reflect: 以边为对称轴进行填充。(不重复边上的值)
symmetric:以边为对称轴进行填充。(重复边上的值)
返回:
返回类型:
torchvision.transforms.functional.resize(img, size, interpolation=2)
将原是PIL图像重新调整到指定形状。
参数:
PIL.Image.BILINEAR
。返回:
返回类型:
torchvision.transforms.functional.resized_crop(img, i, j, h, w, size, interpolation=2)
裁剪PIL并调整到目标形状。
注意:在RandomResizedCrop被调用。
参数:
scale
。PIL.Image.BILINEAR
。返回:
返回类型:
torchvision.transforms.functional.rotate(img, angle, resample=False, expand=False, center=None)
旋转图片。
参数:
PIL.Image.NEAREST
或 PIL.Image.BILINEAR
或 PIL.Image.BICUBIC
, 可选) – 可选的重采样滤波器,见滤波器。如果该选项不设置,或者图像模式是“1”或“P”,将被设置为PIL.Image.NEAREST。torchvision.transforms.functional.ten_crop(img, size, vertical_flip=False)
将图片在四角和中心处裁剪,同时返回它们翻折后的图片。(默认水平翻折)
注意:
Dataset
给出的标签等信息不能匹配。参数:
返回:
返回类型:
torchvision.transforms.functional.to_grayscale(img, num_output_channels=1)
将图像输出成灰阶版本。
参数:
返回:
返回类型:
torchvision.transforms.functional.to_pil_image(pic, mode=None)
将张量或ndarray转化为PIL图像。
更多细节见ToPIlImage
。
参数:
返回:
返回类型:
torchvision.transforms.functional.to_tensor(pic)
将PIL Image
或numpy.ndarray
转化成张量。
更多细节见ToTensor
。
参数:
返回:
返回类型:
torchvision.transforms.functional.vflip(img)
垂直翻折PIL图像。
参数:
返回:
返回类型:
翻译部分到此为止,以下是一些例子
from torchvision import transforms
import numpy as np
from PIL import Image
y = Image.new('RGB',(2,2),'red') #随机生成红色PIL图片
y.save(open('test.png','wb'),'png')
print(np.array(y)) #以numpy array的形式打印图片(2*2*3)
print(y)
transform=transforms.Compose([
transforms.CenterCrop(10),#将图片向四周扩展为10*10
transforms.Grayscale(),#将扩展后的图片转化为灰阶形式
transforms.ToTensor()])#将图片转化为[0,1]的灰阶形式
print(transform(y))
[[[255 0 0]
[255 0 0]]
[[255 0 0]
[255 0 0]]]
<PIL.Image.Image image mode=RGB size=2x2 at 0x110256438>
(0 ,.,.) =
Columns 0 to 8
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.2980 0.2980 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.2980 0.2980 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
Columns 9 to 9
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
[torch.FloatTensor of size 1x10x10]