Datasets documentation
Обработка данных изображений
Обработка данных изображений
В этом руководстве описаны конкретные методы для обработки наборов данных изображений. Узнайте, как:
- Используйте 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)