Buckets:

hf-doc-build/doc / diffusers /main /id /training /t2i_adapters.md
mishig's picture
|
download
raw
10.3 kB
# T2I-Adapter
[T2I-Adapter](https://hf.co/papers/2302.08453) adalah model adapter ringan yang menyediakan gambar input kondisional tambahan (line art, canny, sketch, depth, pose) untuk mengontrol generasi gambar dengan lebih baik. Model ini mirip dengan ControlNet, tetapi ukurannya jauh lebih kecil (~77M parameter dan ukuran file ~300MB) karena hanya menyisipkan bobot ke dalam UNet alih-alih menyalin dan melatihnya.
T2I-Adapter hanya tersedia untuk pelatihan dengan model Stable Diffusion XL (SDXL).
Panduan ini akan membahas skrip pelatihan [train_t2i_adapter_sdxl.py](https://github.com/huggingface/diffusers/blob/main/examples/t2i_adapter/train_t2i_adapter_sdxl.py) untuk membantu Anda memahaminya, serta bagaimana Anda dapat menyesuaikannya untuk kebutuhan Anda sendiri.
Sebelum menjalankan skrip, pastikan Anda menginstal pustaka dari sumber:
```bash
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .
```
Lalu, navigasikan ke folder contoh yang berisi skrip pelatihan dan instal dependensi yang diperlukan untuk skrip yang Anda gunakan:
```bash
cd examples/t2i_adapter
pip install -r requirements.txt
```
> [!TIP]
> ๐Ÿค— Accelerate adalah pustaka untuk membantu Anda melatih pada beberapa GPU/TPU atau dengan presisi campuran. Pustaka ini akan mengonfigurasi pengaturan pelatihan Anda secara otomatis berdasarkan perangkat keras dan lingkungan Anda. Lihat [Tour singkat](https://huggingface.co/docs/accelerate/quicktour) ๐Ÿค— Accelerate untuk mempelajari lebih lanjut.
Inisialisasi lingkungan ๐Ÿค— Accelerate:
```bash
accelerate config
```
Untuk menyiapkan lingkungan ๐Ÿค— Accelerate default tanpa memilih konfigurasi apa pun:
```bash
accelerate config default
```
Atau jika lingkungan Anda tidak mendukung shell interaktif, seperti notebook, Anda dapat menggunakan:
```py
from accelerate.utils import write_basic_config
write_basic_config()
```
Terakhir, jika Anda ingin melatih model pada dataset Anda sendiri, lihat panduan [Membuat dataset untuk pelatihan](create_dataset) untuk mempelajari cara membuat dataset yang berfungsi dengan skrip pelatihan.
> [!TIP]
> Bagian-bagian berikut menyoroti bagian dari skrip pelatihan yang penting untuk dipahami agar Anda dapat memodifikasinya, namun tidak membahas setiap aspek skrip secara detail. Jika Anda tertarik untuk mempelajari lebih lanjut, silakan membaca [skrip](https://github.com/huggingface/diffusers/blob/main/examples/t2i_adapter/train_t2i_adapter_sdxl.py) tersebut dan beri tahu kami jika Anda memiliki pertanyaan atau kekhawatiran.
## Parameter skrip
Skrip pelatihan menyediakan banyak parameter untuk membantu Anda menyesuaikan eksekusi pelatihan Anda. Semua parameter dan deskripsinya dapat ditemukan di fungsi [`parse_args()`](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L233). Fungsi ini menyediakan nilai default untuk setiap parameter, seperti ukuran batch pelatihan dan learning rate, tetapi Anda juga dapat mengatur nilai Anda sendiri dalam perintah pelatihan jika Anda mau.
Sebagai contoh, untuk mengaktifkan akumulasi gradien, tambahkan parameter `--gradient_accumulation_steps` ke perintah pelatihan:
```bash
accelerate launch train_t2i_adapter_sdxl.py \
----gradient_accumulation_steps=4
```
Banyak parameter dasar dan penting dijelaskan dalam panduan pelatihan [Text-to-image](text2image#script-parameters), sehingga panduan ini hanya berfokus pada parameter T2I-Adapter yang relevan:
- `--pretrained_vae_model_name_or_path`: path ke VAE pretrained; VAE SDXL diketahui mengalami ketidakstabilan numerik, sehingga parameter ini memungkinkan Anda untuk menentukan [VAE](https://huggingface.co/madebyollin/sdxl-vae-fp16-fix) yang lebih baik
- `--crops_coords_top_left_h` dan `--crops_coords_top_left_w`: koordinat tinggi dan lebar yang akan disertakan dalam embedding koordinat crop SDXL
- `--conditioning_image_column`: kolom gambar kondisioning dalam dataset
- `--proportion_empty_prompts`: proporsi prompt gambar yang akan diganti dengan string kosong
## Skrip pelatihan
Sama seperti parameter skrip, penjelasan langkah demi langkah tentang skrip pelatihan tersedia di panduan pelatihan [Text-to-image](text2image#training-script). Sebagai gantinya, panduan ini membahas bagian-bagian skrip yang relevan dengan T2I-Adapter.
Skrip pelatihan dimulai dengan menyiapkan dataset. Ini mencakup [menokenisasi](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L674) prompt dan [menerapkan transformasi](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L714) pada gambar dan gambar kondisional.
```py
conditioning_image_transforms = transforms.Compose(
[
transforms.Resize(args.resolution, interpolation=transforms.InterpolationMode.BILINEAR),
transforms.CenterCrop(args.resolution),
transforms.ToTensor(),
]
)
```
Di dalam fungsi [`main()`](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L770), T2I-Adapter dimuat dari adapter pretrained atau diinisialisasi secara acak:
```py
if args.adapter_model_name_or_path:
logger.info("Loading existing adapter weights.")
t2iadapter = T2IAdapter.from_pretrained(args.adapter_model_name_or_path)
else:
logger.info("Initializing t2iadapter weights.")
t2iadapter = T2IAdapter(
in_channels=3,
channels=(320, 640, 1280, 1280),
num_res_blocks=2,
downscale_factor=16,
adapter_type="full_adapter_xl",
)
```
[optimizer](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L952) diinisialisasi untuk parameter T2I-Adapter:
```py
params_to_optimize = t2iadapter.parameters()
optimizer = optimizer_class(
params_to_optimize,
lr=args.learning_rate,
betas=(args.adam_beta1, args.adam_beta2),
weight_decay=args.adam_weight_decay,
eps=args.adam_epsilon,
)
```
Terakhir, dalam [training loop](https://github.com/huggingface/diffusers/blob/aab6de22c33cc01fb7bc81c0807d6109e2c998c9/examples/t2i_adapter/train_t2i_adapter_sdxl.py#L1086), gambar conditioning adapter dan embeddings teks diteruskan ke UNet untuk memprediksi residual noise:
```py
t2iadapter_image = batch["conditioning_pixel_values"].to(dtype=weight_dtype)
down_block_additional_residuals = t2iadapter(t2iadapter_image)
down_block_additional_residuals = [
sample.to(dtype=weight_dtype) for sample in down_block_additional_residuals
]
model_pred = unet(
inp_noisy_latents,
timesteps,
encoder_hidden_states=batch["prompt_ids"],
added_cond_kwargs=batch["unet_added_conditions"],
down_block_additional_residuals=down_block_additional_residuals,
).sample
```
Jika Anda ingin mempelajari lebih lanjut tentang cara kerja loop pelatihan, lihat tutorial [Memahami pipeline, model, dan scheduler](../using-diffusers/write_own_pipeline) yang menguraikan pola dasar dari proses denoising.
## Jalankan skrip
Sekarang Anda siap untuk menjalankan skrip pelatihan! ๐Ÿš€
Untuk pelatihan contoh ini, Anda akan menggunakan dataset [fusing/fill50k](https://huggingface.co/datasets/fusing/fill50k). Anda juga dapat membuat dan menggunakan dataset Anda sendiri jika diinginkan (lihat panduan [Membuat dataset untuk pelatihan](create_dataset)).
Setel variabel lingkungan `MODEL_DIR` ke id model di Hub atau path ke model lokal, dan `OUTPUT_DIR` ke lokasi tempat Anda ingin menyimpan model.
Unduh gambar-gambar berikut untuk mengondisikan pelatihan Anda dengan:
```bash
wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_1.png
wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_2.png
```
> [!TIP]
> Untuk memantau kemajuan pelatihan dengan Weights & Biases, tambahkan parameter `--report_to=wandb` ke perintah pelatihan. Anda juga perlu menambahkan `--validation_image`, `--validation_prompt`, dan `--validation_steps` ke perintah pelatihan untuk melacak hasil. Hal ini sangat berguna untuk debugging model dan melihat hasil antara.
```bash
export MODEL_DIR="stabilityai/stable-diffusion-xl-base-1.0"
export OUTPUT_DIR="path to save model"
accelerate launch train_t2i_adapter_sdxl.py \
--pretrained_model_name_or_path=$MODEL_DIR \
--output_dir=$OUTPUT_DIR \
--dataset_name=fusing/fill50k \
--mixed_precision="fp16" \
--resolution=1024 \
--learning_rate=1e-5 \
--max_train_steps=15000 \
--validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
--validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
--validation_steps=100 \
--train_batch_size=1 \
--gradient_accumulation_steps=4 \
--report_to="wandb" \
--seed=42 \
--push_to_hub
```
Setelah pelatihan selesai, Anda dapat menggunakan T2I-Adapter Anda untuk inferensi:
```py
from diffusers import StableDiffusionXLAdapterPipeline, T2IAdapter, EulerAncestralDiscreteSchedulerTest
from diffusers.utils import load_image
import torch
adapter = T2IAdapter.from_pretrained("path/to/adapter", dtype=torch.float16)
pipeline = StableDiffusionXLAdapterPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", adapter=adapter, dtype=torch.float16
)
pipeline.scheduler = EulerAncestralDiscreteSchedulerTest.from_config(pipe.scheduler.config)
pipeline.enable_xformers_memory_efficient_attention()
pipeline.enable_model_cpu_offload()
control_image = load_image("./conditioning_image_1.png")
prompt = "pale golden rod circle with old lace background"
generator = torch.manual_seed(0)
image = pipeline(
prompt, image=control_image, generator=generator
).images[0]
image.save("./output.png")
```
## Langkah selanjutnya
Selamat karena Anda telah melatih model T2I-Adapter! ๐ŸŽ‰ Untuk mempelajari lebih lanjut:
- Baca artikel blog [Efficient Controllable Generation for SDXL with T2I-Adapters](https://huggingface.co/blog/t2i-sdxl-adapters) untuk mempelajari lebih lanjut tentang hasil eksperimen dari tim T2I-Adapter.

Xet Storage Details

Size:
10.3 kB
ยท
Xet hash:
9c5a2d55d0efb1b991ebfdd2863776d99399c5cdb5470ed06009f12bba29afd7

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.