File size: 4,870 Bytes
87d40d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# ν•™μŠ΅μ„ μœ„ν•œ 데이터셋 λ§Œλ“€κΈ°

[Hub](https://huggingface.co/datasets?task_categories=task_categories:text-to-image&sort=downloads) μ—λŠ” λͺ¨λΈ κ΅μœ‘μ„ μœ„ν•œ λ§Žμ€ 데이터셋이 μžˆμ§€λ§Œ,
관심이 μžˆκ±°λ‚˜ μ‚¬μš©ν•˜κ³  싢은 데이터셋을 찾을 수 μ—†λŠ” 경우 πŸ€— [Datasets](hf.co/docs/datasets) 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터셋을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
데이터셋 κ΅¬μ‘°λŠ” λͺ¨λΈμ„ ν•™μŠ΅ν•˜λ €λŠ” μž‘μ—…μ— 따라 λ‹¬λΌμ§‘λ‹ˆλ‹€.
κ°€μž₯ 기본적인 데이터셋 κ΅¬μ‘°λŠ” unconditional 이미지 생성과 같은 μž‘μ—…μ„ μœ„ν•œ 이미지 λ””λ ‰ν† λ¦¬μž…λ‹ˆλ‹€.
또 λ‹€λ₯Έ 데이터셋 κ΅¬μ‘°λŠ” 이미지 디렉토리와 text-to-image 생성과 같은 μž‘μ—…μ— ν•΄λ‹Ήν•˜λŠ” ν…μŠ€νŠΈ μΊ‘μ…˜μ΄ ν¬ν•¨λœ ν…μŠ€νŠΈ 파일일 수 μžˆμŠ΅λ‹ˆλ‹€.

이 κ°€μ΄λ“œμ—λŠ” 파인 νŠœλ‹ν•  데이터셋을 λ§Œλ“œλŠ” 두 가지 방법을 μ†Œκ°œν•©λ‹ˆλ‹€:

- 이미지 폴더λ₯Ό `--train_data_dir` μΈμˆ˜μ— μ œκ³΅ν•©λ‹ˆλ‹€.
- 데이터셋을 Hub에 μ—…λ‘œλ“œν•˜κ³  데이터셋 리포지토리 idλ₯Ό `--dataset_name` μΈμˆ˜μ— μ „λ‹¬ν•©λ‹ˆλ‹€.

<Tip>

πŸ’‘ ν•™μŠ΅μ— μ‚¬μš©ν•  이미지 데이터셋을 λ§Œλ“œλŠ” 방법에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ [이미지 데이터셋 λ§Œλ“€κΈ°](https://huggingface.co/docs/datasets/image_dataset) κ°€μ΄λ“œλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

</Tip>

## 폴더 ν˜•νƒœλ‘œ 데이터셋 κ΅¬μΆ•ν•˜κΈ°

Unconditional 생성을 μœ„ν•΄ 이미지 ν΄λ”λ‘œ μžμ‹ μ˜ 데이터셋을 ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.
ν•™μŠ΅ μŠ€ν¬λ¦½νŠΈλŠ” πŸ€— 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 \
    # argument둜 폴더 μ§€μ •ν•˜κΈ° \
    --train_data_dir <path-to-train-directory> \
    <other-arguments>
```

## Hub에 데이터 올리기

<Tip>

πŸ’‘ 데이터셋을 λ§Œλ“€κ³  Hub에 μ—…λ‘œλ“œν•˜λŠ” 것에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ [πŸ€— Datasets을 μ‚¬μš©ν•œ 이미지 검색](https://huggingface.co/blog/image-search-datasets) κ²Œμ‹œλ¬Όμ„ μ°Έκ³ ν•˜μ„Έμš”.

</Tip>

PIL μΈμ½”λ”©λœ 이미지가 ν¬ν•¨λœ `이미지` 열을 μƒμ„±ν•˜λŠ” [이미지 폴더](https://huggingface.co/docs/datasets/image_load#imagefolder) κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ 데이터셋 생성을 μ‹œμž‘ν•©λ‹ˆλ‹€.

`data_dir` λ˜λŠ” `data_files` 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°μ…‹μ˜ μœ„μΉ˜λ₯Ό 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.
`data_files` λ§€κ°œλ³€μˆ˜λŠ” νŠΉμ • νŒŒμΌμ„ `train` μ΄λ‚˜ `test` 둜 λΆ„λ¦¬ν•œ 데이터셋에 λ§€ν•‘ν•˜λŠ” 것을 μ§€μ›ν•©λ‹ˆλ‹€:

```python
from datasets import load_dataset

# μ˜ˆμ‹œ 1: 둜컬 폴더
dataset = load_dataset("imagefolder", data_dir="path_to_your_folder")

# μ˜ˆμ‹œ 2: 둜컬 파일 (지원 포맷 : tar, gzip, zip, xz, rar, zstd)
dataset = load_dataset("imagefolder", data_files="path_to_zip_file")

# μ˜ˆμ‹œ 3: 원격 파일 (지원 포맷 : 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_3367a.zip",
)

# μ˜ˆμ‹œ 4: μ—¬λŸ¬κ°œλ‘œ λΆ„ν• 
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/v2.13.1/en/package_reference/main_classes#datasets.Dataset.push_to_hub) 을 μ‚¬μš©ν•΄μ„œ Hub에 데이터셋을 μ—…λ‘œλ“œ ν•©λ‹ˆλ‹€:

```python
# ν„°λ―Έλ„μ—μ„œ huggingface-cli login μ»€λ§¨λ“œλ₯Ό 이미 μ‹€ν–‰ν–ˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€
dataset.push_to_hub("name_of_your_dataset")

# 개인 repo둜 push ν•˜κ³  μ‹Άλ‹€λ©΄, `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="runwayml/stable-diffusion-v1-5" \
  --dataset_name="name_of_your_dataset" \
  <other-arguments>
```

## λ‹€μŒ 단계

데이터셋을 μƒμ„±ν–ˆμœΌλ‹ˆ 이제 ν•™μŠ΅ 슀크립트의 `train_data_dir` (데이터셋이 둜컬이면) ν˜Ήμ€ `dataset_name` (Hub에 데이터셋을 올렸으면) μΈμˆ˜μ— μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒ λ‹¨κ³„μ—μ„œλŠ” 데이터셋을 μ‚¬μš©ν•˜μ—¬ [unconditional 생성](https://huggingface.co/docs/diffusers/v0.18.2/en/training/unconditional_training) λ˜λŠ” [ν…μŠ€νŠΈ-이미지 생성](https://huggingface.co/docs/diffusers/training/text2image)을 μœ„ν•œ λͺ¨λΈμ„ ν•™μŠ΅μ‹œμΌœλ³΄μ„Έμš”!