目录

转换和增强图像

Transforms 是 torchvision.transforms 模块中常见的图像变换。它们可以使用 Compose 进行链式连接。 大多数变换类都有一个等效的函数:功能性变换 可以对变换进行精细控制。 这在构建更复杂的变换流水线时非常有用(例如,在分割任务的情况下)。

大多数变换接受 PIL 图像和张量图像,尽管有些变换是 仅限PIL 的,有些是 仅限张量 的。可以使用 转换变换 来在PIL图像之间进行转换。

接受张量图像的转换也可以接受张量图像批次。一个张量图像是具有(C, H, W)形状的张量,其中C是通道数,HW是图像的高度和宽度。张量图像批次是一个具有(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

变换的组合

Compose(数据增强)

组合多个变换操作。

对PIL图像和torch.*Tensor的转换

CenterCrop(大小)

裁剪给定图像的中心部分。

ColorJitter([brightness, contrast, ...])

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

FiveCrop(大小)

将给定图像裁剪为四个角和中央区域。

Grayscale([输出通道数])

将图像转换为灰度图像。

Pad(填充[,填充值,填充模式])

在图像的四边用给定的“pad”值进行填充。

RandomAffine(degrees[, translate, scale, ...])

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

RandomApply(transforms[, p])

以指定的概率随机应用一组变换。

RandomCrop(size[, padding, pad_if_needed, ...])

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

RandomGrayscale([p])

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

RandomHorizontalFlip([p])

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

RandomPerspective([distortion_scale, p, ...])

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

RandomResizedCrop(size[, scale, ratio, ...])

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

RandomRotation(degrees[, interpolation, ...])

以角度旋转图像。

RandomVerticalFlip([p])

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

Resize(大小[,插值,最大尺寸,...])

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

TenCrop(size[, vertical_flip])

将给定图像裁剪为四个角和中央区域,并加上这些裁剪图的水平翻转版本。

GaussianBlur(kernel_size[, sigma])

使用随机选择的高斯模糊对图像进行模糊处理。

RandomInvert([p])

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

RandomPosterize(bits[, p])

以给定的概率随机将图像二值化,通过减少每个颜色通道的位数来生成图像。

RandomSolarize(threshold[, p])

以给定的概率随机对图像进行 solarize 处理,方法是反转所有高于阈值的像素值。

RandomAdjustSharpness(sharpness_factor[, p])

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

RandomAutocontrast([p])

以给定的概率随机增强给定图像的像素对比度。

RandomEqualize([p])

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

仅对PIL图像进行转换

RandomChoice(transforms[, p])

从列表中随机选择一个变换进行应用。

RandomOrder(数据增强)

以随机顺序应用一组转换。

仅对torch.*Tensor进行变换

LinearTransformation(transformation_matrix, ...)

用一个正方形变换矩阵和一个离线计算出的均值向量转换张量图像。

Normalize(均值, 标准差[, 就地])

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

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

随机选择一个矩形区域,并在 torch 张量图像中擦除该区域的像素。

ConvertImageDtype(数据类型)

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

转换变换

ToPILImage([mode])

将张量或 ndarray 转换为 PIL 图像。

ToTensor()

将一个 PIL Imagenumpy.ndarray 转换为张量。

PILToTensor()

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

通用变换

Lambda(lambda)

应用用户定义的 lambda 函数作为转换。

自动数据增强变换

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

AutoAugmentPolicy(值)

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

AutoAugment([policy, interpolation, fill])

基于"AutoAugment: 从数据中学习增强策略"的AutoAugment数据增强方法。

RandAugment([num_ops, magnitude, ...])

RandAugment 数据增强方法基于 "RandAugment: 实用的自动化数据增强与减少搜索空间"

TrivialAugmentWide([num_magnitude_bins, ...])

与数据集无关的数据增强,使用TrivialAugment Wide,如在"TrivialAugment: 无需调优且达到最先进的数据增强"中所述。

AugMix([severity, mixture_width, ...])

AugMix数据增强方法基于"AugMix: 一种简单的数据处理方法以提高鲁棒性和不确定性"

功能变换

功能变换为您提供对转换管道的精细控制。 与上述变换不同,功能变换不包含用于其参数的随机数生成器。 这意味着您必须指定/生成所有参数,但功能变换将在多次调用中给出可重复的结果。

你可以像这样对多张图片应用具有相同参数的功能转换:

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

adjust_brightness(img, brightness_factor)

调整图像的亮度。

adjust_contrast(img, contrast_factor)

调整图像的对比度。

adjust_gamma(img, gamma[, gain])

对图像进行伽马校正。

adjust_hue(img, hue_factor)

调整图像的色相。

adjust_saturation(img, saturation_factor)

调整图像的颜色饱和度。

adjust_sharpness(img, sharpness_factor)

调整图像的锐度。

affine(图像, 角度, 平移, 缩放, 扭曲)

对图像进行仿射变换,保持图像中心不变。

autocontrast(图)

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

center_crop(img, output_size)

裁剪给定图像的中心部分。

convert_image_dtype(image[, dtype])

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

crop(图片, 顶部, 左边, 高度, 宽度)

在指定位置裁剪给定图像并输出所需大小。

equalize(图)

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

erase(图像, i, j, h, w, v[, inplace])

用给定的值擦除输入张量图像。

five_crop(图片, 大小)

将给定图像裁剪为四个角和中央区域。

gaussian_blur(img, kernel_size[, sigma])

对图像执行高斯模糊,给定内核。

get_dimensions(图)

返回图像的尺寸为 [通道数, 高度, 宽度]。

get_image_num_channels(图)

返回图像的通道数。

get_image_size(图)

返回图像的大小为 [宽度,高度]。

hflip(图)

水平翻转给定的图像。

invert(图)

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

normalize(张量,均值,标准差[,就地])

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

pad(图像, 填充, 填充模式)

在图像的四边用给定的“pad”值进行填充。

perspective(图像, 起始点, 结束点[, ...])

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

pil_to_tensor(图片)

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

posterize(图片, 位元)

通过减少每个颜色通道的位数来对图像进行色调化处理。

resize(图像, 大小[, 插值, 最大尺寸, ...])

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

resized_crop(img, top, left, height, width, size)

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

rgb_to_grayscale(img[, num_output_channels])

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

rotate(图像, 角度[, 插值方式, 扩展, ...])

以角度旋转图像。

solarize(图片, 阈值)

通过反转所有高于阈值的像素值来对 RGB/灰度图像进行 Solarize 处理。

ten_crop(img, size[, vertical_flip])

生成该图像的十个裁剪后的图片。

to_grayscale(img[, num_output_channels])

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

to_pil_image(pic[, mode])

将张量或 ndarray 转换为 PIL 图像。

to_tensor(图片)

将一个 PIL Imagenumpy.ndarray 转换为张量。

vflip(图)

垂直翻转给定的图像。

文档

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

查看文档

教程

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

查看教程

资源

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

查看资源