Datasets documentation

이미지 데이터 처리

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

이미지 데이터 처리

이 가이드에서는 이미지 데이터셋을 처리하는 구체적인 방법을 보여줍니다. 다음을 배워보세요:

  • 이미지 데이터셋에 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를 설정하여 예시 배치(batch)를 받아들이는 방식으로 처리 속도를 높입니다. 변환은 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는 transform 함수를 한 번 호출할 때 처리되는 예시의 수를 결정합니다.
  • 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)
Update on GitHub