torchvision.transforms¶
转换是常见的图像变换。它们可以使用 Compose 连接在一起。
大多数变换类都有一个等效的函数:功能性变换 提供了对变换的细粒度控制。
这在需要构建更复杂的变换流水线时非常有用(例如,在分割任务的情况下)。
大多数变换接受 PIL 图像和张量图像,尽管有些变换是 仅限PIL 的,有些是 仅限张量 的。可以使用 转换变换 来在PIL图像之间进行转换。
接受张量图像的转换也可以接受张量图像批次。一个张量图像是具有(C, H, W)形状的张量,其中C是通道数,H和W是图像的高度和宽度。张量图像批次是一个具有(B, C, H, W)形状的张量,其中B是批次中的图像数量。
张量图像的值范围由张量的数据类型隐式定义。具有浮点数据类型的张量图像应具有[0, 1)中的值。具有整数数据类型的张量图像应具有[0, MAX_DTYPE]中的值,其中MAX_DTYPE是该数据类型可以表示的最大值。
随机变换会对给定批次中的所有图像应用相同的变换,但在不同调用之间会产生不同的变换。为了在不同调用之间实现可重复的变换,您可以使用函数变换。
以下示例说明了可用转换的应用:
警告
自 v0.8.0 版本起,所有随机变换都使用 torch 默认的随机生成器来采样随机参数。 这是一个破坏向后兼容性的更改,用户应按照如下方式设置随机状态:
# Previous versions
# import random
# random.seed(12)
# Now
import torch
torch.manual_seed(17)
请记住,相同的种子值对于 torch 随机生成器和 Python 随机生成器不会产生相同的结果。
可编程转换¶
为了脚本转换,请使用torch.nn.Sequential而不是Compose。
transforms = torch.nn.Sequential(
transforms.CenterCrop(10),
transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
)
scripted_transforms = torch.jit.script(transforms)
确保只使用可脚本化的转换,即与torch.Tensor一起工作且不需要lambda函数或PIL.Image。
对于要与torch.jit.script一起使用的任何自定义转换,它们应该派生自torch.nn.Module。
变换的组合¶
-
class
torchvision.transforms.Compose(transforms)[source]¶ 组合多个变换操作。此变换不支持 torchscript。 请参见下面的说明。
- Parameters
转换 (
Transform对象列表) – 转换列表用于组合。
示例
>>> transforms.Compose([ >>> transforms.CenterCrop(10), >>> transforms.ToTensor(), >>> ])
注意
为了脚本转换,请如下使用
torch.nn.Sequential。>>> transforms = torch.nn.Sequential( >>> transforms.CenterCrop(10), >>> transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), >>> ) >>> scripted_transforms = torch.jit.script(transforms)
确保只使用可脚本化的转换,即可以处理
torch.Tensor,不需要lambda函数或PIL.Image。
对PIL图像和torch.*Tensor的转换¶
-
class
torchvision.transforms.CenterCrop(size)[source]¶ 裁剪给定图像的中心。 如果图像为 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。 如果图像在任一边的大小小于输出大小,则会在图像周围填充 0 然后进行中心裁剪。
- Parameters
大小 (序列 或 整数) – 希望的裁剪输出大小。如果大小是一个整数而不是像 (h, w) 这样的序列,则会制作一个正方形裁剪 (size, size)。如果提供了一个长度为 1 的序列,它将被解释为 (size[0], size[0])。
使用
CenterCrop的示例:
-
class
torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)[source]¶ 随机改变图像的亮度、对比度、饱和度和色调。 如果图像是 torch 张量,它应该具有[…, 3, H, W] 的形状,其中…表示任意数量的前置维度。 如果图像是 PIL 图像,则不支持模式“1”、“L”、“I”、“F”以及带有透明通道的模式。
- Parameters
亮度 (float 或 python:float元组 (min, max)) – 调整亮度的程度。 亮度因子从[max(0, 1 - brightness), 1 + brightness]或给定的[min, max]中均匀选择。应为非负数。
对比度 (float 或 python:float 的元组 (min, max)) – 对比度抖动的程度。 contrast_factor 从[max(0, 1 - contrast), 1 + contrast]或给定的[min, max]中均匀选择。应该是非负数。
饱和度 (float 或 python:float元组 (min, max)) – 饱和度抖动的程度。 饱和度因子在[max(0, 1 - saturation), 1 + saturation]范围内均匀选择,或者在给定的[min, max]范围内。应为非负数。
色调 (float 或 python:float 的元组 (min, max)) – 色调抖动的程度。 hue_factor 从 [-hue, hue] 或给定的 [min, max] 中均匀选择。 应满足 0<= hue <= 0.5 或 -0.5 <= min <= max <= 0.5。
使用
ColorJitter的示例:-
static
get_params(brightness: Optional[List[float]], contrast: Optional[List[float]], saturation: Optional[List[float]], hue: Optional[List[float]]) → Tuple[torch.Tensor, Optional[float], Optional[float], Optional[float], Optional[float]][source]¶ 获取将应用于图像的随机变换的参数。
- Parameters
亮度 (python:float元组(最小值,最大值),可选) – 从中均匀选择亮度因子的范围。传入None以关闭此变换。
对比度 (元组,包含两个python:float值(最小值,最大值),可选) – 对比度因子的选择范围。通过传入None来关闭此变换。
饱和度 (元组,包含两个python:float值(最小值,最大值),可选) – 饱和度因子的选择范围。以均匀方式选择。传入None以关闭此转换。
色调 (Python 浮点数元组(最小值,最大值),可选) – 从中均匀选择色调因子的范围。 传入 None 以关闭此变换。
- Returns
用于应用随机变换的参数 及其随机顺序。
- Return type
-
class
torchvision.transforms.FiveCrop(size)[source]¶ 裁剪给定图像的四个角和中央部分。 如果图像为 torch 张量,则期望其形状为 […, H, W],其中 … 表示任意数量的前置维度。
注意
此转换返回一个图像元组,可能存在输入和目标的数量不匹配的情况。您的数据集返回的输入和目标数量可能不一致。请参见下面的示例,了解如何处理这种情况。
- Parameters
大小 (序列 或 整数) – 希望的裁剪输出大小。如果大小是一个
int而不是像 (h, w) 这样的序列,则会制作一个大小为 (size, size) 的正方形裁剪。 如果提供了一个长度为 1 的序列,它将被解释为 (size[0], size[0])。
示例
>>> transform = Compose([ >>> FiveCrop(size), # this is a list of PIL Images >>> Lambda(lambda crops: torch.stack([ToTensor()(crop) for crop in crops])) # returns a 4D tensor >>> ]) >>> #In your test loop you can do the following: >>> input, target = batch # input is a 5d tensor, target is 2d >>> bs, ncrops, c, h, w = input.size() >>> result = model(input.view(-1, c, h, w)) # fuse batch size and ncrops >>> result_avg = result.view(bs, ncrops, -1).mean(1) # avg over crops
使用
FiveCrop的示例:
-
class
torchvision.transforms.Grayscale(num_output_channels=1)[source]¶ 将图像转换为灰度图。 如果图像为 torch 张量,则期望其形状为 […, 3, H, W],其中 … 表示任意数量的前置维度。
- Parameters
输出图像通道数 (int) – (1 或 3) 输出图像所需的通道数
- Returns
输入的灰度版本。
如果
num_output_channels == 1:返回的图像是单通道如果
num_output_channels == 3:返回的图像是3通道且r == g == b
- Return type
PIL 图像
使用
Grayscale的示例:
-
class
torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')[source]¶ 在图像的四边用给定的“填充”值进行填充。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示对于模式 reflect 和 symmetric 最多有 2 个前置维度, 对于模式 edge 最多有 3 个前置维度, 对于模式 constant 可以有任意数量的前置维度。
- Parameters
填充 (整数 或 序列) –
每边的填充。如果提供一个单个整数,则用于填充所有边。如果提供长度为 2 的序列,则分别为左/右和上/下的填充。如果提供长度为 4 的序列,则分别为左、上、右和下边的填充。
注意
在 torchscript 模式下不支持单个整数的填充,使用长度为 1 的序列:
[padding, ]。填充 (数字 或 字符串 或 元组) – 常数填充模式下的像素填充值。默认值为 0。如果是一个长度为 3 的元组,则分别用于填充 R、G、B 通道。 此值仅在 padding_mode 为常数时使用。 对于 torch Tensor,仅支持数字。 对于 PIL Image,仅支持整数或字符串或元组值。
填充模式 (str) –
填充类型。应为:constant、edge、reflect 或 symmetric。 默认为 constant。
用常量值进行填充,该值通过fillvalue指定。
边缘:用图像边缘的最后一个值进行填充。 如果输入的是一个5D的torch张量,则会对最后3个维度进行填充,而不是最后2个。
反射模式:通过图像的反射填充边缘,而不重复边缘的最后一个值。 例如,以反射模式在 [1, 2, 3, 4] 的两侧各填充 2 个元素, 将得到 [3, 2, 1, 2, 3, 4, 3, 2]。
对称模式:通过镜像反射图像进行填充,并在边缘重复最后一个值。 例如,以对称模式在 [1, 2, 3, 4] 的两侧各填充 2 个元素, 将得到 [2, 1, 1, 2, 3, 4, 4, 3]。
使用
Pad的示例:
-
class
torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, interpolation=<InterpolationMode.NEAREST: 'nearest'>, fill=0, fillcolor=None, resample=None)[source]¶ 保持图像中心不变的随机仿射变换。 如果图像是 torch 张量,它应该具有[…, H, W] 的形状,其中…表示任意数量的前置维度。
- Parameters
角度范围 (序列或数字) – 选择的角度范围。 如果角度是一个数字而不是像 (最小值, 最大值) 的序列,角度范围将是 (-角度, +角度)。设置为 0 可以禁用旋转。
translate (元组, 可选) – 水平和垂直平移的最大绝对分数的元组。例如 translate=(a, b),则水平偏移在 -img_width * a < dx < img_width * a 的范围内随机采样,垂直偏移在 -img_height * b < dy < img_height * b 的范围内随机采样。默认情况下不会平移。
scale (元组, 可选) – 缩放因子区间,例如 (a, b),则 scale 从范围 a <= scale <= b 中随机采样。默认情况下将保持原始比例。
错切变换 (序列或数字,可选) – 从指定范围内选择错切角度。 如果错切是一个数字,则沿x轴应用范围为(-shear, +shear)的错切变换。 否则,如果错切是一个包含2个值的序列,则沿x轴应用范围为(shear[0], shear[1])的错切变换。 否则,如果错切是一个包含4个值的序列,则沿x轴应用范围为(shear[0], shear[1])的错切变换,并沿y轴应用范围为(shear[2], shear[3])的错切变换。 默认情况下不会应用错切变换。
插值法 (InterpolationMode) – 需要的插值枚举,由
torchvision.transforms.InterpolationMode定义。默认为InterpolationMode.NEAREST。 如果输入是张量,仅支持InterpolationMode.NEAREST和InterpolationMode.BILINEAR。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。填充 (序列 或 数字) – 转换后图像外部区域的像素填充值。默认值为
0。如果给定一个数字,则该值将分别用于所有波段。fillcolor (序列或数字,可选) – 已废弃的参数,并将在v0.10.0版本中移除。 请使用
fill参数代替。resample (int, optional) – 已废弃的参数,自 v0.10.0 起将被移除。 请改用
interpolation参数。
使用
RandomAffine的示例:
-
class
torchvision.transforms.RandomApply(transforms, p=0.5)[source]¶ 以指定的概率随机应用一组变换。
注意
为了脚本转换,请使用
torch.nn.ModuleList作为输入,而不是像下面所示的transforms列表/元组:>>> transforms = transforms.RandomApply(torch.nn.ModuleList([ >>> transforms.ColorJitter(), >>> ]), p=0.3) >>> scripted_transforms = torch.jit.script(transforms)
确保只使用可脚本化的转换,即可以处理
torch.Tensor,不需要lambda函数或PIL.Image。- Parameters
转换 (序列或torch.nn.Module) – 转换列表
p (float) – 概率
使用
RandomApply的示例:
-
class
torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')[source]¶ 在给定图像的随机位置裁剪图像。 如果图像为 torch 张量,则应具有[…, H, W] 形状,其中…表示任意数量的前置维度, 但如果使用非常数填充,则输入最多应有 2 个前置维度。
- Parameters
大小 (序列 或 整数) – 希望的裁剪输出大小。如果大小是一个整数而不是像 (h, w) 这样的序列,则会制作一个正方形裁剪 (size, size)。如果提供了一个长度为 1 的序列,它将被解释为 (size[0], size[0])。
填充 (整数 或 序列, 可选) –
图像每一边的可选填充。默认为 None。如果提供单个整数,则用于填充所有边框。如果提供长度为 2 的序列,则分别为左/右和上/下的填充。如果提供长度为 4 的序列,则分别为左、上、右和下边框的填充。
注意
在 torchscript 模式下不支持单个整数的填充,使用长度为 1 的序列:
[padding, ]。pad_if_needed (布尔值) – 如果图像小于所需大小,则会进行填充以避免抛出异常。由于裁剪是在填充之后进行的,因此填充似乎是在随机偏移处完成的。
填充 (数字 或 字符串 或 元组) – 常数填充模式下的像素填充值。默认值为 0。如果是一个长度为 3 的元组,则分别用于填充 R、G、B 通道。 此值仅在 padding_mode 为常数时使用。 对于 torch Tensor,仅支持数字。 对于 PIL Image,仅支持整数或字符串或元组值。
填充模式 (str) –
填充类型。应为:constant、edge、reflect 或 symmetric。 默认为 constant。
用常量值进行填充,该值通过fillvalue指定。
边缘:用图像边缘的最后一个值进行填充。 如果输入的是一个5D的torch张量,则会对最后3个维度进行填充,而不是最后2个。
反射模式:通过图像的反射填充边缘,而不重复边缘的最后一个值。 例如,以反射模式在 [1, 2, 3, 4] 的两侧各填充 2 个元素, 将得到 [3, 2, 1, 2, 3, 4, 3, 2]。
对称模式:通过镜像反射图像进行填充,并在边缘重复最后一个值。 例如,以对称模式在 [1, 2, 3, 4] 的两侧各填充 2 个元素, 将得到 [2, 1, 1, 2, 3, 4, 4, 3]。
使用
RandomCrop的示例:
-
class
torchvision.transforms.RandomGrayscale(p=0.1)[source]¶ 以概率 p(默认值为 0.1)随机将图像转换为灰度。 如果图像是 torch 张量,则期望其形状为 […, 3, H, W],其中 … 表示任意数量的前置维度。
- Parameters
p (float) – 图像应转换为灰度的概率。
- Returns
输入图像的灰度版本,概率为 p,不变的概率为 (1-p)。 - 如果输入图像是单通道:灰度版本也是单通道 - 如果输入图像是三通道:灰度版本是三通道且 r == g == b
- Return type
PIL 图像或张量
-
class
torchvision.transforms.RandomHorizontalFlip(p=0.5)[source]¶ 随机以给定的概率水平翻转给定图像。 如果图像为 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
- Parameters
p (float) – 图像被翻转的概率。默认值为 0.5
使用
RandomHorizontalFlip的示例:
-
class
torchvision.transforms.RandomPerspective(distortion_scale=0.5, p=0.5, interpolation=<InterpolationMode.BILINEAR: 'bilinear'>, fill=0)[source]¶ 以给定的概率对给定图像执行随机透视变换。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
- Parameters
distortion_scale (float) – 参数用于控制扭曲程度,范围从 0 到 1。 默认值为 0.5。
p (float) – 图像被转换的概率。默认值为 0.5。
插值法 (InterpolationMode) – 需要的插值枚举,由
torchvision.transforms.InterpolationMode定义。默认为InterpolationMode.BILINEAR。 如果输入是张量,仅支持InterpolationMode.NEAREST和InterpolationMode.BILINEAR。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。填充 (序列 或 数字) – 转换后图像外部区域的像素填充值。默认值为
0。如果给定一个数字,则该值将分别用于所有波段。
使用
RandomPerspective的示例:-
forward(img)[source]¶ - Parameters
图像 (PIL 图像或张量) – 需要进行透视变换的图像。
- Returns
随机变换后的图像。
- Return type
PIL 图像或张量
-
class
torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=<InterpolationMode.BILINEAR: 'bilinear'>)[source]¶ 裁剪图像的随机部分并将其调整到指定大小。
如果图像为 torch 张量,则期望其具有 […, H, W] 形状,其中 … 表示任意数量的前置维度。
对原始图像进行裁剪:裁剪区域的面积(H * W)和宽高比都是随机的。最后,该裁剪区域被调整为给定的大小。这种方法常用于训练Inception网络。
- Parameters
大小 (int 或 序列) –
预期裁剪的输出大小,对于每一边。如果 size 是一个整数而不是像 (h, w) 这样的序列,则会生成一个边长为
(size, size)的正方形输出。如果提供了一个长度为 1 的序列,它将被解释为 (size[0], size[0])。注意
在 torchscript 模式下不支持单个整数大小,使用长度为 1 的序列:
[size, ]。缩放比例 (浮点数元组) – 指定随机裁剪区域的下限和上限,在调整大小之前。该比例相对于原始图像的面积定义。
比例 (python:float元组) – 随机裁剪前的宽高比下限和上限。
插值法 (InterpolationMode) – 需要的插值枚举,由
torchvision.transforms.InterpolationMode定义。 默认值为InterpolationMode.BILINEAR。 如果输入是张量,只支持InterpolationMode.NEAREST、InterpolationMode.BILINEAR和InterpolationMode.BICUBIC。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。
使用
RandomResizedCrop的示例:
-
class
torchvision.transforms.RandomRotation(degrees, interpolation=<InterpolationMode.NEAREST: 'nearest'>, expand=False, center=None, fill=0, resample=None)[source]¶ 以角度旋转图像。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
- Parameters
角度范围 (序列或数字) – 选择的角度范围。 如果角度是一个数字而不是像 (最小值, 最大值) 这样的序列,角度范围将是 (-degrees, +degrees)。
插值法 (InterpolationMode) – 需要的插值枚举,由
torchvision.transforms.InterpolationMode定义。默认为InterpolationMode.NEAREST。 如果输入是张量,仅支持InterpolationMode.NEAREST和InterpolationMode.BILINEAR。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。展开 (bool, 可选) – 可选的扩展标志。 如果为真,将输出扩展到足以容纳整个旋转图像的大小。 如果为假或省略,则输出图像与输入图像大小相同。 请注意,扩展标志假设围绕中心旋转且没有平移。
中心 (序列, 可选) – 可选的旋转中心,(x, y)。原点是图像的左上角。 默认为图像的中心。
填充 (序列 或 数字) – 用于旋转图像外部区域的像素填充值。默认值为
0。如果给定一个数字,则该值将分别用于所有波段。resample (int, optional) – 已废弃的参数,自 v0.10.0 起将被移除。 请改用
interpolation参数。
使用
RandomRotation的示例:
-
class
torchvision.transforms.RandomSizedCrop(*args, **kwargs)[source]¶ 注意:此转换已被 RandomResizedCrop 取代。
-
class
torchvision.transforms.RandomVerticalFlip(p=0.5)[source]¶ 随机以给定的概率垂直翻转给定图像。 如果图像为 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
- Parameters
p (float) – 图像被翻转的概率。默认值为 0.5
使用
RandomVerticalFlip的示例:
-
class
torchvision.transforms.Resize(size, interpolation=<InterpolationMode.BILINEAR: 'bilinear'>, max_size=None, antialias=None)[source]¶ 将输入图像调整为给定大小。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
警告
输出图像可能会根据其类型而有所不同:在降采样时,PIL图像和张量的插值会略有不同,因为PIL应用了抗锯齿。这可能导致网络性能出现显著差异。因此,最好使用相同的输入类型来训练和部署模型。
- Parameters
大小 (序列 或 整数) –
期望的输出大小。如果大小是一个序列,比如 (h, w),输出大小将与此匹配。如果大小是一个整数,图像的较短边将与此数字匹配。 即,如果高度大于宽度,则图像将被缩放为 (size * height / width, size)。
注意
在 torchscript 模式下不支持单个整数大小,使用长度为 1 的序列:
[size, ]。插值法 (InterpolationMode) – 需要的插值枚举,由
torchvision.transforms.InterpolationMode定义。 默认值为InterpolationMode.BILINEAR。 如果输入是张量,只支持InterpolationMode.NEAREST、InterpolationMode.BILINEAR和InterpolationMode.BICUBIC。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。max_size (int, optional) – 调整后的图像较长边的最大允许值:如果根据
size调整后图像的较长边大于max_size,则再次调整图像大小,使较长边等于max_size。因此,size可能会被覆盖,即较短边可能短于size。这仅在size是一个整数(或在 torchscript 模式下长度为 1 的序列)时支持。抗锯齿 (bool, 可选) –
抗锯齿标志。如果
img是 PIL 图像,该标志将被忽略,并始终使用抗锯齿。如果img是张量,默认情况下该标志为 False,仅在InterpolationMode.BILINEAR模式下可以设置为 True。警告
不支持对选项
antialias=True和输入img作为张量的自动微分。
使用
Resize的示例:
-
class
torchvision.transforms.TenCrop(size, vertical_flip=False)[source]¶ 裁剪给定图像的四个角和中央区域,并生成这些裁剪图的水平翻转版本。 如果图像为 torch 张量,则其形状应为 […, H, W],其中 … 表示任意数量的前置维度。
注意
此转换返回一个图像元组,可能存在输入和目标的数量不匹配的情况。您的数据集返回的输入和目标数量可能不一致。请参见下面的示例,了解如何处理这种情况。
- Parameters
示例
>>> transform = Compose([ >>> TenCrop(size), # this is a list of PIL Images >>> Lambda(lambda crops: torch.stack([ToTensor()(crop) for crop in crops])) # returns a 4D tensor >>> ]) >>> #In your test loop you can do the following: >>> input, target = batch # input is a 5d tensor, target is 2d >>> bs, ncrops, c, h, w = input.size() >>> result = model(input.view(-1, c, h, w)) # fuse batch size and ncrops >>> result_avg = result.view(bs, ncrops, -1).mean(1) # avg over crops
-
class
torchvision.transforms.GaussianBlur(kernel_size, sigma=(0.1, 2.0))[source]¶ 对图像进行随机选择的高斯模糊处理。 如果图像是 torch 张量,则期望其具有[…, C, H, W] 形状,其中…表示任意数量的前置维度。
- Parameters
- Returns
输入图像的高斯模糊版本。
- Return type
PIL 图像或张量
使用
GaussianBlur的示例:
-
class
torchvision.transforms.RandomInvert(p=0.5)[source]¶ 以给定的概率随机反转图像的颜色。 如果 img 是一个张量,它应采用[…, 1 或 3, H, W] 的格式, 其中…表示它可以有任意数量的前置维度。 如果 img 是 PIL 图像,则应采用“L”或“RGB”模式。
- Parameters
p (float) – 图像被颜色反转的概率。默认值为 0.5
使用
RandomInvert的示例:
-
class
torchvision.transforms.RandomPosterize(bits, p=0.5)[source]¶ 以给定的概率随机对图像进行.posterize处理,通过减少每个颜色通道的位数来实现。如果图像为torch张量,则应为torch.uint8类型,并且期望其形状为[…, 1或3, H, W],其中…表示任意数量的前置维度。如果img为PIL图像,则期望其模式为“L”或“RGB”。
使用
RandomPosterize的示例:
-
class
torchvision.transforms.RandomSolarize(threshold, p=0.5)[source]¶ 随机以给定的概率对图像进行 solarize 处理,方法是反转所有高于阈值的像素值。如果 img 是一个张量,它应该采用 […, 1 或 3, H, W] 的格式,其中 … 表示它可以有任意数量的前置维度。如果 img 是 PIL 图像,则应采用“L”或“RGB”模式。
使用
RandomSolarize的示例:
-
class
torchvision.transforms.RandomAdjustSharpness(sharpness_factor, p=0.5)[source]¶ 以给定的概率随机调整图像的锐度。如果图像为 torch 张量,则期望其形状为 […, 1 或 3, H, W],其中 … 表示任意数量的前置维度。
- Parameters
使用
RandomAdjustSharpness的示例:
-
class
torchvision.transforms.RandomAutocontrast(p=0.5)[source]¶ 随机以给定的概率对给定图像的像素进行自动对比度调整。 如果图像为 torch 张量,则期望其形状为[…, 1 或 3, H, W],其中…表示任意数量的前置维度。 如果 img 是 PIL 图像,则期望其模式为“L”或“RGB”。
- Parameters
p (float) – 图像自动对比的概率。默认值为 0.5
使用
RandomAutocontrast的示例:
仅对PIL图像进行转换¶
仅对torch.*Tensor进行变换¶
-
class
torchvision.transforms.LinearTransformation(transformation_matrix, mean_vector)[source]¶ 将张量图像与一个正方形变换矩阵和一个离线计算的均值向量进行转换。 此变换不支持PIL图像。 给定变换矩阵和均值向量,将展平的torch.*Tensor减去均值向量,然后与其计算点积,最后将张量重塑为其原始形状。
- Applications:
白化变换:假设 X 是一个零均值化的列向量数据。 然后计算数据协方差矩阵 [D x D],使用 torch.mm(X.t(), X), 对该矩阵进行奇异值分解,并将其作为变换矩阵传递。
- Parameters
变换矩阵 (张量) – 张量 [D x D], D = C x H x W
均值向量 (张量) – 张量 [D], D = C x H x W
-
class
torchvision.transforms.Normalize(mean, std, inplace=False)[source]¶ 用均值和标准差对张量图像进行归一化。 此变换不支持PIL图像。 给定均值:
(mean[1],...,mean[n])和标准差:(std[1],..,std[n])对于n通道, 此变换将对输入的每个通道进行归一化,即,output[channel] = (input[channel] - mean[channel]) / std[channel]注意
此变换在原地之外进行,即它不会更改输入张量。
- Parameters
均值 (序列) – 每个通道的均值序列。
std (序列) – 每个通道的标准差序列。
原地操作 (bool,可选) – 布尔值,用于使此操作就地进行。
使用
Normalize的示例:
-
class
torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)[source]¶ 随机选择一个矩形区域,并在该区域内擦除像素。 此变换不支持PIL图像。 Zhong等人提出的“随机擦除数据增强”。详见https://arxiv.org/abs/1708.04896
- Parameters
p – 随机擦除操作执行的概率。
比例 – 被擦除区域相对于输入图像的比例范围。
比例 – 删除区域的宽高比范围。
值 – 清除值。默认为0。如果是一个整数,则用于清除所有像素。如果是一个长度为3的元组,则分别用于清除R、G、B通道。 如果是一个字符串'random',则用随机值清除每个像素。
就地 – 布尔值,用于使此转换就地进行。默认设置为False。
- Returns
擦除图像。
示例
>>> transform = transforms.Compose([ >>> transforms.RandomHorizontalFlip(), >>> transforms.ToTensor(), >>> transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), >>> transforms.RandomErasing(), >>> ])
-
class
torchvision.transforms.ConvertImageDtype(dtype: torch.dtype)[source]¶ 将张量图像转换为指定的
dtype并相应地调整值 此函数不支持PIL图像。- Parameters
数据类型 (torch.dpython:type) – 输出所需的數據類型
注意
当从较小的整数转换为较大的整数时,
dtype最大值不会精确映射。 如果来回转换,这种不匹配不会产生影响。- Raises
RuntimeError – 在尝试将
torch.float32转换为torch.int32或torch.int64以及尝试将torch.float64转换为torch.int64时。这些转换可能会导致溢出错误,因为浮点数dtype无法在整个整数dtype范围内存储连续的整数。
使用
ConvertImageDtype的示例:
转换变换¶
-
class
torchvision.transforms.ToPILImage(mode=None)[source]¶ 将张量或 ndarray 转换为 PIL 图像。此转换不支持 TorchScript。
将形状为 C x H x W 的 torch.*Tensor 或形状为 H x W x C 的 numpy ndarray 转换为 PIL 图像,同时保持值范围。
- Parameters
模式 (PIL.Image 模式) – 输入数据的颜色空间和像素深度(可选)。 如果
mode是None(默认),则对输入数据有一些假设: - 如果输入有 4 个通道,则mode假设为RGBA。 - 如果输入有 3 个通道,则mode假设为RGB。 - 如果输入有 2 个通道,则mode假设为LA。 - 如果输入有 1 个通道,则mode由数据类型确定(即int、float、short)。
使用
ToPILImage的示例:
-
class
torchvision.transforms.ToTensor[source]¶ 将一个
PIL Image或numpy.ndarray转换为张量。此转换不支持 TorchScript。将范围在 [0, 255] 的 PIL 图像或 numpy.ndarray (H x W x C) 转换为范围在 [0.0, 1.0] 的形状为 (C x H x W) 的 torch.FloatTensor。 如果 PIL 图像属于以下模式之一 (L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1),或者如果 numpy.ndarray 的数据类型为 np.uint8,则进行转换。
在其他情况下,张量将以未缩放的形式返回。
注意
因为输入图像被缩放到 [0.0, 1.0],此转换不应在变换目标图像掩码时使用。有关实现图像掩码变换的参考,请参见 参考文献。
通用变换¶
AutoAugment变换¶
AutoAugment 是一种常见的数据增强技术,可以提高图像分类模型的准确性。 尽管数据增强策略直接与其训练数据集相关联,但经验研究表明, ImageNet 策略在应用于其他数据集时提供了显著的改进。 在 TorchVision 中,我们实现了以下数据集上学习到的 3 种策略:ImageNet、CIFAR10 和 SVHN。 新的变换可以单独使用或与现有变换混合使用:
-
class
torchvision.transforms.AutoAugmentPolicy[source]¶ 在不同数据集上学习到的AutoAugment策略。 可用的策略有IMAGENET、CIFAR10和SVHN。
使用
AutoAugmentPolicy的示例:
-
class
torchvision.transforms.AutoAugment(policy: torchvision.transforms.autoaugment.AutoAugmentPolicy = <AutoAugmentPolicy.IMAGENET: 'imagenet'>, interpolation: torchvision.transforms.functional.InterpolationMode = <InterpolationMode.NEAREST: 'nearest'>, fill: Optional[List[float]] = None)[source]¶ 基于AutoAugment数据增强方法 “AutoAugment: 从数据中学习增强策略”。 如果图像为torch Tensor,应为类型torch.uint8,并且预期具有 […, 1 或 3, H, W] 形状,其中 … 表示任意数量的前导维度。 如果img是PIL Image,则预期其模式为“L”或“RGB”。
- Parameters
策略 (AutoAugmentPolicy) – 所需策略枚举,由
torchvision.transforms.autoaugment.AutoAugmentPolicy定义。默认值为AutoAugmentPolicy.IMAGENET。插值法 (InterpolationMode) – 需要的插值枚举,由
torchvision.transforms.InterpolationMode定义。 默认为InterpolationMode.NEAREST。 如果输入是张量,则只支持InterpolationMode.NEAREST和InterpolationMode.BILINEAR。填充 (序列或数字,可选) – 转换后图像外部区域的像素填充值。如果给定一个数字,则该值将分别用于所有波段。
使用
AutoAugment的示例:
功能变换¶
功能变换为您提供对转换管道的精细控制。 与上述变换不同,功能变换不包含用于其参数的随机数生成器。 这意味着您必须指定/生成所有参数,但功能变换将在多次调用中给出可重复的结果。
你可以像这样对多张图片应用具有相同参数的功能转换:
import torchvision.transforms.functional as TF
import random
def my_segmentation_transforms(image, segmentation):
if random.random() > 0.5:
angle = random.randint(-30, 30)
image = TF.rotate(image, angle)
segmentation = TF.rotate(segmentation, angle)
# more transforms ...
return image, segmentation
你可以使用函数式转换来构建具有自定义行为的转换类:
import torchvision.transforms.functional as TF
import random
class MyRotationTransform:
"""Rotate by one of the given angles."""
def __init__(self, angles):
self.angles = angles
def __call__(self, x):
angle = random.choice(self.angles)
return TF.rotate(x, angle)
rotation_transform = MyRotationTransform(angles=[-30, -15, 0, 15, 30])
-
class
torchvision.transforms.functional.InterpolationMode[source]¶ 插值模式 可用的插值方法有
nearest,bilinear,bicubic,box,hamming,和lanczos。
-
torchvision.transforms.functional.adjust_brightness(img: torch.Tensor, brightness_factor: float) → torch.Tensor[source]¶ 调整图像的亮度。
- Parameters
图像 (PIL 图像或张量) – 需要调整的图像。 如果图像为 torch 张量,则期望其格式为[…, 1 或 3, H, W], 其中…表示它可以有任意数量的前置维度。
brightness_factor (float) – 如何调整亮度。可以是任何非负数。0 给出一个黑色图像,1 给出原始图像,而 2 将亮度增加一倍。
- Returns
调整亮度后的图像。
- Return type
PIL 图像或张量
-
torchvision.transforms.functional.adjust_contrast(img: torch.Tensor, contrast_factor: float) → torch.Tensor[source]¶ 调整图像的对比度。
- Parameters
图像 (PIL 图像或张量) – 需要调整的图像。 如果图像为 torch 张量,则期望其格式为[…, 3, H, W], 其中…表示它可以有任意数量的前置维度。
对比度因子 (float) – 对比度调整的程度。可以是任何非负数。0 会给出一张纯灰色的图像,1 会给出原始图像,而 2 则将对比度增加一倍。
- Returns
调整对比度后的图像。
- Return type
PIL 图像或张量
-
torchvision.transforms.functional.adjust_gamma(img: torch.Tensor, gamma: float, gain: float = 1) → torch.Tensor[source]¶ 对图像进行伽马校正。
也称为幂律变换。RGB 模式下的强度根据以下公式进行调整:
\[I_{\text{out}} = 255 \times \text{gain} \times \left(\frac{I_{\text{in}}}{255}\right)^{\gamma}\]请参阅 伽玛校正 了解更多信息。
-
torchvision.transforms.functional.adjust_hue(img: torch.Tensor, hue_factor: float) → torch.Tensor[source]¶ 调整图像的色相。
通过将图像转换为HSV格式并循环移动色相通道(H)中的强度来调整图像色调。然后将图像转换回原始图像模式。
hue_factor 是 H 通道的位移量,必须在区间 [-0.5, 0.5] 内。
参见 Hue 以获取更多详细信息。
- Parameters
图像 (PIL 图像或张量) – 需要调整的图像。 如果图像为 torch 张量,它应采用[…, 3, H, W] 格式, 其中…表示它可以有任意数量的前置维度。 如果图像为 PIL 模式“1”,“L”,“I”,“F”和带有透明度(alpha 通道)的模式不受支持。
hue_factor (float) – 色相通道偏移量。应在 [-0.5, 0.5] 范围内。0.5 和 -0.5 分别在 HSV 空间中正向和负向完全反转色相通道。 0 表示不偏移。因此,-0.5 和 0.5 都会生成互补颜色的图像,而 0 则会给出原始图像。
- Returns
色调调整后的图像。
- Return type
PIL 图像或张量
-
torchvision.transforms.functional.adjust_saturation(img: torch.Tensor, saturation_factor: float) → torch.Tensor[source]¶ 调整图像的颜色饱和度。
- Parameters
图像 (PIL 图像或张量) – 需要调整的图像。 如果图像为 torch 张量,则期望其格式为[…, 3, H, W], 其中…表示它可以有任意数量的前置维度。
饱和度因子 (float) – 调整饱和度的程度。0 将给出黑白图像,1 将给出原始图像,而 2 将将饱和度增强 2 倍。
- Returns
饱和度调整后的图像。
- Return type
PIL 图像或张量
-
torchvision.transforms.functional.adjust_sharpness(img: torch.Tensor, sharpness_factor: float) → torch.Tensor[source]¶ 调整图像的锐度。
- Parameters
图像 (PIL 图像或张量) – 需要调整的图像。 如果图像为 torch 张量,则期望其格式为[…, 1 或 3, H, W], 其中…表示它可以有任意数量的前置维度。
sharpness_factor (float) – 调整清晰度的程度。可以是任何非负数。0给出模糊的图像,1给出原始图像,而2将清晰度增加一倍。
- Returns
锐度调整后的图像。
- Return type
PIL 图像或张量
使用
adjust_sharpness的示例:
-
torchvision.transforms.functional.affine(img: torch.Tensor, angle: float, translate: List[int], scale: float, shear: List[float], interpolation: torchvision.transforms.functional.InterpolationMode = <InterpolationMode.NEAREST: 'nearest'>, fill: Optional[List[float]] = None, resample: Optional[int] = None, fillcolor: Optional[List[float]] = None) → torch.Tensor[source]¶ 对图像进行仿射变换,保持图像中心不变。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
- Parameters
图像 (PIL 图像或张量) – 需要转换的图像。
角度 (数字) – 旋转角度以度为单位,在-180到180之间,顺时针方向。
翻译 (整数序列) – 水平和垂直平移(旋转后的平移)
缩放 (float) – 总体缩放
shear (float 或 序列) – 剪切角度值以度为单位,范围在 -180 到 180 之间,顺时针方向。 如果指定了一个序列,第一个值对应于平行于 x 轴的剪切,而 第二个值对应于平行于 y 轴的剪切。
插值法 (InterpolationMode) – 需要的插值枚举,由
torchvision.transforms.InterpolationMode定义。默认为InterpolationMode.NEAREST。 如果输入是张量,仅支持InterpolationMode.NEAREST和InterpolationMode.BILINEAR。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。填充 (序列 或 数字,可选) –
转换后图像外部区域的像素填充值。如果给出一个数字,则该值将分别用于所有波段。
注意
在 torchscript 模式下不支持单个整数/浮点数值,请使用长度为 1 的序列:
[value, ]。resample (int, optional) – 已废弃的参数,自 v0.10.0 起将被移除。 请改用
interpolation参数。
- Returns
变换后的图像。
- Return type
PIL 图像或张量
使用
affine的示例:
-
torchvision.transforms.functional.autocontrast(img: torch.Tensor) → torch.Tensor[source]¶ 通过重新映射图像每个通道的像素来最大化图像对比度,使最低亮度变为黑色,最高亮度变为白色。
- Parameters
图像 (PIL 图像或张量) – 应用自动对比度的图像。 如果图像为 torch 张量,它应采用[…, 1 或 3, H, W] 格式, 其中…表示它可以有任意数量的前置维度。 如果图像为 PIL 图像,它应采用“L”或“RGB”模式。
- Returns
一张经过自动对比度调整的图像。
- Return type
PIL 图像或张量
使用
autocontrast的示例:
-
torchvision.transforms.functional.center_crop(img: torch.Tensor, output_size: List[int]) → torch.Tensor[source]¶ 裁剪给定图像的中心。 如果图像为 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。 如果图像在任一边的大小小于输出大小,则会在图像周围填充 0 然后进行中心裁剪。
- Parameters
图像 (PIL 图像或张量) – 需要裁剪的图像。
output_size (序列 或 整数) – (高度, 宽度) 的裁剪框。如果为整数或包含单个整数的序列, 则用于两个方向。
- Returns
裁剪后的图像。
- Return type
PIL 图像或张量
使用
center_crop的示例:
-
torchvision.transforms.functional.convert_image_dtype(image: torch.Tensor, dtype: torch.dtype = torch.float32) → torch.Tensor[source]¶ 将张量图像转换为指定的
dtype并相应地调整值 此函数不支持PIL图像。- Parameters
图像 (torch.Tensor) – 需要转换的图像
数据类型 (torch.dpython:type) – 输出所需的數據類型
- Returns
转换后的图像
- Return type
张量
注意
当从较小的整数转换为较大的整数时,
dtype最大值不会精确映射。 如果来回转换,这种不匹配不会产生影响。- Raises
RuntimeError – 在尝试将
torch.float32转换为torch.int32或torch.int64以及尝试将torch.float64转换为torch.int64时。这些转换可能会导致溢出错误,因为浮点数dtype无法在整个整数dtype范围内存储连续的整数。
使用
convert_image_dtype的示例:
-
torchvision.transforms.functional.crop(img: torch.Tensor, top: int, left: int, height: int, width: int) → torch.Tensor[source]¶ 在指定位置裁剪给定图像,并输出所需大小。 如果图像为 torch 张量,则期望其形状为 […, H, W],其中 … 表示任意数量的前置维度。 如果图像的任一边小于输出大小,则会在图像周围填充 0 然后进行裁剪。
- Parameters
- Returns
裁剪后的图像。
- Return type
PIL 图像或张量
使用
crop的示例:
-
torchvision.transforms.functional.equalize(img: torch.Tensor) → torch.Tensor[source]¶ 通过对输入应用非线性映射来均衡图像的直方图,从而在输出中创建灰度值的均匀分布。
- Parameters
图像 (PIL 图像或张量) – 应用均衡化的图像。 如果 img 是 torch 张量,它应采用[…, 1 或 3, H, W] 格式, 其中…表示它可以有任意数量的前置维度。 张量数据类型必须为
torch.uint8,且值应在[0, 255]范围内。 如果 img 是 PIL 图像,它应采用模式“P”、“L”或“RGB”。- Returns
一张经过直方图均衡化处理的图像。
- Return type
PIL 图像或张量
使用
equalize的示例:
-
torchvision.transforms.functional.erase(img: torch.Tensor, i: int, j: int, h: int, w: int, v: torch.Tensor, inplace: bool = False) → torch.Tensor[source]¶ 用给定的值擦除输入张量图像。 此变换不支持PIL图像。
-
torchvision.transforms.functional.five_crop(img: torch.Tensor, size: List[int]) → Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor][source]¶ 裁剪给定图像的四个角和中央部分。 如果图像为 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
注意
此转换返回图像元组,可能存在输入和目标数量不匹配的情况,而您的
Dataset返回。- Parameters
图像 (PIL 图像或张量) – 需要裁剪的图像。
大小 (序列 或 整数) – 希望的裁剪输出大小。如果大小是一个整数而不是像 (h, w) 这样的序列,则会制作一个正方形裁剪 (size, size)。如果提供了一个长度为 1 的序列,它将被解释为 (size[0], size[0])。
- Returns
元组 (tl, tr, bl, br, center) 对应左上角、右上角、左下角、右下角和中心裁剪。
- Return type
使用
five_crop的示例:
-
torchvision.transforms.functional.gaussian_blur(img: torch.Tensor, kernel_size: List[int], sigma: Optional[List[float]] = None) → torch.Tensor[source]¶ 对图像执行高斯模糊,给定内核。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
- Parameters
图像 (PIL 图像或张量) – 需要模糊的图像
kernel_size (python整数序列 或 整数) –
高斯核大小。可以是一组整数,例如
(kx, ky),也可以是一个单独的整数用于正方形核。注意
在 torchscript 模式下不支持单个整数形式的 kernel_size,请使用长度为 1 的序列:
[ksize, ]。sigma (python浮点数序列 或 浮点数, 可选) –
高斯核标准差。可以是一个浮点数序列,例如
(sigma_x, sigma_y),也可以是一个单个浮点数以定义X/Y方向上的相同sigma。如果为None,则使用kernel_size进行计算作为sigma = 0.3 * ((kernel_size - 1) * 0.5 - 1) + 0.8。 默认值为None。注意
在 torchscript 模式下不支持单个浮点数 sigma,使用长度为 1 的序列:
[sigma, ]。
- Returns
高斯模糊版本的图像。
- Return type
PIL 图像或张量
使用
gaussian_blur的示例:
-
torchvision.transforms.functional.hflip(img: torch.Tensor) → torch.Tensor[source]¶ 水平翻转给定的图像。
- Parameters
图像 (PIL 图像或张量) – 要翻转的图像。如果图像是张量,它应采用[…, H, W]格式, 其中…表示它可以有任意数量的前置维度。
- Returns
水平翻转的图像。
- Return type
PIL 图像或张量
使用
hflip的示例:
-
torchvision.transforms.functional.invert(img: torch.Tensor) → torch.Tensor[source]¶ 反转 RGB/灰度图像的颜色。
- Parameters
图像 (PIL 图像或张量) – 需要反转颜色的图像。 如果 img 是 torch 张量,它应采用[…, 1 或 3, H, W] 格式, 其中…表示它可以有任意数量的前置维度。 如果 img 是 PIL 图像,它应采用模式“L”或“RGB”。
- Returns
颜色反转图像。
- Return type
PIL 图像或张量
使用
invert的示例:
-
torchvision.transforms.functional.normalize(tensor: torch.Tensor, mean: List[float], std: List[float], inplace: bool = False) → torch.Tensor[source]¶ 用均值和标准差对浮点张量图像进行标准化。 此变换不支持PIL图像。
注意
此转换默认情况下在原地外进行,即它不会更改输入张量。
详见
Normalize以获取更多详细信息。- Parameters
张量 (张量) – 需要归一化的大小为 (C, H, W) 或 (B, C, H, W) 的浮点张量图像。
均值 (序列) – 每个通道的均值序列。
std (序列) – 每个通道的标准差序列。
原地计算 (bool,可选) – 布尔值,用于使此操作就地进行。
- Returns
归一化张量图像。
- Return type
张量
使用
normalize的示例:
-
torchvision.transforms.functional.pad(img: torch.Tensor, padding: List[int], fill: int = 0, padding_mode: str = 'constant') → torch.Tensor[source]¶ 在图像的四边用给定的“填充”值进行填充。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示对于模式 reflect 和 symmetric 最多有 2 个前置维度, 对于模式 edge 最多有 3 个前置维度, 对于模式 constant 可以有任意数量的前置维度。
- Parameters
图像 (PIL 图像或张量) – 需要填充的图像。
填充 (整数 或 序列) –
每边的填充。如果提供一个单个整数,则用于填充所有边。如果提供长度为 2 的序列,则分别为左/右和上/下的填充。如果提供长度为 4 的序列,则分别为左、上、右和下边的填充。
注意
在 torchscript 模式下不支持单个整数的填充,使用长度为 1 的序列:
[padding, ]。填充 (数字 或 字符串 或 元组) – 常数填充模式下的像素填充值。默认值为 0。 如果是一个长度为 3 的元组,它将分别用于填充 R、G、B 通道。 此值仅在 padding_mode 为常数时使用。 对于 torch Tensor,仅支持数字。 对于 PIL Image,仅支持整数或字符串或元组值。
填充模式 (str) –
填充类型。应为:constant、edge、reflect 或 symmetric。 默认为 constant。
用常量值进行填充,该值通过fillvalue指定。
边缘:用图像边缘的最后一个值进行填充。 如果输入的是一个5D的torch张量,则会对最后3个维度进行填充,而不是最后2个。
反射模式:通过图像的反射填充边缘,而不重复边缘的最后一个值。 例如,以反射模式在 [1, 2, 3, 4] 的两侧各填充 2 个元素, 将得到 [3, 2, 1, 2, 3, 4, 3, 2]。
对称模式:通过镜像反射图像进行填充,并在边缘重复最后一个值。 例如,以对称模式在 [1, 2, 3, 4] 的两侧各填充 2 个元素, 将得到 [2, 1, 1, 2, 3, 4, 4, 3]。
- Returns
填充图像。
- Return type
PIL 图像或张量
使用
pad的示例:
-
torchvision.transforms.functional.perspective(img: torch.Tensor, startpoints: List[List[int]], endpoints: List[List[int]], interpolation: torchvision.transforms.functional.InterpolationMode = <InterpolationMode.BILINEAR: 'bilinear'>, fill: Optional[List[float]] = None) → torch.Tensor[source]¶ 对给定图像执行透视变换。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
- Parameters
图像 (PIL 图像或张量) – 需要转换的图像。
起始点 (整数列表的列表) – 包含四个整数列表,每个列表包含两个整数,对应原始图像的四个角。
[top-left, top-right, bottom-right, bottom-left]端点 (整数列表的列表) – 包含四个整数列表,每个列表包含两个整数,对应于转换后图像的四个角。
[top-left, top-right, bottom-right, bottom-left]的转换后图像。插值法 (InterpolationMode) – 需要的插值枚举,由
torchvision.transforms.InterpolationMode定义。默认为InterpolationMode.BILINEAR。 如果输入是张量,仅支持InterpolationMode.NEAREST和InterpolationMode.BILINEAR。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。填充 (序列 或 数字,可选) –
转换后图像外部区域的像素填充值。如果给出一个数字,则该值将分别用于所有波段。
注意
在 torchscript 模式下不支持单个整数/浮点数值,请使用长度为 1 的序列:
[value, ]。
- Returns
变换后的图像。
- Return type
PIL 图像或张量
使用
perspective的示例:
-
torchvision.transforms.functional.pil_to_tensor(pic)[source]¶ 将一个
PIL Image转换为相同类型的张量。 此函数不支持torchscript。参见
PILToTensor以获取更多详细信息。- Parameters
图片 (PIL 图像) – 需要转换为张量的图像。
- Returns
转换后的图像。
- Return type
张量
-
torchvision.transforms.functional.posterize(img: torch.Tensor, bits: int) → torch.Tensor[source]¶ 通过减少每个颜色通道的位数来对图像进行色调化处理。
- Parameters
图像 (PIL 图像或张量) – 需要进行色调化的图像。 如果图像为 torch 张量,它应该是 torch.uint8 类型, 并且期望其格式为[…, 1 或 3, H, W],其中…表示它可以有任意数量的前置维度。 如果图像为 PIL 图像,它应该处于“L”或“RGB”模式。
位数 (int) – 每个通道保留的位数(0-8)。
- Returns
poster 化图像。
- Return type
PIL 图像或张量
使用
posterize的示例:
-
torchvision.transforms.functional.resize(img: torch.Tensor, size: List[int], interpolation: torchvision.transforms.functional.InterpolationMode = <InterpolationMode.BILINEAR: 'bilinear'>, max_size: Optional[int] = None, antialias: Optional[bool] = None) → torch.Tensor[source]¶ 将输入图像调整为给定大小。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
警告
输出图像可能会根据其类型而有所不同:在降采样时,PIL图像和张量的插值会略有不同,因为PIL应用了抗锯齿。这可能导致网络性能出现显著差异。因此,最好使用相同的输入类型来训练和部署模型。
- Parameters
图像 (PIL 图像或张量) – 需要调整大小的图像。
大小 (序列 或 整数) –
期望的输出大小。如果 size 是一个序列,比如 (h, w),输出大小将会匹配这个值。如果 size 是一个整数,图像的较短边将被缩放以匹配这个数字,并保持宽高比。即,如果高度 > 宽度,则图像将被缩放为 \(\left(\text{size} \times \frac{\text{height}}{\text{width}}, \text{size}\right)\)。
注意
在 torchscript 模式下不支持单个整数大小,使用长度为 1 的序列:
[size, ]。插值法 (InterpolationMode) – 需要的由
torchvision.transforms.InterpolationMode定义的插值枚举。 默认为InterpolationMode.BILINEAR。如果输入是张量,仅支持InterpolationMode.NEAREST,InterpolationMode.BILINEAR和InterpolationMode.BICUBIC。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。max_size (int, optional) – 调整后的图像较长边的最大允许值:如果根据
size调整后图像的较长边大于max_size,则再次调整图像大小,使较长边等于max_size。因此,size可能会被覆盖,即较短边可能短于size。这仅在size是一个整数(或在 torchscript 模式下长度为 1 的序列)时支持。抗锯齿 (bool, 可选) –
抗锯齿标志。如果
img是 PIL 图像,该标志将被忽略,并始终使用抗锯齿。如果img是张量,默认情况下该标志为 False,仅在InterpolationMode.BILINEAR模式下可以设置为 True。警告
不支持对选项
antialias=True和输入img作为张量的自动微分。
- Returns
缩放后的图像。
- Return type
PIL 图像或张量
使用
resize的示例:
-
torchvision.transforms.functional.resized_crop(img: torch.Tensor, top: int, left: int, height: int, width: int, size: List[int], interpolation: torchvision.transforms.functional.InterpolationMode = <InterpolationMode.BILINEAR: 'bilinear'>) → torch.Tensor[source]¶ 裁剪给定的图像并将其调整为所需的大小。 如果图像为 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
显著用于
RandomResizedCrop。- Parameters
图像 (PIL 图像或张量) – 需要裁剪的图像。 (0,0) 表示图像的左上角。
顶部 (整数) – 裁剪框左上角的垂直组件。
左 (整数) – 作物框左上角的水平分量。
高度 (int) – 裁剪框的高度。
宽度 (int) – 裁剪框的宽度。
大小 (序列 或 整数) – 期望的输出大小。与
resize具有相同的语义。插值法 (InterpolationMode) – 需要的由
torchvision.transforms.InterpolationMode定义的插值枚举。 默认为InterpolationMode.BILINEAR。如果输入是张量,仅支持InterpolationMode.NEAREST,InterpolationMode.BILINEAR和InterpolationMode.BICUBIC。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。
- Returns
裁剪后的图像。
- Return type
PIL 图像或张量
使用
resized_crop的示例:
-
torchvision.transforms.functional.rgb_to_grayscale(img: torch.Tensor, num_output_channels: int = 1) → torch.Tensor[source]¶ 将 RGB 图像转换为灰度图像版本。 如果图像是 torch 张量,则期望其具有 […, 3, H, W] 形状,其中 … 表示任意数量的前置维度。
注意
请注意,此方法仅支持RGB图像作为输入。对于其他颜色空间的输入, 请考虑使用meth:~torchvision.transforms.functional.to_grayscale与PIL Image。
- Parameters
图像 (PIL 图像或张量) – 要转换为灰度的RGB图像。
输出通道数 (int) – 输出图像的通道数。值可以为1或3。默认值为1。
- Returns
图像的灰度版本。
如果 num_output_channels = 1 :返回的图像为单通道
如果 num_output_channels = 3 :返回的图像为 3 通道,且 r = g = b
- Return type
PIL 图像或张量
-
torchvision.transforms.functional.rotate(img: torch.Tensor, angle: float, interpolation: torchvision.transforms.functional.InterpolationMode = <InterpolationMode.NEAREST: 'nearest'>, expand: bool = False, center: Optional[List[int]] = None, fill: Optional[List[float]] = None, resample: Optional[int] = None) → torch.Tensor[source]¶ 以角度旋转图像。 如果图像是 torch 张量,则期望其具有[…, H, W] 形状,其中…表示任意数量的前置维度。
- Parameters
图像 (PIL 图像或张量) – 需要旋转的图像。
角度 (数字) – 逆时针方向的旋转角度值,单位为度。
插值法 (InterpolationMode) – 需要的插值枚举,由
torchvision.transforms.InterpolationMode定义。默认为InterpolationMode.NEAREST。 如果输入是张量,仅支持InterpolationMode.NEAREST和InterpolationMode.BILINEAR。 为了向后兼容,整数值(例如PIL.Image.NEAREST)仍然可以接受。展开 (bool, 可选) – 可选的扩展标志。 如果为真,将输出图像扩展到足以容纳整个旋转图像的大小。 如果为假或省略,则输出图像与输入图像大小相同。 请注意,扩展标志假设围绕中心旋转且没有平移。
中心 (序列, 可选) – 可选的旋转中心。原点是图像的左上角。 默认情况下是图像的中心。
填充 (序列 或 数字,可选) –
转换后图像外部区域的像素填充值。如果给出一个数字,则该值将分别用于所有波段。
注意
在 torchscript 模式下不支持单个整数/浮点数值,请使用长度为 1 的序列:
[value, ]。
- Returns
旋转图像。
- Return type
PIL 图像或张量
使用
rotate的示例:
-
torchvision.transforms.functional.solarize(img: torch.Tensor, threshold: float) → torch.Tensor[source]¶ 通过反转所有高于阈值的像素值来对 RGB/灰度图像进行 Solarize 处理。
- Parameters
图像 (PIL 图像或张量) – 需要反转颜色的图像。 如果 img 是 torch 张量,它应采用[…, 1 或 3, H, W] 格式, 其中…表示它可以有任意数量的前置维度。 如果 img 是 PIL 图像,它应采用模式“L”或“RGB”。
阈值 (float) – 所有等于或高于此值的像素都将被反转。
- Returns
太阳化图像。
- Return type
PIL 图像或张量
使用
solarize的示例:
-
torchvision.transforms.functional.ten_crop(img: torch.Tensor, size: List[int], vertical_flip: bool = False) → List[torch.Tensor][source]¶ 生成给定图像的十张裁剪图。 将给定图像裁剪为四个角和中央区域,并加上这些裁剪图的水平翻转版本。 如果图像为 torch 张量,则期望其形状为 […, H, W],其中 … 表示任意数量的前置维度。
注意
此转换返回图像元组,可能存在输入和目标数量不匹配的情况,而您的
Dataset返回。- Parameters
- Returns
元组 (tl, tr, bl, br, center, tl_flip, tr_flip, bl_flip, br_flip, center_flip) 对应于左上角、右上角、左下角、右下角和中心裁剪,以及翻转图像后的相同裁剪。
- Return type
-
torchvision.transforms.functional.to_grayscale(img, num_output_channels=1)[source]¶ 将任何模式的PIL图像(如RGB、HSV、LAB等)转换为灰度图像。 此变换不支持torch张量。
- Parameters
图像 (PIL 图像) – 需要转换为灰度的PIL图像。
输出通道数 (int) – 输出图像的通道数。值可以为1或3。默认值为1。
- Returns
图像的灰度版本。
如果 num_output_channels = 1 :返回的图像为单通道
如果 num_output_channels = 3 :返回的图像为 3 通道,且 r = g = b
- Return type
PIL 图像
使用
to_grayscale的示例:
-
torchvision.transforms.functional.to_pil_image(pic, mode=None)[source]¶ 将张量或 ndarray 转换为 PIL 图像。此函数不支持 TorchScript。
详见
ToPILImage以获取更多详细信息。- Parameters
图片 (张量或numpy.ndarray) – 要转换为PIL图像的图像。
模式 (PIL.Image 模式) – 输入数据的颜色空间和像素深度(可选)。
- Returns
图像已转换为PIL图像。
- Return type
PIL 图像
使用
to_pil_image的示例:
-
torchvision.transforms.functional.to_tensor(pic)[source]¶ 将一个
PIL Image或numpy.ndarray转换为张量。 此函数不支持torchscript。详见
ToTensor以获取更多详细信息。- Parameters
图片 (PIL 图像或numpy.ndarray) – 要转换为张量的图像。
- Returns
转换后的图像。
- Return type
张量

