# Создание набора данных для обучения

На [Hub](https://huggingface.co/datasets?task_categories=task_categories:text-to-image&sort=downloads) представлено множество датасетов для обучения моделей, но если вы не нашли нужный или хотите использовать собственный, вы можете создать датасет с помощью библиотеки 🤗 [Datasets](https://huggingface.co/docs/datasets). Структура датасета зависит от задачи, для которой вы обучаете модель. Самая простая структура — это каталог с изображениями для задач, таких как безусловная генерация изображений. Другая возможная структура — каталог с изображениями и текстовый файл с соответствующими текстовыми описаниями для задач, таких как генерация изображений по тексту.

В этом руководстве показано два способа создания набора данных для дообучения:

- укажите папку с изображениями в аргументе `--train_data_dir`
- загрузите датасет в Hub и передайте идентификатор репозитория датасета в аргумент `--dataset_name`

> [!TIP]
> 💡 Подробнее о том, как создать набор изображений для обучения, читайте в руководстве [Создание набора изображений](https://huggingface.co/docs/datasets/image_dataset).

## Предоставление набора данных в виде папки

Для безусловной генерации вы можете предоставить собственный датасет в виде папки с изображениями. Скрипт обучения использует билдер [`ImageFolder`](https://huggingface.co/docs/datasets/en/image_dataset#imagefolder) из 🤗 Datasets для автоматического создания датасета из папки. Структура вашего каталога должна выглядеть так:

```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), которая создаёт столбец `image` с изображениями, закодированными в формате PIL.

Вы можете использовать параметры `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/v5.2.0/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)!

