Datasets documentation

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

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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

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

  • Используйте map() с набором данных изображений.
  • Примените аугментации данных к набору данных с помощью set_transform().

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

Карта

Функция map() может применять преобразования ко всему набору данных.

Например, создайте базовую функцию Resize:

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

Теперь используйте функцию map(), чтобы изменить размер всего набора данных, и установите batched=True, чтобы ускорить процесс за счёт обработки примеров партиями. Преобразование возвращает pixel_values в виде кэшируемого объекта PIL.Image:

>>> 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() лучше всего подходит для операций, которые выполняются только один раз за обучение, например, изменение размера изображения, а не для операций, выполняемых в каждой эпохе, таких как аугментация данных.

map() занимает некоторое количество памяти, но вы можете снизить требования к памяти с помощью следующих параметров:

  • batch_size определяет количество примеров, обрабатываемых за один вызов функции преобразования.
  • writer_batch_size определяет количество обработанных примеров, которые удерживаются в памяти перед их сохранением.

Значения обоих параметров по умолчанию равны 1000, что может быть ресурсоёмко при хранении изображений. Уменьшите эти значения, чтобы использовать меньше памяти при вызове map().

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

🤗 Datasets применяет преобразования данных из любой библиотеки или пакета к вашему набору данных. Преобразования можно применять на лету к батчам данных с помощью set_transform(), что позволяет экономить место на диске.

В следующем примере используется torchvision, но вы можете свободно применять другие библиотеки для аугментации данных, такие как Albumentations, Kornia и imgaug.

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

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

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

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

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

Примените преобразование с помощью функции set_transform():

>>> dataset.set_transform(transforms)
Update on GitHub