# Processar dados de imagem

Este guia mostra métodos específicos para processar conjuntos de dados de imagens. Aprenda como:

- Use [map()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.map) com um conjunto de dados de imagens.
- Aplique aumentos de dados a um conjunto de dados com [set_transform()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.set_transform).

Para um guia sobre como processar qualquer tipo de conjunto de dados, consulte o guia de processo geral.

## Map

A função [map()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.map) pode aplicar transformações em um conjunto de dados inteiro.

Por exemplo, crie uma função básica [`Resize`](https://pytorch.org/vision/stable/generated/torchvision.transforms.Resize.html):

```py
>>> def transforms(examples):
...     examples["pixel_values"] = [image.convert("RGB").resize((100,100)) for image in examples["image"]]
...     return examples
```

Agora use a função [map()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.map) para redimensionar todo o conjunto de dados e defina `batched=True` para acelerar o processo, aceitando lotes de exemplos. A transformação retorna `pixel_values` como um objeto `PIL.Image` que pode ser armazenado em cache:

```py
>>> dataset = dataset.map(transforms, remove_columns=["image"], batched=True)
>>> dataset[0]
{'label': 6,
 'pixel_values': <PIL.PngImagePlugin.PngImageFile image mode=RGB size=100x100 at 0x7F058237BB10>}
```

O arquivo de cache economiza tempo porque você não precisa executar a mesma transformação duas vezes. A função [map()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.map) é ideal para operações que você executa apenas uma vez por treinamento - como redimensionar uma imagem - em vez de usá-la para operações executadas a cada época, como aumentos de dados.

[map()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.map) ocupa alguma memória, mas você pode reduzir seus requisitos de memória com os seguintes parâmetros:

- [`batch_size`](./package_reference/main_classes#datasets.DatasetDict.map.batch_size) determina o número de exemplos processados em uma única chamada à função de transformação.
- [`writer_batch_size`](./package_reference/main_classes#datasets.DatasetDict.map.writer_batch_size) determina o número de exemplos processados que são mantidos na memória antes de serem armazenados.

Os valores padrão de ambos os parâmetros são 1000, o que pode ser custoso se você estiver armazenando imagens. Reduza esses valores para usar menos memória ao usar [map()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.map).

## Aplicar transformações

🤗 O Datasets aplica aumentos de dados de qualquer biblioteca ou pacote ao seu dataset. As transformações podem ser aplicadas em tempo real em lotes de dados com [set_transform()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.set_transform), o que consome menos espaço em disco.

> [!TIP]
> O exemplo a seguir usa [torchvision](https://pytorch.org/vision/stable/index.html), mas sinta-se à vontade para usar outras bibliotecas de aumento de dados, como [Albumentations](https://albumentations.ai/docs/), [Kornia](https://kornia.readthedocs.io/en/latest/) e [imgaug](https://imgaug.readthedocs.io/en/latest/).

Por exemplo, se você quiser alterar as propriedades de cor de uma imagem aleatoriamente:

```py
>>> from torchvision.transforms import Compose, ColorJitter, ToTensor

>>> jitter = Compose(
...     [
...          ColorJitter(brightness=0.25, contrast=0.25, saturation=0.25, hue=0.7),
...          ToTensor(),
...     ]
... )
```

Crie uma função para aplicar a transformação `ColorJitter`:

```py
>>> def transforms(examples):
...     examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
...     return examples
```

Aplique a transformação com a função [set_transform()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.set_transform):

```py
>>> dataset.set_transform(transforms)
```

