# 학습용 데이터셋 생성

[Hub](https://huggingface.co/datasets?task_categories=task_categories:text-to-image&sort=downloads)에는 모델을 학습시키는 데 사용할 수 있는 다양한 데이터셋이 있지만, 관심 있는 데이터셋을 찾지 못했거나 자체 데이터셋을 사용하려는 경우 🤗 [Datasets](https://huggingface.co/docs/datasets) 라이브러리를 사용하여 데이터셋을 만들 수 있습니다. 데이터셋의 구조는 모델을 학습시키고자 하는 작업에 따라 달라집니다. 가장 기본적인 데이터셋 구조는 무조건적 이미지 생성과 같은 작업의 경우 이미지 파일이 포함된 디렉터리입니다. 텍스트-이미지 생성과 같은 작업의 경우, 이미지 파일이 포함된 디렉터리와 해당 이미지에 대응하는 텍스트 캡션을 포함하는 텍스트 파일로 구성된 데이터셋 구조를 사용할 수 있습니다.

이 가이드에서는 파인튜닝에 사용할 데이터셋을 만드는 두 가지 방법을 보여줍니다:

- `--train_data_dir` 인수에 이미지 폴더를 제공합니다
- 데이터셋을 Hub에 업로드하고 데이터셋 저장소 ID를 `--dataset_name` 인자에 전달합니다

> [!TIP]
> 💡 학습용 이미지 데이터셋을 만드는 방법에 대해서는 [이미지 데이터셋 만들기](https://huggingface.co/docs/datasets/image_dataset) 가이드에서 자세히 알아보세요.

## 폴더로 데이터셋을 제공합니다

무조건 생성의 경우, 이미지 폴더로 구성된 사용자 지정 데이터셋을 제공할 수 있습니다. 학습 스크립트는 🤗 Datasets의 [`ImageFolder`](https://huggingface.co/docs/datasets/en/image_dataset#imagefolder) 빌더를 사용하여 폴더에서 데이터셋을 자동으로 구성합니다. 디렉터리 구조는 다음과 같아야 합니다:

```bash
data_dir/xxx.png
data_dir/xxy.png
data_dir/[...]/xxz.png
```

데이터셋 디렉터리의 경로를 `--train_data_dir` 인자에 전달한 후 학습을 시작할 수 있습니다:

```bash
accelerate launch train_unconditional.py \
    --train_data_dir <path-to-train-directory> \
    <other-arguments>
```

## 데이터를 Hub에 업로드

> [!TIP]
> 💡 Hub에 데이터셋을 생성하고 업로드하는 방법에 대한 자세한 내용과 맥락을 확인하려면 [Image search with 🤗 Datasets](https://huggingface.co/blog/image-search-datasets) 게시물을 참고하세요.

[`ImageFolder`](https://huggingface.co/docs/datasets/image_load#imagefolder) 기능으로 데이터셋을 생성하는 것부터 시작합니다. 이 기능은 PIL로 인코딩된 이미지를 포함하는 `image` 컬럼을 생성합니다.

`data_dir` 또는 `data_files` 매개변수를 사용하여 데이터셋의 위치를 지정할 수 있습니다. `data_files` 매개변수는 `train` 또는 `test`와 같은 데이터셋 스플릿에 특정 파일을 매핑하는 것을 지원합니다:

```python
from datasets import load_dataset

# example 1: local folder
dataset = load_dataset("imagefolder", data_dir="path_to_your_folder")

# example 2: local files (supported formats are tar, gzip, zip, xz, rar, zstd)
dataset = load_dataset("imagefolder", data_files="path_to_zip_file")

# example 3: remote files (supported formats are tar, gzip, zip, xz, rar, zstd)
dataset = load_dataset(
    "imagefolder",
    data_files="https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_5340.zip",
)

# example 4: providing several splits
dataset = load_dataset(
    "imagefolder", data_files={"train": ["path/to/file1", "path/to/file2"], "test": ["path/to/file3", "path/to/file4"]}
)
```

그 후 [push_to_hub](https://huggingface.co/docs/datasets/main/en/package_reference/main_classes#datasets.Dataset.push_to_hub) 메서드를 사용하여 Hub에 데이터셋을 업로드합니다:

```python
# assuming you have ran the hf auth login command in a terminal
dataset.push_to_hub("name_of_your_dataset")

# if you want to push to a private repo, simply pass private=True:
dataset.push_to_hub("name_of_your_dataset", private=True)
```

이제 데이터셋 이름을 `--dataset_name` 인자에 전달하여 학습에 사용할 수 있습니다:

```bash
accelerate launch --mixed_precision="fp16"  train_text_to_image.py \
  --pretrained_model_name_or_path="stable-diffusion-v1-5/stable-diffusion-v1-5" \
  --dataset_name="name_of_your_dataset" \
  <other-arguments>
```

## 다음 단계

데이터셋을 생성했으므로, 학습 스크립트의 `train_data_dir`(데이터셋이 로컬에 있는 경우) 또는 `dataset_name`(데이터셋이 Hub에 있는 경우) 인자에 연결할 수 있습니다.

다음 단계로, [무조건 생성](unconditional_training) 또는 [텍스트-이미지 생성](text2image) 모델을 학습하는 데 데이터셋을 사용해 보세요!

