2022-06-15 08:51:37 -06:00
## Training examples
2022-07-21 13:46:15 -06:00
Creating a training image set is [described in a different document ](https://huggingface.co/docs/datasets/image_process#image-datasets ).
2022-07-21 03:07:21 -06:00
### Installing the dependencies
2022-09-16 07:36:51 -06:00
Before running the scripts, make sure to install the library's training dependencies:
2022-07-21 03:07:21 -06:00
2022-12-06 06:36:50 -07:00
**Important**
To make sure you can successfully run the latest versions of the example scripts, we highly recommend **installing from source** and keeping the install up to date as we update the example scripts frequently and install some example-specific requirements. To do this, execute the following steps in a new virtual environment:
2022-07-21 03:07:21 -06:00
```bash
2022-12-06 06:36:50 -07:00
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .
2022-07-21 03:07:21 -06:00
```
2022-12-06 06:36:50 -07:00
Then cd in the example folder and run
```bash
pip install -r requirements.txt
```
2022-07-22 05:48:26 -06:00
And initialize an [🤗Accelerate ](https://github.com/huggingface/accelerate/ ) environment with:
```bash
accelerate config
```
2022-06-21 02:38:34 -06:00
### Unconditional Flowers
2022-06-15 08:51:37 -06:00
The command to train a DDPM UNet model on the Oxford Flowers dataset:
```bash
2022-07-20 11:51:23 -06:00
accelerate launch train_unconditional.py \
2022-08-03 07:25:00 -06:00
--dataset_name="huggan/flowers-102-categories" \
2023-02-07 03:58:31 -07:00
--resolution=64 --center_crop --random_flip \
2022-07-20 11:51:23 -06:00
--output_dir="ddpm-ema-flowers-64" \
--train_batch_size=16 \
2022-06-15 08:51:37 -06:00
--num_epochs=100 \
--gradient_accumulation_steps=1 \
2023-01-19 03:35:55 -07:00
--use_ema \
2022-07-20 11:51:23 -06:00
--learning_rate=1e-4 \
--lr_warmup_steps=500 \
--mixed_precision=no \
--push_to_hub
2022-06-15 08:51:37 -06:00
```
2022-07-21 09:11:36 -06:00
An example trained model: https://huggingface.co/anton-l/ddpm-ema-flowers-64
2022-06-15 08:51:37 -06:00
2022-06-21 02:38:34 -06:00
A full training run takes 2 hours on 4xV100 GPUs.
2022-06-15 08:51:37 -06:00
2022-07-21 09:11:36 -06:00
< img src = "https://user-images.githubusercontent.com/26864830/180248660-a0b143d0-b89a-42c5-8656-2ebf6ece7e52.png" width = "700" / >
2022-06-15 08:51:37 -06:00
2022-06-21 02:38:34 -06:00
### Unconditional Pokemon
2022-06-15 08:51:37 -06:00
The command to train a DDPM UNet model on the Pokemon dataset:
```bash
2022-07-20 11:51:23 -06:00
accelerate launch train_unconditional.py \
2022-08-03 07:25:00 -06:00
--dataset_name="huggan/pokemon" \
2023-02-07 03:58:31 -07:00
--resolution=64 --center_crop --random_flip \
2022-07-20 11:51:23 -06:00
--output_dir="ddpm-ema-pokemon-64" \
--train_batch_size=16 \
2022-06-15 08:51:37 -06:00
--num_epochs=100 \
--gradient_accumulation_steps=1 \
2023-01-19 03:35:55 -07:00
--use_ema \
2022-07-20 11:51:23 -06:00
--learning_rate=1e-4 \
--lr_warmup_steps=500 \
--mixed_precision=no \
--push_to_hub
2022-06-15 08:51:37 -06:00
```
2022-07-21 09:11:36 -06:00
An example trained model: https://huggingface.co/anton-l/ddpm-ema-pokemon-64
2022-06-15 08:51:37 -06:00
2022-06-21 02:38:34 -06:00
A full training run takes 2 hours on 4xV100 GPUs.
2022-06-15 08:51:37 -06:00
2022-07-21 09:11:36 -06:00
< img src = "https://user-images.githubusercontent.com/26864830/180248200-928953b4-db38-48db-b0c6-8b740fe6786f.png" width = "700" / >
2022-08-03 07:25:00 -06:00
### Using your own data
To use your own dataset, there are 2 ways:
- you can either provide your own folder as `--train_data_dir`
- or you can upload your dataset to the hub (possibly as a private repo, if you prefer so), and simply pass the `--dataset_name` argument.
Below, we explain both in more detail.
#### Provide the dataset as a folder
If you provide your own folders with images, the script expects the following directory structure:
```bash
data_dir/xxx.png
data_dir/xxy.png
data_dir/[...]/xxz.png
```
In other words, the script will take care of gathering all images inside the folder. You can then run the script like this:
```bash
accelerate launch train_unconditional.py \
--train_data_dir < path-to-train-directory > \
< other-arguments >
```
Internally, the script will use the [`ImageFolder` ](https://huggingface.co/docs/datasets/v2.0.0/en/image_process#imagefolder ) feature which will automatically turn the folders into 🤗 Dataset objects.
#### Upload your data to the hub, as a (possibly private) repo
It's very easy (and convenient) to upload your image dataset to the hub using the [`ImageFolder` ](https://huggingface.co/docs/datasets/v2.0.0/en/image_process#imagefolder ) feature available in 🤗 Datasets. Simply do the following:
```python
from datasets import load_dataset
# example 1: local folder
dataset = load_dataset("imagefolder", data_dir="path_to_your_folder")
2022-09-16 07:36:51 -06:00
# example 2: local files (supported formats are tar, gzip, zip, xz, rar, zstd)
2022-08-03 07:25:00 -06:00
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"]})
```
`ImageFolder` will create an `image` column containing the PIL-encoded images.
Next, push it to the hub!
```python
# assuming you have ran the huggingface-cli 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)
```
and that's it! You can now train your model by simply setting the `--dataset_name` argument to the name of your dataset on the hub.
2023-02-07 03:58:31 -07:00
More on this can also be found in [this blog post ](https://huggingface.co/blog/image-search-datasets ).