转换和增强图像¶
注意
在 0.15 版本中,我们发布了一组新的变换,这些变换可以在 torchvision.transforms.v2 命名空间中使用,它们不仅支持图像变换,还支持边界框、掩码或视频的变换。这些变换与当前的变换完全向后兼容,并且您将在下面看到它们带有 v2. 前缀的文档。要开始使用这些新变换,您可以查看 Transforms v2: 端到端目标检测示例。请注意,这些变换仍处于 BETA 阶段,尽管我们预计未来不会出现重大破坏性更改,但根据用户反馈,某些 API 可能仍会更改。请在此处提交您的任何反馈 here,并且您还可以查看 this issue 以了解更多关于我们认为可能涉及未来更改的 API 的信息。
Transforms 是 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。
几何学¶
|
将输入图像调整为给定大小。 |
|
[测试版] 将输入调整为给定的大小。 |
|
[BETA] 根据 "简单的复制粘贴是实例分割的强大数据增强方法" 对输入进行大规模抖动。 |
|
[测试版] 随机调整输入大小。 |
|
[测试版] 随机调整输入大小。 |
|
在给定图像的随机位置裁剪图像。 |
|
[测试版] 在随机位置裁剪输入。 |
|
裁剪图像的随机部分并将其调整到指定大小。 |
|
[测试版] 随机裁剪输入的一部分并调整其大小为指定尺寸。 |
|
[BETA] 随机IoU裁剪变换来自"SSD: Single Shot MultiBox Detector"。 |
|
裁剪给定图像的中心部分。 |
|
[测试版] 从输入的中心裁剪。 |
|
将给定图像裁剪为四个角和中央区域。 |
|
[测试版] 将图像或视频裁剪为四个角和中央区域。 |
|
将给定图像裁剪为四个角和中央区域,并加上这些裁剪图的水平翻转版本。 |
|
[测试版] 将图像或视频裁剪为四个角落以及中央区域,并加上这些区域的水平翻转版本。 |
|
在图像的四边用给定的“pad”值进行填充。 |
|
[BETA] 在输入的四边用给定的“pad”值进行填充。 |
|
[BETA] "缩小"变换来自"SSD: 单发多框检测器". |
|
以角度旋转图像。 |
|
[测试版] 将输入按指定角度旋转。 |
|
保持图像中心不变的随机仿射变换。 |
|
[测试版] 对输入进行随机仿射变换,保持中心不变。 |
|
以给定的概率对指定图像执行随机透视变换。 |
|
[测试版] 以给定的概率对输入执行随机透视变换。 |
|
用弹性变换转换张量图像。 |
|
[测试版] 使用弹性变换对输入进行转换。 |
|
随机以给定的概率水平翻转给定图像。 |
[测试版] 水平翻转输入,给定一定的概率。 |
|
|
以给定的概率随机垂直翻转给定图像。 |
[测试版] 按给定的概率垂直翻转输入。 |
颜色¶
|
随机改变图像的亮度、对比度、饱和度和色相。 |
|
[测试版] 随机改变图像或视频的亮度、对比度、饱和度和色相。 |
|
[BETA] 随机扭曲图像或视频,如在SSD: 单发多框检测器中使用。 |
|
将图像转换为灰度图像。 |
|
[测试版] 将图像或视频转换为灰度。 |
|
以概率 p(默认值为 0.1)随机将图像转换为灰度。 |
|
[测试版] 以概率 p (默认为 0.1)随机将图像或视频转换为灰度。 |
|
使用随机选择的高斯模糊对图像进行模糊处理。 |
|
[测试版] 使用随机选择的高斯模糊对图像进行模糊处理。 |
|
以指定的概率随机反转给定图像的颜色。 |
|
[测试版] 按给定的概率反转给定图像或视频的颜色。 |
|
以给定的概率随机将图像二值化,通过减少每个颜色通道的位数来生成图像。 |
|
[测试版] 按给定的概率通过减少每个颜色通道的位数来对图像或视频进行量化处理。 |
|
以给定的概率随机对图像进行 solarize 处理,方法是反转所有高于阈值的像素值。 |
|
[测试版] 按给定的概率对图像或视频进行 Solarize 处理,通过反转所有高于阈值的像素值。 |
|
以给定的概率随机调整图像的锐度。 |
|
[测试版] 按给定的概率调整图像或视频的锐度。 |
|
以给定的概率随机增强给定图像的像素对比度。 |
[测试版] 以给定的概率自动调整给定图像或视频的像素对比度。 |
|
|
以给定的概率随机均衡给定图像的直方图。 |
|
[测试版] 以给定的概率对指定图像或视频的直方图进行均衡化。 |
组成¶
|
组合多个变换操作。 |
|
[测试版] 将多个转换组合在一起。 |
|
以指定的概率随机应用一组变换。 |
|
[测试版] 以给定的概率随机应用一组变换。 |
|
从列表中随机选择一个变换进行应用。 |
|
[测试版] 随机应用从列表中选择的一种变换。 |
|
以随机顺序应用一组转换。 |
|
[测试版] 随机顺序应用一组转换。 |
杂项¶
|
用一个正方形变换矩阵和一个离线计算出的均值向量转换张量图像。 |
[BETA] 使用一个正方形变换矩阵和一个离线计算得到的均值向量转换张量图像或视频。 |
|
|
用均值和标准差对张量图像进行标准化。 |
|
[测试版] 使用均值和标准差对张量图像或视频进行归一化。 |
|
随机选择一个矩形区域,并擦除 torch.Tensor 图像中的像素。 |
|
[测试版] 随机选择输入图像或视频中的一个矩形区域并擦除其像素。 |
|
应用用户定义的 lambda 函数作为转换。 |
|
[测试版] 应用用户定义的函数作为转换。 |
|
[测试版] 删除退化/无效的边界框及其对应的标签和掩码。 |
[测试版] 将边界框限制在其对应图像的尺寸范围内。 |
|
|
[BETA] 从视频的时间维度中均匀抽取 |
转换¶
注意
注意,下面的一些转换变换在执行转换时会缩放值,而有些则不会进行缩放。通过缩放,我们指的是例如一个 uint8 -> float32 会将 [0, 255] 范围映射到 [0, 1](反之亦然)。
|
将张量或 ndarray 转换为 PIL 图像——这不会缩放值。 |
|
|
|
[测试版] 将张量或 ndarray 转换为 PIL 图像 - 这不会缩放值。 |
|
将 PIL 图像或 ndarray 转换为张量,并相应地调整值。 |
【测试版】将PIL图像或ndarray转换为张量,并相应地调整值。 |
|
将 PIL 图像转换为相同类型的张量——这不会缩放值。 |
|
[测试版] 将一个PIL图像转换为相同类型的张量——这不会缩放值。 |
|
[BETA] 将张量、ndarray 或 PIL 图像转换为 |
|
|
将张量图像转换为指定的 |
|
[BETA] 将输入图像或视频转换为指定的 |
|
|
|
[测试版] 将输入转换为特定的数据类型 —— 这不会缩放值。 |
[BETA] 将边界框坐标转换为给定的 |
Auto-Augmentation¶
AutoAugment 是一种常见的数据增强技术,可以提高图像分类模型的准确性。 尽管数据增强策略直接与其训练数据集相关联,但经验研究表明, ImageNet 策略在应用于其他数据集时提供了显著的改进。 在 TorchVision 中,我们实现了以下数据集上学习到的 3 种策略:ImageNet、CIFAR10 和 SVHN。 新的变换可以单独使用或与现有变换混合使用:
在不同数据集上学习到的AutoAugment策略。 |
|
|
基于"AutoAugment: 从数据中学习增强策略"的AutoAugment数据增强方法。 |
|
[BETA] 基于"AutoAugment: Learning Augmentation Strategies from Data"的AutoAugment数据增强方法。 |
|
RandAugment 数据增强方法基于 "RandAugment: 实用的自动化数据增强与减少搜索空间"。 |
|
[BETA] RandAugment 数据增强方法基于 "RandAugment: 实用的自动化数据增强与减少搜索空间". |
|
与数据集无关的数据增强,使用TrivialAugment Wide,如在"TrivialAugment: 无需调优且达到最先进的数据增强"中所述。 |
|
[BETA] 与数据集无关的数据增强,使用 TrivialAugment Wide,如在 "TrivialAugment: 无需调优且达到最先进的数据增强" 中所述。 |
|
AugMix数据增强方法基于"AugMix: 一种简单的数据处理方法以提高鲁棒性和不确定性"。 |
|
[BETA] 基于 "AugMix: 一种简单的数据处理方法以提高鲁棒性和不确定性" 的 AugMix 数据增强方法。 |
功能变换¶
注意
您将在下方找到现有的
torchvision.transforms.functional 命名空间的文档。同样地,
torchvision.transforms.v2.functional 命名空间也存在并且可以使用!相同的函数功能都在,因此您只需更改导入以依赖于
v2 命名空间。
功能变换为您提供对转换管道的精细控制。 与上述变换不同,功能变换不包含用于其参数的随机数生成器。 这意味着您必须指定/生成所有参数,但功能变换将在多次调用中给出可重复的结果。
你可以像这样对多张图片应用具有相同参数的功能转换:
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])
|
调整图像的亮度。 |
|
调整图像的对比度。 |
|
对图像进行伽马校正。 |
|
调整图像的色相。 |
|
调整图像的颜色饱和度。 |
|
调整图像的锐度。 |
|
对图像进行仿射变换,保持图像中心不变。 |
|
通过重新映射每个通道的像素来最大化图像的对比度,使最暗的部分变为黑色,最亮的部分变为白色。 |
|
裁剪给定图像的中心部分。 |
|
将张量图像转换为给定的 |
|
在指定位置裁剪给定图像并输出所需大小。 |
|
通过对输入应用非线性映射来均衡图像的直方图,以在输出中创建灰度值的均匀分布。 |
|
用给定的值擦除输入张量图像。 |
|
将给定图像裁剪为四个角和中央区域。 |
|
对图像执行高斯模糊,给定内核。 |
返回图像的尺寸为 [通道数, 高度, 宽度]。 |
|
返回图像的通道数。 |
|
返回图像的大小为 [宽度,高度]。 |
|
|
水平翻转给定的图像。 |
|
反转 RGB/灰度图像的颜色。 |
|
用均值和标准差对浮点张量图像进行标准化。 |
|
在图像的四边用给定的“pad”值进行填充。 |
|
对给定图像执行透视变换。 |
|
将一个 |
|
通过减少每个颜色通道的位数来对图像进行色调化处理。 |
|
将输入图像调整为给定大小。 |
|
裁剪给定的图像并将其调整为所需的尺寸。 |
|
将 RGB 图像转换为其灰度版本。 |
|
以角度旋转图像。 |
|
通过反转所有高于阈值的像素值来对 RGB/灰度图像进行 Solarize 处理。 |
|
生成该图像的十个裁剪后的图片。 |
|
将任何模式(RGB、HSV、LAB 等)的 PIL 图像转换为其灰度版本图像。 |
|
将张量或 ndarray 转换为 PIL 图像。 |
|
将一个 |
|
垂直翻转给定的图像。 |

