Buckets:
| # InstructPix2Pix | |
| [InstructPix2Pix](https://hf.co/papers/2211.09800) adalah model Stable Diffusion yang dilatih untuk mengedit gambar berdasarkan instruksi dari manusia. Misalnya, prompt Anda bisa berupa "ubah awan menjadi hujan" dan model akan mengedit gambar input sesuai dengan itu. Model ini dikondisikan pada prompt teks (atau instruksi pengeditan) dan gambar input. | |
| Panduan ini akan membahas skrip pelatihan [train_instruct_pix2pix.py](https://github.com/huggingface/diffusers/blob/main/examples/instruct_pix2pix/train_instruct_pix2pix.py) untuk membantu Anda memahaminya, serta bagaimana Anda dapat menyesuaikannya untuk kasus penggunaan 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/instruct_pix2pix | |
| 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/instruct_pix2pix/train_instruct_pix2pix.py) tersebut dan beri tahu kami jika Anda memiliki pertanyaan atau kekhawatiran. | |
| ## Parameter skrip | |
| Skrip pelatihan memiliki 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/64603389da01082055a901f2883c4810d1144edb/examples/instruct_pix2pix/train_instruct_pix2pix.py#L65). Nilai default disediakan untuk sebagian besar parameter yang bekerja cukup baik, tetapi Anda juga dapat mengatur nilai Anda sendiri dalam perintah pelatihan jika Anda mau. | |
| Sebagai contoh, untuk meningkatkan resolusi gambar input: | |
| ```bash | |
| accelerate launch train_instruct_pix2pix.py \ | |
| --resolution=512 \ | |
| ``` | |
| Banyak parameter dasar dan penting dijelaskan dalam panduan pelatihan [Text-to-image](text2image#script-parameters), sehingga panduan ini hanya berfokus pada parameter yang relevan untuk InstructPix2Pix: | |
| - `--original_image_column`: gambar asli sebelum pengeditan dilakukan | |
| - `--edited_image_column`: gambar setelah pengeditan dilakukan | |
| - `--edit_prompt_column`: instruksi untuk mengedit gambar | |
| - `--conditioning_dropout_prob`: probabilitas dropout untuk gambar yang diedit dan prompt edit selama pelatihan, yang memungkinkan classifier-free guidance (CFG) untuk satu atau kedua input kondisional | |
| ## Skrip pelatihan | |
| Kode pra-pemrosesan dataset dan loop pelatihan dapat ditemukan di fungsi [`main()`](https://github.com/huggingface/diffusers/blob/64603389da01082055a901f2883c4810d1144edb/examples/instruct_pix2pix/train_instruct_pix2pix.py#L374). Di sinilah Anda akan melakukan perubahan pada skrip pelatihan untuk menyesuaikannya dengan kasus penggunaan Anda sendiri. | |
| 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 InstructPix2Pix. | |
| Skrip dimulai dengan memodifikasi [jumlah saluran input](https://github.com/huggingface/diffusers/blob/64603389da01082055a901f2883c4810d1144edb/examples/instruct_pix2pix/train_instruct_pix2pix.py#L445) pada lapisan konvolusional pertama dari UNet untuk mengakomodasi gambar kondisional tambahan dari InstructPix2Pix: | |
| ```py | |
| in_channels = 8 | |
| out_channels = unet.conv_in.out_channels | |
| unet.register_to_config(in_channels=in_channels) | |
| with torch.no_grad(): | |
| new_conv_in = nn.Conv2d( | |
| in_channels, out_channels, unet.conv_in.kernel_size, unet.conv_in.stride, unet.conv_in.padding | |
| ) | |
| new_conv_in.weight.zero_() | |
| new_conv_in.weight[:, :4, :, :].copy_(unet.conv_in.weight) | |
| unet.conv_in = new_conv_in | |
| ``` | |
| Parameter UNet ini [diperbarui](https://github.com/huggingface/diffusers/blob/64603389da01082055a901f2883c4810d1144edb/examples/instruct_pix2pix/train_instruct_pix2pix.py#L545C1-L551C6) oleh optimizer: | |
| ```py | |
| optimizer = optimizer_cls( | |
| unet.parameters(), | |
| lr=args.learning_rate, | |
| betas=(args.adam_beta1, args.adam_beta2), | |
| weight_decay=args.adam_weight_decay, | |
| eps=args.adam_epsilon, | |
| ) | |
| ``` | |
| Selanjutnya, gambar yang diedit dan instruksi editnya [di-praproses](https://github.com/huggingface/diffusers/blob/64603389da01082055a901f2883c4810d1144edb/examples/instruct_pix2pix/train_instruct_pix2pix.py#L624) dan [ditokenisasi](https://github.com/huggingface/diffusers/blob/64603389da01082055a901f2883c4810d1144edb/examples/instruct_pix2pix/train_instruct_pix2pix.py#L610C24-L610C24). Penting untuk menerapkan transformasi gambar yang sama pada gambar asli dan gambar yang diedit. | |
| ```py | |
| def preprocess_train(examples): | |
| preprocessed_images = preprocess_images(examples) | |
| original_images, edited_images = preprocessed_images.chunk(2) | |
| original_images = original_images.reshape(-1, 3, args.resolution, args.resolution) | |
| edited_images = edited_images.reshape(-1, 3, args.resolution, args.resolution) | |
| examples["original_pixel_values"] = original_images | |
| examples["edited_pixel_values"] = edited_images | |
| captions = list(examples[edit_prompt_column]) | |
| examples["input_ids"] = tokenize_captions(captions) | |
| return examples | |
| ``` | |
| Terakhir, dalam [loop pelatihan](https://github.com/huggingface/diffusers/blob/64603389da01082055a901f2883c4810d1144edb/examples/instruct_pix2pix/train_instruct_pix2pix.py#L730), proses dimulai dengan mengkodekan gambar yang telah diedit ke ruang laten: | |
| ```py | |
| latents = vae.encode(batch["edited_pixel_values"].to(weight_dtype)).latent_dist.sample() | |
| latents = latents * vae.config.scaling_factor | |
| ``` | |
| Kemudian, skrip menerapkan dropout pada embedding gambar asli dan instruksi edit untuk mendukung CFG. Hal ini memungkinkan model untuk memodulasi pengaruh instruksi edit dan gambar asli terhadap gambar yang diedit. | |
| ```py | |
| encoder_hidden_states = text_encoder(batch["input_ids"])[0] | |
| original_image_embeds = vae.encode(batch["original_pixel_values"].to(weight_dtype)).latent_dist.mode() | |
| if args.conditioning_dropout_prob is not None: | |
| random_p = torch.rand(bsz, device=latents.device, generator=generator) | |
| prompt_mask = random_p < 2 * args.conditioning_dropout_prob | |
| prompt_mask = prompt_mask.reshape(bsz, 1, 1) | |
| null_conditioning = text_encoder(tokenize_captions([""]).to(accelerator.device))[0] | |
| encoder_hidden_states = torch.where(prompt_mask, null_conditioning, encoder_hidden_states) | |
| image_mask_dtype = original_image_embeds.dtype | |
| image_mask = 1 - ( | |
| (random_p >= args.conditioning_dropout_prob).to(image_mask_dtype) | |
| * (random_p < 3 * args.conditioning_dropout_prob).to(image_mask_dtype) | |
| ) | |
| image_mask = image_mask.reshape(bsz, 1, 1, 1) | |
| original_image_embeds = image_mask * original_image_embeds | |
| ``` | |
| Itu sudah hampir selesai! Selain perbedaan yang dijelaskan di sini, bagian lain dari skrip sangat mirip dengan skrip pelatihan [Text-to-image](text2image#training-script), jadi silakan periksa untuk detail lebih lanjut. Jika Anda ingin mempelajari lebih lanjut tentang cara kerja loop pelatihan, lihat tutorial [Understanding pipelines, models and schedulers](../using-diffusers/write_own_pipeline) yang menguraikan pola dasar dari proses denoising. | |
| ## Jalankan skrip | |
| Setelah Anda puas dengan perubahan pada skrip Anda atau jika Anda setuju dengan konfigurasi default, Anda siap untuk meluncurkan skrip pelatihan! 🚀 | |
| Panduan ini menggunakan dataset [fusing/instructpix2pix-1000-samples](https://huggingface.co/datasets/fusing/instructpix2pix-1000-samples), yang merupakan versi lebih kecil dari [dataset asli](https://huggingface.co/datasets/timbrooks/instructpix2pix-clip-filtered). Anda juga dapat membuat dan menggunakan dataset Anda sendiri jika diinginkan (lihat panduan [Membuat dataset untuk pelatihan](create_dataset)). | |
| Setel variabel lingkungan `MODEL_NAME` ke nama model (bisa berupa id model di Hub atau path ke model lokal), dan `DATASET_ID` ke nama dataset di Hub. Skrip ini membuat dan menyimpan semua komponen (feature extractor, scheduler, text encoder, UNet, dll.) ke subfolder di repositori Anda. | |
| > [!TIP] | |
| > Untuk hasil yang lebih baik, coba jalankan pelatihan lebih lama dengan dataset yang lebih besar. Kami hanya menguji skrip pelatihan ini pada dataset berskala kecil. | |
| > | |
| > | |
| > | |
| > Untuk memantau kemajuan pelatihan dengan Weights and Biases, tambahkan parameter `--report_to=wandb` ke perintah pelatihan dan tentukan gambar validasi dengan `--val_image_url` serta prompt validasi dengan `--validation_prompt`. Hal ini dapat sangat berguna untuk debugging model. | |
| Jika Anda melatih pada lebih dari satu GPU, tambahkan parameter `--multi_gpu` ke perintah `accelerate launch`. | |
| ```bash | |
| accelerate launch --mixed_precision="fp16" train_instruct_pix2pix.py \ | |
| --pretrained_model_name_or_path=$MODEL_NAME \ | |
| --dataset_name=$DATASET_ID \ | |
| --enable_xformers_memory_efficient_attention \ | |
| --resolution=256 \ | |
| --random_flip \ | |
| --train_batch_size=4 \ | |
| --gradient_accumulation_steps=4 \ | |
| --gradient_checkpointing \ | |
| --max_train_steps=15000 \ | |
| --checkpointing_steps=5000 \ | |
| --checkpoints_total_limit=1 \ | |
| --learning_rate=5e-05 \ | |
| --max_grad_norm=1 \ | |
| --lr_warmup_steps=0 \ | |
| --conditioning_dropout_prob=0.05 \ | |
| --mixed_precision=fp16 \ | |
| --seed=42 \ | |
| --push_to_hub | |
| ``` | |
| Setelah pelatihan selesai, Anda dapat menggunakan InstructPix2Pix baru Anda untuk inferensi: | |
| ```py | |
| import PIL | |
| import requests | |
| import torch | |
| from diffusers import StableDiffusionInstructPix2PixPipeline | |
| from diffusers.utils import load_image | |
| pipeline = StableDiffusionInstructPix2PixPipeline.from_pretrained("your_cool_model", dtype=torch.float16).to("cuda") # or "mps", "xpu", "cpu" | |
| generator = torch.Generator("cuda").manual_seed(0) | |
| image = load_image("https://huggingface.co/datasets/sayakpaul/sample-datasets/resolve/main/test_pix2pix_4.png") | |
| prompt = "add some ducks to the lake" | |
| num_inference_steps = 20 | |
| image_guidance_scale = 1.5 | |
| guidance_scale = 10 | |
| edited_image = pipeline( | |
| prompt, | |
| image=image, | |
| num_inference_steps=num_inference_steps, | |
| image_guidance_scale=image_guidance_scale, | |
| guidance_scale=guidance_scale, | |
| generator=generator, | |
| ).images[0] | |
| edited_image.save("edited_image.png") | |
| ``` | |
| Anda sebaiknya bereksperimen dengan nilai `num_inference_steps`, `image_guidance_scale`, dan `guidance_scale` yang berbeda untuk melihat bagaimana mereka memengaruhi kecepatan dan kualitas inferensi. Parameter guidance scale sangat berdampak karena mereka mengontrol seberapa besar gambar asli dan instruksi pengeditan memengaruhi gambar yang diedit. | |
| ## Stable Diffusion XL | |
| Stable Diffusion XL (SDXL) adalah model teks-ke-gambar yang kuat yang menghasilkan gambar resolusi tinggi, dan menambahkan text-encoder kedua ke arsitekturnya. Gunakan skrip [`train_instruct_pix2pix_sdxl.py`](https://github.com/huggingface/diffusers/blob/main/examples/instruct_pix2pix/train_instruct_pix2pix_sdxl.py) untuk melatih model SDXL agar mengikuti instruksi pengeditan gambar. | |
| Skrip pelatihan SDXL dibahas lebih detail dalam panduan [pelatihan SDXL](sdxl). | |
| ## Langkah selanjutnya | |
| Selamat karena Anda telah melatih model InstructPix2Pix Anda sendiri! 🥳 Untuk mempelajari lebih lanjut tentang model tersebut, mungkin akan membantu jika Anda: | |
| - Baca artikel blog [Instruction-tuning Stable Diffusion with InstructPix2Pix](https://huggingface.co/blog/instruction-tuning-sd) untuk mempelajari lebih lanjut tentang beberapa eksperimen yang telah kami lakukan dengan InstructPix2Pix, persiapan dataset, dan hasil untuk berbagai instruksi. | |
Xet Storage Details
- Size:
- 12.8 kB
- Xet hash:
- c621401612298e274753c45495ee6d98efb14534a53ab0146f2f07babac1642c
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.