# Tạo một tập dữ liệu để huấn luyện

Có rất nhiều dataset trên [Hub](https://huggingface.co/datasets?task_categories=task_categories:text-to-image&sort=downloads) để huấn luyện mô hình, nhưng nếu bạn không tìm thấy dataset nào mình quan tâm hoặc muốn sử dụng dataset của riêng mình, bạn có thể tạo một dataset bằng thư viện 🤗 [Datasets](https://huggingface.co/docs/datasets). Cấu trúc của dataset phụ thuộc vào tác vụ mà bạn muốn huấn luyện mô hình. Cấu trúc dataset cơ bản nhất là một thư mục chứa các hình ảnh cho các tác vụ như tạo hình ảnh không điều kiện. Một cấu trúc dataset khác có thể là một thư mục chứa các hình ảnh và một tệp văn bản chứa các chú thích tương ứng cho chúng, dành cho các tác vụ như tạo hình ảnh từ văn bản.

Hướng dẫn này sẽ cho bạn thấy hai cách để tạo một tập dữ liệu để tinh chỉnh:

- cung cấp một thư mục chứa các hình ảnh cho đối số `--train_data_dir`
- tải một bộ dữ liệu lên Hub và truyền id kho dữ liệu vào đối số `--dataset_name`

> [!TIP]
> 💡 Tìm hiểu thêm về cách tạo bộ dữ liệu ảnh để huấn luyện trong hướng dẫn [Tạo bộ dữ liệu ảnh](https://huggingface.co/docs/datasets/image_dataset).

## Cung cấp một bộ dữ liệu dưới dạng thư mục

Đối với tạo không điều kiện, bạn có thể cung cấp bộ dữ liệu của riêng mình dưới dạng một thư mục chứa các hình ảnh. Script huấn luyện sử dụng builder [`ImageFolder`](https://huggingface.co/docs/datasets/en/image_dataset#imagefolder) từ 🤗 Datasets để tự động xây dựng bộ dữ liệu từ thư mục. Cấu trúc thư mục của bạn nên có dạng:

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

Truyền đường dẫn đến thư mục bộ dữ liệu vào đối số `--train_data_dir`, sau đó bạn có thể bắt đầu huấn luyện:

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

## Tải dữ liệu của bạn lên Hub

> [!TIP]
> 💡 Để biết thêm chi tiết và bối cảnh về việc tạo và tải lên Hub một bộ dữ liệu, hãy xem bài đăng [Tìm kiếm hình ảnh với 🤗 Datasets](https://huggingface.co/blog/image-search-datasets).

Bắt đầu bằng cách tạo một tập dữ liệu với tính năng [`ImageFolder`](https://huggingface.co/docs/datasets/image_load#imagefolder), tính năng này sẽ tạo một cột `image` chứa các hình ảnh được mã hóa bằng PIL.

Bạn có thể sử dụng tham số `data_dir` hoặc `data_files` để chỉ định vị trí của bộ dữ liệu. Tham số `data_files` hỗ trợ ánh xạ các tệp cụ thể vào các phần chia của bộ dữ liệu như `train` hoặc `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_3367a.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"]}
)
```

Sau đó, sử dụng phương thức [push_to_hub](https://huggingface.co/docs/datasets/main/en/package_reference/main_classes#datasets.Dataset.push_to_hub) để tải bộ dữ liệu lên 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)
```

Bây giờ bộ dữ liệu đã sẵn sàng để huấn luyện bằng cách truyền tên bộ dữ liệu vào đối số `--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>
```

## Các bước tiếp theo

Bây giờ bạn đã tạo xong một dataset, bạn có thể đưa nó vào tham số `train_data_dir` (nếu dataset của bạn là cục bộ) hoặc `dataset_name` (nếu dataset của bạn nằm trên Hub) của một script huấn luyện.

Đối với các bước tiếp theo, bạn có thể thử sử dụng bộ dữ liệu của mình để huấn luyện một mô hình cho [sinh không điều kiện](unconditional_training) hoặc [sinh ảnh từ văn bản](text2image)!

