transforms 的示例¶
此示例说明了 torchvision.transforms.v2 模块 中提供的一些各种 transforms。
from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import torch
from torchvision.transforms import v2
plt.rcParams["savefig.bbox"] = 'tight'
# if you change the seed, make sure that the randomly-applied transforms
# properly show that the image can be both transformed and *not* transformed!
torch.manual_seed(0)
# If you're trying to run that on Colab, you can download the assets and the
# helpers from https://github.com/pytorch/vision/tree/main/gallery/
from helpers import plot
orig_img = Image.open(Path('../assets') / 'astronaut.jpg')
几何变换¶
几何图像变换是指改变图像的几何属性的过程,例如其形状、大小、方向或位置。它涉及对图像像素或坐标应用数学运算以实现所需的变换。
Pad¶
变换(另请参阅 Pad
pad()
)用某些像素值填充所有图像边框。
padded_imgs = [v2.Pad(padding=padding)(orig_img) for padding in (3, 10, 30, 50)]
plot([orig_img] + padded_imgs)

调整大小¶
变换(另请参阅 Resize
resize()
)调整图像大小。
resized_imgs = [v2.Resize(size=size)(orig_img) for size in (30, 50, 100, orig_img.size)]
plot([orig_img] + resized_imgs)

CenterCrop¶
变换(另请参阅 CenterCrop
center_crop()
)在图像中心裁剪给定图像。
center_crops = [v2.CenterCrop(size=size)(orig_img) for size in (30, 50, 100, orig_img.size)]
plot([orig_img] + center_crops)

FiveCrop¶
变换(另请参阅 FiveCrop
five_crop()
)将给定图像裁剪成四个角和中心裁剪。
(top_left, top_right, bottom_left, bottom_right, center) = v2.FiveCrop(size=(100, 100))(orig_img)
plot([orig_img] + [top_left, top_right, bottom_left, bottom_right, center])

RandomPerspective¶
变换(另请参阅 RandomPerspective
perspective()
)对图像执行随机透视变换。
perspective_transformer = v2.RandomPerspective(distortion_scale=0.6, p=1.0)
perspective_imgs = [perspective_transformer(orig_img) for _ in range(4)]
plot([orig_img] + perspective_imgs)

RandomRotation¶
变换(另请参阅 RandomRotation
rotate()
)以随机角度旋转图像。
rotater = v2.RandomRotation(degrees=(0, 180))
rotated_imgs = [rotater(orig_img) for _ in range(4)]
plot([orig_img] + rotated_imgs)

RandomAffine¶
变换(另请参阅 RandomAffine
affine()
)对图像执行随机仿射变换。
affine_transfomer = v2.RandomAffine(degrees=(30, 70), translate=(0.1, 0.3), scale=(0.5, 0.75))
affine_imgs = [affine_transfomer(orig_img) for _ in range(4)]
plot([orig_img] + affine_imgs)

ElasticTransform¶
变换(另请参阅 ElasticTransform
elastic_transform()
)随机变换图像中对象的形态,产生类似水下观察的效果。
elastic_transformer = v2.ElasticTransform(alpha=250.0)
transformed_imgs = [elastic_transformer(orig_img) for _ in range(2)]
plot([orig_img] + transformed_imgs)

RandomCrop¶
变换(另请参阅 RandomCrop
crop()
)在随机位置裁剪图像。
cropper = v2.RandomCrop(size=(128, 128))
crops = [cropper(orig_img) for _ in range(4)]
plot([orig_img] + crops)

RandomResizedCrop¶
变换(另请参阅 RandomResizedCrop
resized_crop()
)在随机位置裁剪图像,然后将裁剪后的图像调整到指定大小。
resize_cropper = v2.RandomResizedCrop(size=(32, 32))
resized_crops = [resize_cropper(orig_img) for _ in range(4)]
plot([orig_img] + resized_crops)

光度变换¶
光度图像变换是指修改图像的光度属性的过程,例如其亮度、对比度、颜色或色调。应用这些变换是为了在保留图像几何结构的同时改变图像的视觉外观。
除了 Grayscale
,以下变换是随机的,这意味着同一个变换实例每次转换给定图像时都会产生不同的结果。
Grayscale¶
变换(另请参阅 Grayscale
to_grayscale()
)将图像转换为灰度。
gray_img = v2.Grayscale()(orig_img)
plot([orig_img, gray_img], cmap='gray')

ColorJitter¶
变换随机改变图像的亮度、对比度、饱和度、色相和其他属性。ColorJitter
jitter = v2.ColorJitter(brightness=.5, hue=.3)
jittered_imgs = [jitter(orig_img) for _ in range(4)]
plot([orig_img] + jittered_imgs)

GaussianBlur¶
变换(另请参阅 GaussianBlur
gaussian_blur()
)对图像执行高斯模糊变换。
blurrer = v2.GaussianBlur(kernel_size=(5, 9), sigma=(0.1, 5.))
blurred_imgs = [blurrer(orig_img) for _ in range(4)]
plot([orig_img] + blurred_imgs)

RandomInvert¶
变换(另请参阅 RandomInvert
invert()
)随机反转给定图像的颜色。
inverter = v2.RandomInvert()
invertered_imgs = [inverter(orig_img) for _ in range(4)]
plot([orig_img] + invertered_imgs)

RandomPosterize¶
变换(另请参阅 RandomPosterize
posterize()
)通过减少每个颜色通道的位数来随机将图像量化。
posterizer = v2.RandomPosterize(bits=2)
posterized_imgs = [posterizer(orig_img) for _ in range(4)]
plot([orig_img] + posterized_imgs)

RandomSolarize¶
变换(另请参阅 RandomSolarize
solarize()
)通过反转高于阈值的像素值来随机对图像进行太阳化处理。
solarizer = v2.RandomSolarize(threshold=192.0)
solarized_imgs = [solarizer(orig_img) for _ in range(4)]
plot([orig_img] + solarized_imgs)

RandomAdjustSharpness¶
变换(另请参阅 RandomAdjustSharpness
adjust_sharpness()
)随机调整给定图像的锐度。
sharpness_adjuster = v2.RandomAdjustSharpness(sharpness_factor=2)
sharpened_imgs = [sharpness_adjuster(orig_img) for _ in range(4)]
plot([orig_img] + sharpened_imgs)

RandomAutocontrast¶
变换(另请参阅 RandomAutocontrast
autocontrast()
)随机对给定图像应用自动对比度。
autocontraster = v2.RandomAutocontrast()
autocontrasted_imgs = [autocontraster(orig_img) for _ in range(4)]
plot([orig_img] + autocontrasted_imgs)

RandomEqualize¶
变换(另请参阅 RandomEqualize
equalize()
)随机均衡给定图像的直方图。
equalizer = v2.RandomEqualize()
equalized_imgs = [equalizer(orig_img) for _ in range(4)]
plot([orig_img] + equalized_imgs)

JPEG¶
变换(另请参阅 JPEG
jpeg()
)以随机压缩程度对给定图像应用 JPEG 压缩。

增强变换¶
以下变换是多个变换的组合,可以是几何变换、光度变换,或者两者兼有。
AutoAugment¶
变换根据给定的自动增强策略自动增强数据。有关可用策略,请参阅 AutoAugment
AutoAugmentPolicy
。
policies = [v2.AutoAugmentPolicy.CIFAR10, v2.AutoAugmentPolicy.IMAGENET, v2.AutoAugmentPolicy.SVHN]
augmenters = [v2.AutoAugment(policy) for policy in policies]
imgs = [
[augmenter(orig_img) for _ in range(4)]
for augmenter in augmenters
]
row_title = [str(policy).split('.')[-1] for policy in policies]
plot([[orig_img] + row for row in imgs], row_title=row_title)

RandAugment¶
是 AutoAugment 的一个替代版本。RandAugment
augmenter = v2.RandAugment()
imgs = [augmenter(orig_img) for _ in range(4)]
plot([orig_img] + imgs)

TrivialAugmentWide¶
是 AutoAugment 的一个替代实现。但是,它不是多次变换图像,而是使用给定列表中的随机变换和随机强度数字,仅对图像进行一次变换。TrivialAugmentWide
augmenter = v2.TrivialAugmentWide()
imgs = [augmenter(orig_img) for _ in range(4)]
plot([orig_img] + imgs)

AugMix¶
变换在增强的图像版本之间进行插值。AugMix

随机应用变换¶
以下变换是给定概率 p
时随机应用的。也就是说,给定 p = 0.5
,即使使用相同的变换实例调用,也有 50% 的机会返回原始图像,50% 的机会返回变换后的图像!
RandomHorizontalFlip¶
变换(另请参阅 RandomHorizontalFlip
hflip()
)以给定概率执行图像的水平翻转。
hflipper = v2.RandomHorizontalFlip(p=0.5)
transformed_imgs = [hflipper(orig_img) for _ in range(4)]
plot([orig_img] + transformed_imgs)

RandomVerticalFlip¶
变换(另请参阅 RandomVerticalFlip
vflip()
)以给定概率执行图像的垂直翻转。
vflipper = v2.RandomVerticalFlip(p=0.5)
transformed_imgs = [vflipper(orig_img) for _ in range(4)]
plot([orig_img] + transformed_imgs)

RandomApply¶
变换以给定概率随机应用一组变换。RandomApply
applier = v2.RandomApply(transforms=[v2.RandomCrop(size=(64, 64))], p=0.5)
transformed_imgs = [applier(orig_img) for _ in range(4)]
plot([orig_img] + transformed_imgs)

脚本总运行时间: (0 分钟 6.870 秒)