目录

变换和增强图像

转换是模块中提供的常见图像转换。可以使用 . 大多数转换类都有一个等效的函数:functional 转换可以对 转换。 如果您必须构建更复杂的转换管道,这将非常有用 (例如,在分段任务的情况下)。torchvision.transforms

大多数转换同时接受 PIL 图像和张量图像,尽管有些转换仅 PIL 和一些转换仅张Conversion Transforms 可用于 与 PIL 图像相互转换。

接受张量图像的转换也接受批量张量 图像。张量图像是具有形状的张量,其中 是 通道数,分别是图像高度和宽度。一批 Tensor Images 是形状的张量,其中 是一个数字 批次中的图像。(C, H, W)CHW(B, C, H, W)B

张量图像值的预期范围由 张量 dtype 。具有 float dtype 的 Tensor 图像应具有 中的 值。具有整数 dtype 的张量图像应为 在其中 是最大值 可以用该 DTYPE 表示。[0, 1)[0, MAX_DTYPE]MAX_DTYPE

随机转换会将相同的转换应用于所有 图像,但它们将产生不同的转换 跨呼叫。对于跨调用的可重现转换,您可以使用函数转换

以下示例说明了可用转换的用法:

警告

从 v0.8.0 开始,所有的随机变换都使用 torch 默认的随机生成器来采样随机参数。 这是一个向后兼容性的破坏性变化,用户应该按如下方式设置 random 状态:

# Previous versions
# import random
# random.seed(12)

# Now
import torch
torch.manual_seed(17)

请记住,torch 随机生成器和 Python 随机生成器的相同种子不会 产生相同的结果。

可编写脚本的转换

为了编写转换脚本,请使用 而不是 .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)

确保仅使用可编写脚本的转换,即使用 lambda 函数且不需要 lambda 函数或 .torch.TensorPIL.Image

对于要与 一起使用的任何自定义转换,它们应派生自 。torch.jit.scripttorch.nn.Module

转换的组合

(变换)

将多个转换组合在一起。

在 PIL Image 和 torch.*Tensor 上进行转换

(尺寸)

在中心裁剪给定的图像。

([亮度、对比度、...])

随机更改图像的亮度、对比度、饱和度和色相。

(尺寸)

将给定的图像裁剪为四个角,并进行中央裁剪。

([num_output_channels])

将图像转换为灰度。

(填充 [, 填充, padding_mode])

用给定的 “pad” 值在给定的图像的所有侧面填充。

(度[, 平移, 刻度, ...])

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

(转换 [, p])

随机应用具有给定概率的转换列表。

(大小[, 内边距, pad_if_needed, ...])

在随机位置裁剪给定的图像。

([p])

将图像随机转换为灰度,概率为 p(默认为 0.1)。

([p])

以给定的概率随机水平翻转给定的图像。

([distortion_scale, p, ...])

以给定的概率对给定图像执行随机透视变换。

(大小[、比例、比例、...])

裁剪图像的随机部分并将其调整为给定大小。

(度[, 插值, ...])

按角度旋转图像。

([p])

以给定的概率随机垂直翻转给定的图像。

(大小[, 插值, max_size, ...])

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

(大小[, vertical_flip])

将给定的图像裁剪为四个角,并将中心裁剪加上这些角的翻转版本(默认使用水平翻转)。

(kernel_size[, 西格玛])

使用随机选择的高斯模糊来模糊图像。

([p])

以给定的概率随机反转给定图像的颜色。

(位 [, p])

通过减少每个颜色通道的位数,以给定的概率随机色调分离图像。

(阈值 [, p])

通过反转高于阈值的所有像素值,以给定的概率随机曝光图像。

(sharpness_factor[, p])

以给定的概率随机调整图像的清晰度。

([p])

以给定的概率随机自动对比给定图像的像素。

([p])

以给定的概率随机均衡给定图像的直方图。

仅在 PIL 图像上变换

(转换 [, p])

应用从列表中随机选取的单个转换。

(变换)

以随机顺序应用转换列表。

仅在 torch.*Tensor 上进行转换

(transformation_matrix,......

使用方变换矩阵和离线计算的mean_vector变换张量图像。

(平均值, std[, 原位])

使用平均值和标准差对张量图像进行归一化。

([p, scale, ratio, value, inplace])

在 torch Tensor 图像中随机选择一个矩形区域并擦除其像素。

(dtype)

将张量图像转换为给定的图像并相应地缩放值此函数不支持 PIL 图像。dtype

转换转换

([模式])

将 tensor 或 ndarray 转换为 PIL 图像。

ToTensor()

将 or 转换为 tensor。PIL Imagenumpy.ndarray

PILToTensor()

将 a 转换为相同类型的张量。PIL Image

泛型变换

(lambd)

将用户定义的 lambda 应用为转换。

自动增强变换

AutoAugment 是一种常见的数据增强技术,可以提高图像分类模型的准确性。 尽管数据增强策略与他们训练的数据集直接相关,但实证研究表明, ImageNet 策略在应用于其他数据集时提供了显著的改进。 在 TorchVision 中,我们实施了在以下数据集上学习的 3 个策略: ImageNet 、 CIFAR10 和 SVHN 。 新转换可以独立使用,也可以与现有转换混合使用:

(值)

AutoAugment 策略在不同的数据集上学习。

([策略、插值、填充])

基于 “AutoAugment: Learning Augmentation Strategies from Data” 的 AutoAugment 数据增强方法。

([num_ops, 星等, ...])

基于 “RandAugment: Practical automated data augmentation with a reduced search space” 的 RandAugmentment 数据增强方法。

([num_magnitude_bins, ...])

使用 TrivialAugment Wide 进行独立于数据集的数据增强,如 “TrivialAugment: Tuning-free Yet State-of-the-Art Data Augmentation” 中所述。

([严重性, mixture_width, ...])

基于“AugMix:一种提高稳健性和不确定性的简单数据处理方法”的 AugMix 数据增强方法。

函数转换

函数转换可让您对转换管道进行精细控制。 与上述转换相反,函数转换不包含随机数 generator 的参数。 这意味着您必须指定/生成所有参数,但函数式转换将为您提供 跨调用的可重现结果。

例: 您可以将具有相同参数的函数转换应用于多个图像,如下所示:

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

例: 您可以使用 Functional transform 来构建具有自定义行为的 transform 类:

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])

(img, brightness_factor)

调整图像的亮度。

(img, contrast_factor)

调整图像的对比度。

(img, gamma[, 增益])

对图像执行 Gamma 校正。

(img, hue_factor)

调整图像的色相。

(img, saturation_factor)

调整图像的颜色饱和度。

(img, sharpness_factor)

调整图像的清晰度。

(图像、角度、平移、缩放、剪切)

对图像应用仿射变换,保持图像中心不变。

(图片)

通过重新映射每个通道的像素来最大化图像的对比度,使最低的像素变为黑色,最亮的像素变为白色。

(img, output_size)

在中心裁剪给定的图像。

(image[, dtype])

将张量图像转换为给定的图像并相应地缩放值此函数不支持 PIL 图像。dtype

(img、上、左、高、宽)

在指定位置和输出大小裁剪给定图像。

(图片)

通过对输入应用非线性映射来均衡图像的直方图,以便在输出中创建灰度值的均匀分布。

(img, i, j, h, w, v[, 原位])

擦除具有给定值的输入 Tensor Image。

(img, 大小)

将给定的图像裁剪为四个角,并进行中央裁剪。

(img, kernel_size[, sigma])

按给定内核对图像执行高斯模糊处理。

(图片)

将图像的尺寸返回为 [channels, height, width]。

(图片)

返回图像的通道数。

(图片)

将图像的大小返回为 [width, height]。

(图片)

水平翻转给定的图像。

(图片)

反转 RGB/灰度图像的颜色。

(张量、平均值、std[、原位])

使用平均值和标准差对浮点张量图像进行归一化。

(img, padding[, fill, padding_mode])

用给定的 “pad” 值在给定的图像的所有侧面填充。

(img, startpoints, endpoints[, ...])

执行给定图像的透视变换。

(图片)

将 a 转换为相同类型的张量。PIL Image

(img,比特)

通过减少每个颜色通道的位数来色调分离图像。

(img, size[, 插值, max_size, ...])

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

(img、top、left、height、width、size)

裁剪给定的图像并将其调整为所需的大小。

(img[, num_output_channels])

将 RGB 图像转换为图像的灰度版本。

(img, angle[, 插值, 扩展, ...])

按角度旋转图像。

(img, 阈值)

通过反转高于阈值的所有像素值来使 RGB/灰度图像曝光。

(img, 大小[, vertical_flip])

从给定图像生成 10 张裁剪图像。

(img[, num_output_channels])

将任何模式(RGB、HSV、LAB 等)的 PIL 图像转换为图像的灰度版本。

(pic[, 模式])

将 tensor 或 ndarray 转换为 PIL 图像。

(图片)

将 or 转换为 tensor。PIL Imagenumpy.ndarray

(图片)

垂直翻转给定的图像。

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源