数据集文档

处理图像数据

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

处理图像数据

本指南介绍处理图像数据集的具体方法。学习如何

  • map() 与图像数据集一起使用。
  • 使用 set_transform() 将数据增强应用于数据集。

有关如何处理任何类型数据集的指南,请查看通用处理指南

Map

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() 函数最适合您每个训练周期只运行一次的操作 - 例如调整图像大小 - 而不是将其用于每个 epoch 执行的操作,例如数据增强。

map() 占用一些内存,但您可以使用以下参数来减少其内存需求

  • batch_size 确定在一次调用转换函数中处理的示例数量。
  • writer_batch_size 确定在存储之前保存在内存中的已处理示例的数量。

这两个参数值默认为 1000,如果您存储图像,这可能会很昂贵。当您使用 map() 时,降低这些值以使用更少的内存。

应用转换

🤗 Datasets 将来自任何库或包的数据增强应用于您的数据集。可以使用 set_transform() 在数据批次上即时应用转换,这会消耗更少的磁盘空间。

以下示例使用 torchvision,但您可以随意使用其他数据增强库,如 AlbumentationsKorniaimgaug

例如,如果您想随机更改图像的颜色属性

>>> 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)
< > GitHub 上更新