# Tutorial 7: Learn about transforms¶

We import the `transforms` to process the image. The transfomers are from the torchvision. We add six categories transform method, `resize`, `random crop`,`center crop`, `random horizontal flip`, `to tensor`. `normaliza`.

• Resize: Resize the input image to the given size. If the image is torch Tensor, it is expected to have […, H, W] shape, where … means an arbitrary number of leading dimensions.

• Random crop: Crop the given image at a random location. If the image is torch Tensor, it is expected to have […, H, W] shape, where … means an arbitrary number of leading dimensions, but if non-constant padding is used, the input is expected to have at most 2 leading dimensions

• Center crop: Crops the given image at the center. If the image is torch Tensor, it is expected to have […, H, W] shape, where … means an arbitrary number of leading dimensions. If image size is smaller than output size along any edge, image is padded with 0 and then center cropped.

• Random horizontal flip: Horizontally flip the given image randomly with a given probability. If the image is torch Tensor, it is expected to have […, H, W] shape, where … means an arbitrary number of leading dimensions

• To tensor: Convert a PIL Image or numpy.ndarray to tensor. This transform does not support torchscript.

• Normalize: Normalize a tensor image with mean and standard deviation.

For more details about transforms, see torchvision.transforms

We import the `torchvision` and `PIL` to define the transform functions.

And in “fgvclib/transforms/init.py”, we define the function `get_transform` to return the transforms with the given name. The given names are `resize`, `center_crop`, `random_crop`, `random_horizontal_flip`, `to_tensor`, `normalize`.

```def get_transform(transform_name):
"""Return the backbone with the given name."""
if transform_name not in globals():
return globals()[transform_name]
```

## The example¶

The parameters about the network are saved in the configs in advance, so we can build transforms for train or test dataset according to config.

```from fgvclib.transforms import get_transform

def build_transforms(transforms_cfg: CfgNode) -> transforms.Compose:
"""
Args:
transforms_cfg (CfgNode): The root config node.
Returns:
transforms.Compose: The transforms.Compose object in Pytorch.
"""
return transforms.Compose([get_transform(item['name'])(item) for item in transforms_cfg])
```