- 1. 随机裁剪:transforms.RandomCrop
- 2. 中心裁剪:transforms.CenterCrop
- 3. 随机长宽比裁剪 transforms.RandomResizedCrop
- 4. 上下左右中心裁剪:transforms.FiveCrop
- 5. 上下左右中心裁剪后翻转: transforms.TenCrop
- 6. 依概率 p 水平翻转 transforms.RandomHorizontalFlip
- 7. 依概率 p 垂直翻转 transforms.RandomVerticalFlip
- 8. 随机旋转:transforms.RandomRotation
- 9.resize:transforms.Resize
- 10. 标准化:transforms.Normalize
- 11. 转为 tensor:transforms.ToTensor
- 12. 填充:transforms.Pad
- 13. 修改亮度、对比度和饱和度:transforms.ColorJitter
- 14. 转灰度图:transforms.Grayscale
- 15. 线性变换:transforms.LinearTransformation()
- 16. 仿射变换:transforms.RandomAffine
- 17. 依概率 p 转为灰度图:transforms.RandomGrayscale
- 18. 将数据转换为 PILImage:transforms.ToPILImage
- 19.transforms.Lambda
- 20.transforms.RandomChoice(transforms)
- 21.transforms.RandomApply(transforms, p=0.5)
- 22.transforms.RandomOrder
- 参考
变换是常见的图像变换。它们可以使用链接在一起Compose
。此外,还有torchvision.transforms.functional
模块。功能转换可以对转换进行细粒度控制。如果您必须构建更复杂的转换管道(例如,在分段任务的情况下),这将非常有用。
torchvision.transforms.Compose(transforms)
- transforms(Transform 对象列表)- 要组成的变换列表。
例子:
transforms.Compose([
transforms.CenterCrop(10),
transforms.ToTensor(), ])
官方文档只是将方法陈列,没有归纳总结,顺序很乱,这里总结一共有四大类,方便大家索引:
- 裁剪(Crop)
中心裁剪:transforms.CenterCrop
随机裁剪:transforms.RandomCrop
随机长宽比裁剪:transforms.RandomResizedCrop
上下左右中心裁剪:transforms.FiveCrop
上下左右中心裁剪后翻转,transforms.TenCrop
- 翻转和旋转(Flip and Rotation)
依概率 p 水平翻转:transforms.RandomHorizontalFlip(p=0.5)
依概率 p 垂直翻转:transforms.RandomVerticalFlip(p=0.5)
随机旋转:transforms.RandomRotation
- 图像变换
resize:transforms.Resize
标准化:transforms.Normalize
转为 tensor,并归一化至[0-1]:transforms.ToTensor
填充:transforms.Pad
修改亮度、对比度和饱和度:transforms.ColorJitter
转灰度图:transforms.Grayscale
线性变换:transforms.LinearTransformation()
仿射变换:transforms.RandomAffine
依概率 p 转为灰度图:transforms.RandomGrayscale
将数据转换为 PILImage:transforms.ToPILImage
用户定义 lambda 作为转换:transforms.Lambda
- 对 transforms 操作,使数据增强更灵活
transforms.RandomChoice(transforms)
从给定的一系列 transforms 中选一个进行操作transforms.RandomApply(transforms, p=0.5)
给一个 transform 加上概率,依概率进行操作transforms.RandomOrder
将 transforms 中的操作随机打乱
1. 随机裁剪:transforms.RandomCrop
torchvision.transforms.RandomCrop(size,padding = None,pad_if_needed = False,fill = 0,padding_mode ='constant' )
size(sequence 或 int
) - crop 的所需输出大小。如果 size 是 int 而不是像(h,w)这样的序列,则进行正方形裁剪(大小,大小)padding(int 或 sequence ,optional
) - 图像每个边框上的可选填充。默认值为 None,即无填充。如果提供长度为 4 的序列,则它用于分别填充左,上,右,下边界。如果提供长度为 2 的序列,则分别用于填充左 / 右,上 / 下边界pad_if_needed(boolean)
- 如果小于所需大小,它将填充图像以避免引发异常。由于在填充之后完成裁剪,因此填充似乎是在随机偏移处完成的。- fill - 恒定填充的像素填充值。默认值为 0. 如果长度为 3 的元组,则分别用于填充 R,G,B 通道。仅当 padding_mode 为常量时才使用此值.
padding_mode
- 填充类型。应该是:1.constant,常量。2.edge 按照图片边缘的像素值来填充。3.reflect,。 4. symmetric,
2. 中心裁剪:transforms.CenterCrop
torchvision.transforms.CenterCrop(size)
- 依据给定的 size 从中心裁剪 参数: size- (sequence or int),若为 sequence, 则为 (h,w),若为 int,则 (size,size)
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
4. 上下左右中心裁剪:transforms.FiveCrop
torchvision.transforms.FiveCrop(size)
将给定的 PIL 图像裁剪为四个角和中央裁剪。
此转换返回图像元组,并且数据集返回的输入和目标数量可能不匹配。
- 对图片进行上下左右以及中心裁剪,获得 5 张图片,返回一个 4D-tensor 参数: size- (sequence or int),若为 sequence, 则为 (h,w),若为 int,则 (size,size)
5. 上下左右中心裁剪后翻转: transforms.TenCrop
torchvision.transforms.TenCrop(size, vertical_flip=False)
将给定的 PIL 图像裁剪为四个角,中央裁剪加上这些的翻转版本(默认使用水平翻转)。
此转换返回图像元组,并且数据集返回的输入和目标数量可能不匹配。
- size(sequence 或 int) - 作物的所需输出大小。如果 size 是 int 而不是像(h,w)这样的序列,则进行正方形裁剪(大小,大小)。
- vertical_flip(bool) - 使用垂直翻转而不是水平翻转
6. 依概率 p 水平翻转 transforms.RandomHorizontalFlip
torchvision.transforms.RandomHorizontalFlip(p=0.5)
以给定的概率随机水平翻转给定的 PIL 图像。
- p- 概率,默认值为 0.5
7. 依概率 p 垂直翻转 transforms.RandomVerticalFlip
torchvision.transforms.RandomVerticalFlip(p=0.5)
以给定的概率随机垂直翻转给定的 PIL 图像。
- p(浮点数) - 图像被翻转的概率。默认值为 0.5
8. 随机旋转:transforms.RandomRotation
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) - 可选的旋转中心。原点是左上角。默认值是图像的中心。
9.resize:transforms.Resize
torchvision.transforms.Resize(size, interpolation=2)
将输入 PIL 图像的大小调整为给定大小。
- size(sequence 或 int) - 所需的输出大小。如果 size 是类似(h,w)的序列,则输出大小将与此匹配。如果 size 是 int,则图像的较小边缘将与此数字匹配。即,如果高度 > 宽度,则图像将重新缩放为(尺寸 * 高度 / 宽度,尺寸)
- interpolation(int,optional) - 所需的插值。默认是 PIL.Image.BILINEAR
10. 标准化: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) - 每个通道的标准偏差序列。
11. 转为 tensor:transforms.ToTensor
torchvision.transforms.ToTensor
功能:将 PIL Image 或者 ndarray 转换为 tensor,并且归一化至[0-1] 注意事项:归一化至[0-1]是直接除以 255,若自己的 ndarray 数据尺度有变化,则需要自行修改。
12. 填充:transforms.Pad
torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')
使用给定的 “pad” 值在所有面上填充给定的 PIL 图像。
- padding(int 或 tuple) - 每个边框上的填充。如果提供单个 int,则用于填充所有边框。如果提供长度为 2 的元组,则分别为左 / 右和上 / 下的填充。如果提供长度为 4 的元组,则分别为左,上,右和下边框的填充。
- fill(int 或 tuple) - 常量填充的像素填充值。默认值为 0. 如果长度为 3 的元组,则分别用于填充 R,G,B 通道。仅
padding_mode 为常量时才使用此值 - padding_mode(str)
- 填充类型。应该是:恒定,边缘,反射或对称。默认值是常量。
- 常量:具有常量值的焊盘,该值用填充指定
- edge:填充图像边缘的最后一个值
- 反射:具有图像反射的焊盘,而不重复边缘上的最后一个值. 例如,在反射模式下在两侧填充 2 个元素的填充[1,2,3,4]将导致[3,2,1,2,3,4,3,2]
- 对称:具有图像反射的垫,重复边缘上的最后一个值. 例如,在对称模式下填充两侧带有 2 个元素的[1,2,3,4]将导致[2,1,1,2,3,4,4,3]
- 填充类型。应该是:恒定,边缘,反射或对称。默认值是常量。
13. 修改亮度、对比度和饱和度: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。
14. 转灰度图:transforms.Grayscale
torchvision.transforms.Grayscale(num_output_channels=1)
将图像转换为灰度。
功能:将图片转换为灰度图 参数: num_output_channels- (int) ,当为 1 时,正常的灰度图,当为 3 时, 3 channel with r == g == b
15. 线性变换: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.
16. 仿射变换: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),然后在范围 - imgwidth a <dx <imgwidth a 中随机采样水平移位,并且在 - imgheight b <dy <imgheight b 范围内随机采样垂直移位。默认情况下不会翻译。
- 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)
17. 依概率 p 转为灰度图:transforms.RandomGrayscale
torchvision.transforms.RandomGrayscale(p=0.1)
功能:依概率 p 将图片转换为灰度图,若通道数为 3,则 3 channel with r == g == b
18. 将数据转换为 PILImage:transforms.ToPILImage
torchvision.transforms.ToPILImage(mode=None)
功能:将 tensor 或者 ndarray 的数据转换为 PIL Image 类型数据 参数: mode- 为 None 时,为 1 通道, mode=3 通道默认转换为 RGB,4 通道默认转换为 RGBA。
19.transforms.Lambda
torchvision.transforms.Lambda(lambd )
将用户定义的 lambda 应用为变换。
- lambd(函数) - 用于转换的 Lambda / 函数。
20.transforms.RandomChoice(transforms)
torchvision.transforms.RandomChoice(transforms)
从给定的一系列 transforms 中选一个进行操作,randomly picked from a list
21.transforms.RandomApply(transforms, p=0.5)
torchvision.transforms.RandomApply(transforms, p=0.5)
给一个 transform 加上概率,以一定的概率执行该操作
- transforms(列表或元组) - 转换列表
- p(浮点数) - 概率
22.transforms.RandomOrder
torchvision.transforms.RandomOrder(transforms)
将 transforms 中的操作顺序随机打乱。
参考
PyTorch 学习笔记(三):transforms 的二十二个方法
TORCHVISION.TRANSFORMS
https://blog.csdn.net/qq_38410428/article/details/94719553?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control