transforms.rst 3.35 KB
Newer Older
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
1
2
torchvision.transforms
======================
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
3
4
5

.. currentmodule:: torchvision.transforms

6
7
8
9
10
Transforms are common image transformations. They can be chained together using :class:`Compose`.
Additionally, there is the :mod:`torchvision.transforms.functional` module.
Functional transforms give fine-grained control over the transformations.
This is useful if you have to build a more complex transformation pipeline
(e.g. in the case of segmentation tasks).
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
11

12
13
14
15
16
All transformations accept PIL Image, Tensor Image or batch of Tensor Images as input. Tensor Image is a tensor with
``(C, H, W)`` shape, where ``C`` is a number of channels, ``H`` and ``W`` are image height and width. Batch of
Tensor Images is a tensor of ``(B, C, H, W)`` shape, where ``B`` is a number of images in the batch. Deterministic or
random transformations applied on the batch of Tensor Images identically transform all the images of the batch.

Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
17
18
.. autoclass:: Compose

19
Transforms on PIL Image
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
20
21
-----------------------

22
.. autoclass:: CenterCrop
23

24
.. autoclass:: ColorJitter
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
25

26
.. autoclass:: FiveCrop
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
27

28
.. autoclass:: Grayscale
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
29

30
.. autoclass:: Pad
31

32
.. autoclass:: RandomAffine
33

34
.. autoclass:: RandomApply
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
35

36
.. autoclass:: RandomChoice
37

38
.. autoclass:: RandomCrop
39

40
.. autoclass:: RandomGrayscale
41

42
.. autoclass:: RandomHorizontalFlip
43

44
.. autoclass:: RandomOrder
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
45

46
47
.. autoclass:: RandomPerspective

48
.. autoclass:: RandomResizedCrop
49

50
51
.. autoclass:: RandomRotation

52
53
54
55
56
57
58
59
60
.. autoclass:: RandomSizedCrop

.. autoclass:: RandomVerticalFlip

.. autoclass:: Resize

.. autoclass:: Scale

.. autoclass:: TenCrop
61

Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
62
63
64
Transforms on torch.\*Tensor
----------------------------

surgan12's avatar
surgan12 committed
65
66
.. autoclass:: LinearTransformation

Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
67
68
69
70
.. autoclass:: Normalize
	:members: __call__
	:special-members:

71
72
.. autoclass:: RandomErasing

Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
73
74
75
Conversion Transforms
---------------------

76
.. autoclass:: ToPILImage
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
77
78
79
	:members: __call__
	:special-members:

80
.. autoclass:: ToTensor
Sasank Chilamkurthy's avatar
Sasank Chilamkurthy committed
81
82
83
84
85
86
87
88
	:members: __call__
	:special-members:

Generic Transforms
------------------

.. autoclass:: Lambda

89
90
91
92

Functional Transforms
---------------------

93
94
95
96
Functional transforms give you fine-grained control of the transformation pipeline.
As opposed to the transformations above, functional transforms don't contain a random number
generator for their parameters.
That means you have to specify/generate all parameters, but you can reuse the functional transform.
97
98
99

Example:
you can apply a functional transform with the same parameters to multiple images like this:
100
101
102
103
104
105
106

.. code:: python

    import torchvision.transforms.functional as TF
    import random

    def my_segmentation_transforms(image, segmentation):
107
        if random.random() > 0.5:
108
109
110
111
112
113
            angle = random.randint(-30, 30)
            image = TF.rotate(image, angle)
            segmentation = TF.rotate(segmentation, angle)
        # more transforms ...
        return image, segmentation

114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135

Example:
you can use a functional transform to build transform classes with custom behavior:

.. code:: python

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


136
137
.. automodule:: torchvision.transforms.functional
    :members: