Datasets 文档
处理图像数据
加入 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,但您也可以随时使用其他数据增强库,如 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)