# Обработка данных изображений

В этом руководстве описаны конкретные методы для обработки наборов данных изображений. Узнайте, как:

- Используйте [map()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.map) с набором данных изображений.
- Примените аугментации данных к набору данных с помощью [set_transform()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.set_transform).

Справочник по обработке любого типа набора данных — в общем руководстве по процессу.

## Карта

Функция [map()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.map) может применять преобразования ко всему набору данных.

Например, создайте базовую функцию [`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
```

Теперь используйте функцию [map()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.map), чтобы изменить размер всего набора данных, и установите `batched=True`, чтобы ускорить процесс за счёт обработки примеров партиями. Преобразование возвращает `pixel_values` в виде кэшируемого объекта `PIL.Image`:

```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>}
```

Файл кэша экономит время, так как не нужно выполнять один и тот же трансформ дважды. Функция [map()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.map) лучше всего подходит для операций, которые выполняются только один раз за обучение, например, изменение размера изображения, а не для операций, выполняемых в каждой эпохе, таких как аугментация данных.

[map()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.map) занимает некоторое количество памяти, но вы можете снизить требования к памяти с помощью следующих параметров:

- [`batch_size`](./package_reference/main_classes#datasets.DatasetDict.map.batch_size) определяет количество примеров, обрабатываемых за один вызов функции преобразования.
- [`writer_batch_size`](./package_reference/main_classes#datasets.DatasetDict.map.writer_batch_size) определяет количество обработанных примеров, которые удерживаются в памяти перед их сохранением.

Значения обоих параметров по умолчанию равны 1000, что может быть ресурсоёмко при хранении изображений. Уменьшите эти значения, чтобы использовать меньше памяти при вызове [map()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.map).

## Применение трансформаций

🤗 Datasets применяет преобразования данных из любой библиотеки или пакета к вашему набору данных. Преобразования можно применять на лету к батчам данных с помощью [set_transform()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.set_transform), что позволяет экономить место на диске.

> [!TIP]
> В следующем примере используется [torchvision](https://pytorch.org/vision/stable/index.html), но вы можете свободно применять другие библиотеки для аугментации данных, такие как [Albumentations](https://albumentations.ai/docs/), [Kornia](https://kornia.readthedocs.io/en/latest/) и [imgaug](https://imgaug.readthedocs.io/en/latest/).

Например, если вы хотите случайно изменить цветовые свойства изображения:

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

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

Создайте функцию для применения трансформации `ColorJitter`:

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

Примените преобразование с помощью функции [set_transform()](/docs/datasets/v5.2.0/ru/package_reference/main_classes#datasets.Dataset.set_transform):

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

