torchvision.transform图片转变/数据增强方法总结

来自官方文档-torchvision/transforms

目录

  • Crop裁剪
  • Flip and Rotation翻转和旋转
  • 图片变换
  • 对transform的后续操作

Crop裁剪

transforms.CenterCrop中心裁剪

torchvision.transforms.CenterCrop(size)

根据给定的size从中心裁剪,size可以是sequence或者int,即(h, w)或者(size, size)。

transforms.RandomCrop随机裁剪

torchvision.transforms.RandomCrop(size, padding = None, pad_if_needed = False, fill = 0, padding_mode ='constant')
  • size可以是sequence或者int,即(h, w)或者(size, size)。
  • padding 图像每个边框上的可选填充。默认值为None,即无填充。如果提供长度为4的序列,则它用于分别填充左,上,右,下边界。如果提供长度为2的序列,则分别用于填充左/右,上/下边界
  • pad_if_need如果小于所需大小,它将填充图像以避免引发异常。由于在填充之后完成裁剪,因此填充似乎是在随机偏移处完成的。
  • fill恒定填充的像素填充值。默认值为0.如果长度为3的元组,则分别用于填充R,G,B通道。仅当padding_mode为常量时才使用此值.
  • padding_mode填充类型,恒定、边缘、反射、对称。默认恒定
    • constant,具有常量值,用pad指定
    • edge,填充图像边缘的最后一个值
    • reflect,反射,例如padding [1, 2, 3, 4] with 2 elements on both sides in reflect mode will result in [3, 2, 1, 2, 3, 4, 3, 2]
    • symmetric,对称,例如padding [1, 2, 3, 4] with 2 elements on both sides in symmetric mode will result in [2, 1, 1, 2, 3, 4, 4, 3]

transforms.RandomResizedCrop随机长宽比裁剪

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

将给定的PIL图像裁剪为随机大小和宽高比。
将原始图像大小变成随机大小(默认值:是原始图像的0.08到1.0倍)和随机宽高比(默认值:3/4到4/3倍)。这种方法最终调整到适当的大小。这通常用于训练Inception网络。

  • == size== - 每条边的预期输出大小
  • scale - 裁剪的原始尺寸的大小范围
  • ratio - 裁剪的原始宽高比的宽高比范围
  • interpolation - 默认值:PIL.Image.BILINEAR

transforms.FiveCrop上下左右中心裁剪

torchvision.transforms.FiveCrop(size)

将给定的PIL图像裁剪为四个角和中央裁剪。
此转换返回图像元组,并且数据集返回的输入和目标数量可能不匹配。

  • 对图片进行上下左右以及中心裁剪,获得5张图片,返回一个4D-tensor 参数: size- (sequence or int),若为sequence,则为(h,w),若为int,则(size,size)

transforms.TenCrop上下左右中心裁剪后旋转

torchvision.transforms.TenCrop(size, vertical_flip=False) 

将给定的PIL图像裁剪为四个角,中央裁剪加上这些的翻转版本(默认使用水平翻转)。
此转换返回图像元组,并且数据集返回的输入和目标数量可能不匹配。

  • size(sequence 或int) -作物的所需输出大小。如果size是int而不是像(h,w)这样的序列,则进行正方形裁剪(大小,大小)。
  • vertical_flip(bool) - 使用垂直翻转而不是水平翻转

Flip and Rotation翻转和旋转

transforms.RandomHorizontalFlip(p=0.5)依概率水平翻转

torchvision.transforms.RandomHorizontalFlip(p=0.5)

transforms.RandomVerticalFlip(p=0.5)依概率垂直翻转

torchvision.transforms.RandomVerticalFlip(p=0.5)

transforms.RandomFlip随机旋转

torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None)
  • degrees(sequence 或float或int) -要选择的度数范围。如果degrees是一个数字而不是像(min,max)这样的序列,则度数范围将是(-degrees,+ degrees)。
  • resample({PIL.Image.NEAREST ,PIL.Image.BILINEAR ,PIL.Image.BICUBIC} ,可选) - 可选的重采样过滤器。请参阅过滤器以获取更多信 如果省略,或者图像具有模式“1”或“P”,则将其设置为PIL.Image.NEAREST。
  • expand(bool,optional) - 可选的扩展标志。如果为true,则展开输出以使其足够大以容纳整个旋转图像。如果为false或省略,则使输出图像与输入图像的大小相同。请注意,展开标志假定围绕中心旋转而不进行平移。
  • center(2-tuple ,optional) - 可选的旋转中心。原点是左上角。默认值是图像的中心。

图片变换

transforms.Resize改变大小

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

将输入PIL图像的大小调整为给定大小。

  • size(sequence 或int) -所需的输出大小。如果size是类似(h,w)的序列,则输出大小将与此匹配。如果size是int,则图像的较小边缘将与此数字匹配。即,如果高度>宽度,则图像将重新缩放为(尺寸*高度/宽度,尺寸)
  • interpolation(int,optional) - 所需的插值。默认是 PIL.Image.BILINEAR

transforms.Normalize标准化

torchvision.transforms.Normalize(mean, std)

用平均值和标准偏差归一化张量图像。给定mean:(M1,…,Mn)和std:(S1,…,Sn)对于n通道,此变换将标准化输入的每个通道,torch.*Tensor即 input[channel] = (input[channel] - mean[channel]) / std[channel]

  • mean(sequence) - 每个通道的均值序列。
  • std(sequence) - 每个通道的标准偏差序列。

transforms.ToTensor转为Tensor,并归一化到[0,1]

torchvision.transforms.ToTensor

功能:将PIL Image或者 ndarray 转换为tensor,并且归一化至[0-1] 注意事项:归一化至[0-1]是直接除以255,若自己的ndarray数据尺度有变化,则需要自行修改。

transforms.Pad填充

torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')
# 参考transforms.RandomCrop随机裁剪

transforms.ColorJitter修改亮度、对比度、饱和度

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

随机更改图像的亮度,对比度和饱和度。

  • 亮度(浮点数或python的元组:浮点数(最小值,最大值)) - 抖动亮度多少。从[max(0,1-brightness),1 +brightness]或给定[min,max]均匀地选择brightness_factor。应该是非负数。
  • 对比度(浮点数或python的元组:浮点数(最小值,最大值)) - 抖动对比度多少。contrast_factor从[max(0,1-contrast),1 + contrast]或给定[min,max]中均匀选择。应该是非负数。
  • 饱和度(浮点数或python的元组数:float (min ,max )) - 饱和度抖动多少。饱和度_因子从[max(0,1-saturation),1 + saturation]或给定[min,max]中均匀选择。应该是非负数。
  • 色调(浮点数或python的元组:浮点数(最小值,最大值)) - 抖动色调多少。从[-hue,hue]或给定的[min,max]中均匀地选择hue_factor。应该有0 <= hue <= 0.5或-0.5 <= min <= max <= 0.5。

transforms.Grayscare转灰度图

torchvision.transforms.Grayscale(num_output_channels=1)

将图像转换为灰度。
功能:将图片转换为灰度图 参数: num_output_channels- (int) ,当为1时,正常的灰度图,当为3时, 3 channel with r == g == b

transforms.RandomGartscare依概率转灰度图

torchvision.transforms.RandomGrayscale(p=0.1)

功能:依概率p将图片转换为灰度图,若通道数为3,则3 channel with r == g == b

transforms.LinearTransformation线性变换

torchvision.transforms.LinearTransformation(transformation_matrix) 

使用方形变换矩阵和离线计算的mean_vector变换张量图像。给定transformation_matrix和mean_vector,将使矩阵变平。从中拉伸并减去mean_vector,然后用变换矩阵计算点积,然后将张量重新整形为其原始形状。
白化转换:假设X是列向量零中心数据。然后torch.mm计算数据协方差矩阵[D x D],对该矩阵执行SVD并将其作为transformation_matrix传递。

  • transformation_matrix(Tensor) - 张量[D x D],D = C x H x W.
  • mean_vector(Tensor) - 张量[D],D = C x H x W.

transforms.RandomAffine仿射变换

torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0) 

图像保持中心不变的随机仿射变换。

  • degrees(sequence 或float或int) -要选择的度数范围。如果degrees是一个数字而不是像(min,max)这样的序列,则度数范围将是(-degrees,+degrees)。设置为0可停用旋转。
    -== translate(元组,可选)== - 水平和垂直平移的最大绝对分数元组。例如translate =(a,b),然后在范围-img_width * a
  • scale(元组,可选) - 缩放因子间隔,例如(a,b),然后从范围a <= scale <= b中随机采样缩放。默认情况下会保持原始比例。
  • shear(sequence 或float或int,optional) - 要选择的度数范围。如果degrees是一个数字而不是像(min,max)这样的序列,则度数范围将是(-degrees,+ degrees)。默认情况下不会应用剪切
  • resample({PIL.Image.NEAREST ,PIL.Image.BILINEAR ,PIL.Image.BICUBIC} ,可选) - 可选的重采样过滤器。请参阅过滤器以获取更多信 如果省略,或者图像具有模式“1”或“P”,则将其设置为PIL.Image.NEAREST。
  • fillcolor(int) - 输出图像中变换外部区域的可选填充颜色。(Pillow> = 5.0.0)

transforms.ToPILImage转为PIL的图

torchvision.transforms.ToPILImage(mode=None)

功能:将tensor 或者 ndarray的数据转换为 PIL Image 类型数据 参数: mode- 为None时,为1通道, mode=3通道默认转换为RGB,4通道默认转换为RGBA。

transforms.Lambda依据用户定义的函数变换

torchvision.transforms.Lambda(lambd )

对transform的后续操作

transforms.RandomChoice(transforms)从给定的transforms中选择一个进行操作

torchvision.transforms.RandomChoice(transforms)

transforms.RandomApply(transforms, p=0.5)给一个transforms加上概率,依概率进行操作

torchvision.transforms.RandomApply(transforms, p=0.5)
  • transform 列表或者元祖
  • p 浮点数
    transforms.RandomOrder将transforms中的操作随机打乱
torchvision.transforms.RandomOrder(transforms)

你可能感兴趣的:(机器学习)