处理图像数据
本指南介绍了处理图像数据集的具体方法。了解如何
- 使用 map() 处理图像数据集。
- 使用 set_transform() 将数据增强应用于数据集。
有关如何处理任何类型的数据集的指南,请查看 一般处理指南。
Map
The 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)