.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/transforms/plot_transforms_illustrations.py" .. LINE NUMBERS ARE GIVEN BELOW. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_transforms_plot_transforms_illustrations.py: ========================== Illustration of transforms ========================== .. note:: Try on `collab `_ or :ref:`go to the end ` to download the full example code. This example illustrates some of the various transforms available in :ref:`the torchvision.transforms.v2 module `. .. GENERATED FROM PYTHON SOURCE LINES 14-34 .. code-block:: Python 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 collab, 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') .. GENERATED FROM PYTHON SOURCE LINES 36-47 Geometric Transforms -------------------- Geometric image transformation refers to the process of altering the geometric properties of an image, such as its shape, size, orientation, or position. It involves applying mathematical operations to the image pixels or coordinates to achieve the desired transformation. Pad ~~~ The :class:`~torchvision.transforms.Pad` transform (see also :func:`~torchvision.transforms.functional.pad`) pads all image borders with some pixel values. .. GENERATED FROM PYTHON SOURCE LINES 47-50 .. code-block:: Python padded_imgs = [v2.Pad(padding=padding)(orig_img) for padding in (3, 10, 30, 50)] plot([orig_img] + padded_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_001.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 51-56 Resize ~~~~~~ The :class:`~torchvision.transforms.Resize` transform (see also :func:`~torchvision.transforms.functional.resize`) resizes an image. .. GENERATED FROM PYTHON SOURCE LINES 56-59 .. code-block:: Python resized_imgs = [v2.Resize(size=size)(orig_img) for size in (30, 50, 100, orig_img.size)] plot([orig_img] + resized_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_002.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 60-65 CenterCrop ~~~~~~~~~~ The :class:`~torchvision.transforms.CenterCrop` transform (see also :func:`~torchvision.transforms.functional.center_crop`) crops the given image at the center. .. GENERATED FROM PYTHON SOURCE LINES 65-68 .. code-block:: Python center_crops = [v2.CenterCrop(size=size)(orig_img) for size in (30, 50, 100, orig_img.size)] plot([orig_img] + center_crops) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_003.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_003.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 69-74 FiveCrop ~~~~~~~~ The :class:`~torchvision.transforms.FiveCrop` transform (see also :func:`~torchvision.transforms.functional.five_crop`) crops the given image into four corners and the central crop. .. GENERATED FROM PYTHON SOURCE LINES 74-77 .. code-block:: Python (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]) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_004.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_004.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 78-83 RandomPerspective ~~~~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomPerspective` transform (see also :func:`~torchvision.transforms.functional.perspective`) performs random perspective transform on an image. .. GENERATED FROM PYTHON SOURCE LINES 83-87 .. code-block:: Python 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) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_005.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_005.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 88-93 RandomRotation ~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomRotation` transform (see also :func:`~torchvision.transforms.functional.rotate`) rotates an image with random angle. .. GENERATED FROM PYTHON SOURCE LINES 93-97 .. code-block:: Python rotater = v2.RandomRotation(degrees=(0, 180)) rotated_imgs = [rotater(orig_img) for _ in range(4)] plot([orig_img] + rotated_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_006.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_006.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 98-103 RandomAffine ~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomAffine` transform (see also :func:`~torchvision.transforms.functional.affine`) performs random affine transform on an image. .. GENERATED FROM PYTHON SOURCE LINES 103-107 .. code-block:: Python 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) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_007.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_007.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 108-114 ElasticTransform ~~~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.ElasticTransform` transform (see also :func:`~torchvision.transforms.functional.elastic_transform`) Randomly transforms the morphology of objects in images and produces a see-through-water-like effect. .. GENERATED FROM PYTHON SOURCE LINES 114-118 .. code-block:: Python elastic_transformer = v2.ElasticTransform(alpha=250.0) transformed_imgs = [elastic_transformer(orig_img) for _ in range(2)] plot([orig_img] + transformed_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_008.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_008.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 119-124 RandomCrop ~~~~~~~~~~ The :class:`~torchvision.transforms.RandomCrop` transform (see also :func:`~torchvision.transforms.functional.crop`) crops an image at a random location. .. GENERATED FROM PYTHON SOURCE LINES 124-128 .. code-block:: Python cropper = v2.RandomCrop(size=(128, 128)) crops = [cropper(orig_img) for _ in range(4)] plot([orig_img] + crops) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_009.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_009.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 129-135 RandomResizedCrop ~~~~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomResizedCrop` transform (see also :func:`~torchvision.transforms.functional.resized_crop`) crops an image at a random location, and then resizes the crop to a given size. .. GENERATED FROM PYTHON SOURCE LINES 135-139 .. code-block:: Python resize_cropper = v2.RandomResizedCrop(size=(32, 32)) resized_crops = [resize_cropper(orig_img) for _ in range(4)] plot([orig_img] + resized_crops) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_010.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_010.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 140-156 Photometric Transforms ---------------------- Photometric image transformation refers to the process of modifying the photometric properties of an image, such as its brightness, contrast, color, or tone. These transformations are applied to change the visual appearance of an image while preserving its geometric structure. Except :class:`~torchvision.transforms.Grayscale`, the following transforms are random, which means that the same transform instance will produce different result each time it transforms a given image. Grayscale ~~~~~~~~~ The :class:`~torchvision.transforms.Grayscale` transform (see also :func:`~torchvision.transforms.functional.to_grayscale`) converts an image to grayscale .. GENERATED FROM PYTHON SOURCE LINES 156-159 .. code-block:: Python gray_img = v2.Grayscale()(orig_img) plot([orig_img, gray_img], cmap='gray') .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_011.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_011.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 160-164 ColorJitter ~~~~~~~~~~~ The :class:`~torchvision.transforms.ColorJitter` transform randomly changes the brightness, contrast, saturation, hue, and other properties of an image. .. GENERATED FROM PYTHON SOURCE LINES 164-168 .. code-block:: Python jitter = v2.ColorJitter(brightness=.5, hue=.3) jittered_imgs = [jitter(orig_img) for _ in range(4)] plot([orig_img] + jittered_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_012.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_012.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 169-174 GaussianBlur ~~~~~~~~~~~~ The :class:`~torchvision.transforms.GaussianBlur` transform (see also :func:`~torchvision.transforms.functional.gaussian_blur`) performs gaussian blur transform on an image. .. GENERATED FROM PYTHON SOURCE LINES 174-178 .. code-block:: Python 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) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_013.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_013.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 179-184 RandomInvert ~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomInvert` transform (see also :func:`~torchvision.transforms.functional.invert`) randomly inverts the colors of the given image. .. GENERATED FROM PYTHON SOURCE LINES 184-188 .. code-block:: Python inverter = v2.RandomInvert() invertered_imgs = [inverter(orig_img) for _ in range(4)] plot([orig_img] + invertered_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_014.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_014.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 189-195 RandomPosterize ~~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomPosterize` transform (see also :func:`~torchvision.transforms.functional.posterize`) randomly posterizes the image by reducing the number of bits of each color channel. .. GENERATED FROM PYTHON SOURCE LINES 195-199 .. code-block:: Python posterizer = v2.RandomPosterize(bits=2) posterized_imgs = [posterizer(orig_img) for _ in range(4)] plot([orig_img] + posterized_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_015.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_015.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 200-206 RandomSolarize ~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomSolarize` transform (see also :func:`~torchvision.transforms.functional.solarize`) randomly solarizes the image by inverting all pixel values above the threshold. .. GENERATED FROM PYTHON SOURCE LINES 206-210 .. code-block:: Python solarizer = v2.RandomSolarize(threshold=192.0) solarized_imgs = [solarizer(orig_img) for _ in range(4)] plot([orig_img] + solarized_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_016.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_016.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 211-216 RandomAdjustSharpness ~~~~~~~~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomAdjustSharpness` transform (see also :func:`~torchvision.transforms.functional.adjust_sharpness`) randomly adjusts the sharpness of the given image. .. GENERATED FROM PYTHON SOURCE LINES 216-220 .. code-block:: Python sharpness_adjuster = v2.RandomAdjustSharpness(sharpness_factor=2) sharpened_imgs = [sharpness_adjuster(orig_img) for _ in range(4)] plot([orig_img] + sharpened_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_017.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_017.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 221-226 RandomAutocontrast ~~~~~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomAutocontrast` transform (see also :func:`~torchvision.transforms.functional.autocontrast`) randomly applies autocontrast to the given image. .. GENERATED FROM PYTHON SOURCE LINES 226-230 .. code-block:: Python autocontraster = v2.RandomAutocontrast() autocontrasted_imgs = [autocontraster(orig_img) for _ in range(4)] plot([orig_img] + autocontrasted_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_018.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_018.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 231-236 RandomEqualize ~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomEqualize` transform (see also :func:`~torchvision.transforms.functional.equalize`) randomly equalizes the histogram of the given image. .. GENERATED FROM PYTHON SOURCE LINES 236-240 .. code-block:: Python equalizer = v2.RandomEqualize() equalized_imgs = [equalizer(orig_img) for _ in range(4)] plot([orig_img] + equalized_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_019.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_019.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 241-247 JPEG ~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.v2.JPEG` transform (see also :func:`~torchvision.transforms.v2.functional.jpeg`) applies JPEG compression to the given image with random degree of compression. .. GENERATED FROM PYTHON SOURCE LINES 247-251 .. code-block:: Python jpeg = v2.JPEG((5, 50)) jpeg_imgs = [jpeg(orig_img) for _ in range(4)] plot([orig_img] + jpeg_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_020.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_020.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 252-262 Augmentation Transforms ----------------------- The following transforms are combinations of multiple transforms, either geometric or photometric, or both. AutoAugment ~~~~~~~~~~~ The :class:`~torchvision.transforms.AutoAugment` transform automatically augments data based on a given auto-augmentation policy. See :class:`~torchvision.transforms.AutoAugmentPolicy` for the available policies. .. GENERATED FROM PYTHON SOURCE LINES 262-271 .. code-block:: Python 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) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_021.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_021.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 272-275 RandAugment ~~~~~~~~~~~ The :class:`~torchvision.transforms.RandAugment` is an alternate version of AutoAugment. .. GENERATED FROM PYTHON SOURCE LINES 275-279 .. code-block:: Python augmenter = v2.RandAugment() imgs = [augmenter(orig_img) for _ in range(4)] plot([orig_img] + imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_022.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_022.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 280-285 TrivialAugmentWide ~~~~~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.TrivialAugmentWide` is an alternate implementation of AutoAugment. However, instead of transforming an image multiple times, it transforms an image only once using a random transform from a given list with a random strength number. .. GENERATED FROM PYTHON SOURCE LINES 285-289 .. code-block:: Python augmenter = v2.TrivialAugmentWide() imgs = [augmenter(orig_img) for _ in range(4)] plot([orig_img] + imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_023.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_023.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 290-293 AugMix ~~~~~~ The :class:`~torchvision.transforms.AugMix` transform interpolates between augmented versions of an image. .. GENERATED FROM PYTHON SOURCE LINES 293-297 .. code-block:: Python augmenter = v2.AugMix() imgs = [augmenter(orig_img) for _ in range(4)] plot([orig_img] + imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_024.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_024.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 298-310 Randomly-applied Transforms --------------------------- The following transforms are randomly-applied given a probability ``p``. That is, given ``p = 0.5``, there is a 50% chance to return the original image, and a 50% chance to return the transformed image, even when called with the same transform instance! RandomHorizontalFlip ~~~~~~~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomHorizontalFlip` transform (see also :func:`~torchvision.transforms.functional.hflip`) performs horizontal flip of an image, with a given probability. .. GENERATED FROM PYTHON SOURCE LINES 310-314 .. code-block:: Python hflipper = v2.RandomHorizontalFlip(p=0.5) transformed_imgs = [hflipper(orig_img) for _ in range(4)] plot([orig_img] + transformed_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_025.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_025.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 315-320 RandomVerticalFlip ~~~~~~~~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomVerticalFlip` transform (see also :func:`~torchvision.transforms.functional.vflip`) performs vertical flip of an image, with a given probability. .. GENERATED FROM PYTHON SOURCE LINES 320-324 .. code-block:: Python vflipper = v2.RandomVerticalFlip(p=0.5) transformed_imgs = [vflipper(orig_img) for _ in range(4)] plot([orig_img] + transformed_imgs) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_026.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_026.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 325-329 RandomApply ~~~~~~~~~~~ The :class:`~torchvision.transforms.RandomApply` transform randomly applies a list of transforms, with a given probability. .. GENERATED FROM PYTHON SOURCE LINES 329-332 .. code-block:: Python 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) .. image-sg:: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_027.png :alt: plot transforms illustrations :srcset: /auto_examples/transforms/images/sphx_glr_plot_transforms_illustrations_027.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 8.844 seconds) .. _sphx_glr_download_auto_examples_transforms_plot_transforms_illustrations.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_transforms_illustrations.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_transforms_illustrations.py ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_