变换和增强图像¶
转换是模块中提供的常见图像转换。可以使用 .
大多数转换类都有一个等效的函数:functional
转换可以对
转换。
如果您必须构建更复杂的转换管道,这将非常有用
(例如,在分段任务的情况下)。
torchvision.transforms
大多数转换同时接受 PIL 图像和张量图像,尽管有些转换仅 PIL 和一些转换仅张量。Conversion Transforms 可用于 与 PIL 图像相互转换。
接受张量图像的转换也接受批量张量
图像。张量图像是具有形状的张量,其中 是
通道数,分别是图像高度和宽度。一批
Tensor Images 是形状的张量,其中 是一个数字
批次中的图像。(C, H, W)
C
H
W
(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.Tensor
PIL.Image
对于要与 一起使用的任何自定义转换,它们应派生自 。torch.jit.script
torch.nn.Module
转换的组合¶
将多个转换组合在一起。 |
在 PIL Image 和 torch.*Tensor 上进行转换¶
在中心裁剪给定的图像。 |
|
随机更改图像的亮度、对比度、饱和度和色相。 |
|
将给定的图像裁剪为四个角,并进行中央裁剪。 |
|
将图像转换为灰度。 |
|
用给定的 “pad” 值在给定的图像的所有侧面填充。 |
|
图像的随机仿射变换保持中心不变。 |
|
随机应用具有给定概率的转换列表。 |
|
在随机位置裁剪给定的图像。 |
|
将图像随机转换为灰度,概率为 p(默认为 0.1)。 |
|
以给定的概率随机水平翻转给定的图像。 |
|
以给定的概率对给定图像执行随机透视变换。 |
|
裁剪图像的随机部分并将其调整为给定大小。 |
|
按角度旋转图像。 |
|
以给定的概率随机垂直翻转给定的图像。 |
|
将输入图像的大小调整为给定的大小。 |
|
将给定的图像裁剪为四个角,并将中心裁剪加上这些角的翻转版本(默认使用水平翻转)。 |
|
使用随机选择的高斯模糊来模糊图像。 |
|
以给定的概率随机反转给定图像的颜色。 |
|
通过减少每个颜色通道的位数,以给定的概率随机色调分离图像。 |
|
通过反转高于阈值的所有像素值,以给定的概率随机曝光图像。 |
|
以给定的概率随机调整图像的清晰度。 |
|
以给定的概率随机自动对比给定图像的像素。 |
|
以给定的概率随机均衡给定图像的直方图。 |
仅在 PIL 图像上变换¶
应用从列表中随机选取的单个转换。 |
|
以随机顺序应用转换列表。 |
仅在 torch.*Tensor 上进行转换¶
使用方变换矩阵和离线计算的mean_vector变换张量图像。 |
|
使用平均值和标准差对张量图像进行归一化。 |
|
在 torch Tensor 图像中随机选择一个矩形区域并擦除其像素。 |
|
将张量图像转换为给定的图像并相应地缩放值此函数不支持 PIL 图像。 |
转换转换¶
将 tensor 或 ndarray 转换为 PIL 图像。 |
|
|
将 or 转换为 tensor。 |
将 a 转换为相同类型的张量。 |
泛型变换¶
将用户定义的 lambda 应用为转换。 |
自动增强变换¶
AutoAugment 是一种常见的数据增强技术,可以提高图像分类模型的准确性。 尽管数据增强策略与他们训练的数据集直接相关,但实证研究表明, ImageNet 策略在应用于其他数据集时提供了显著的改进。 在 TorchVision 中,我们实施了在以下数据集上学习的 3 个策略: ImageNet 、 CIFAR10 和 SVHN 。 新转换可以独立使用,也可以与现有转换混合使用:
AutoAugment 策略在不同的数据集上学习。 |
|
基于 “AutoAugment: Learning Augmentation Strategies from Data” 的 AutoAugment 数据增强方法。 |
|
基于 “RandAugment: Practical automated data augmentation with a reduced search space” 的 RandAugmentment 数据增强方法。 |
|
使用 TrivialAugment Wide 进行独立于数据集的数据增强,如 “TrivialAugment: Tuning-free Yet State-of-the-Art Data Augmentation” 中所述。 |
|
基于“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])
调整图像的亮度。 |
|
调整图像的对比度。 |
|
对图像执行 Gamma 校正。 |
|
调整图像的色相。 |
|
调整图像的颜色饱和度。 |
|
调整图像的清晰度。 |
|
对图像应用仿射变换,保持图像中心不变。 |
|
通过重新映射每个通道的像素来最大化图像的对比度,使最低的像素变为黑色,最亮的像素变为白色。 |
|
在中心裁剪给定的图像。 |
|
将张量图像转换为给定的图像并相应地缩放值此函数不支持 PIL 图像。 |
|
在指定位置和输出大小裁剪给定图像。 |
|
通过对输入应用非线性映射来均衡图像的直方图,以便在输出中创建灰度值的均匀分布。 |
|
擦除具有给定值的输入 Tensor Image。 |
|
将给定的图像裁剪为四个角,并进行中央裁剪。 |
|
按给定内核对图像执行高斯模糊处理。 |
|
将图像的尺寸返回为 [channels, height, width]。 |
|
返回图像的通道数。 |
|
将图像的大小返回为 [width, height]。 |
|
水平翻转给定的图像。 |
|
反转 RGB/灰度图像的颜色。 |
|
使用平均值和标准差对浮点张量图像进行归一化。 |
|
用给定的 “pad” 值在给定的图像的所有侧面填充。 |
|
执行给定图像的透视变换。 |
|
将 a 转换为相同类型的张量。 |
|
通过减少每个颜色通道的位数来色调分离图像。 |
|
将输入图像的大小调整为给定的大小。 |
|
裁剪给定的图像并将其调整为所需的大小。 |
|
将 RGB 图像转换为图像的灰度版本。 |
|
按角度旋转图像。 |
|
通过反转高于阈值的所有像素值来使 RGB/灰度图像曝光。 |
|
从给定图像生成 10 张裁剪图像。 |
|
将任何模式(RGB、HSV、LAB 等)的 PIL 图像转换为图像的灰度版本。 |
|
将 tensor 或 ndarray 转换为 PIL 图像。 |
|
将 or 转换为 tensor。 |
|
垂直翻转给定的图像。 |