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)