Buckets:

hf-doc-build/doc / diffusers /main /id /using-diffusers /conditional_image_generation.md
mishig's picture
|
download
raw
15.4 kB
# Teks-ke-gambar
Ketika Anda memikirkan model difusi, teks-ke-gambar biasanya menjadi salah satu hal pertama yang terlintas di benak. Teks-ke-gambar menghasilkan gambar dari deskripsi teks (misalnya, "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k") yang juga dikenal sebagai *prompt*.
Secara garis besar, model difusi menerima prompt dan beberapa noise awal yang acak, lalu secara iteratif menghilangkan noise tersebut untuk membangun sebuah gambar. Proses *denoising* dipandu oleh prompt, dan setelah proses denoising berakhir setelah sejumlah langkah waktu yang telah ditentukan, representasi gambar didekode menjadi gambar.
> [!TIP]
> Baca artikel blog [Bagaimana cara kerja Stable Diffusion?](https://huggingface.co/blog/stable_diffusion#how-does-stable-diffusion-work) untuk mempelajari lebih lanjut tentang cara kerja model difusi laten.
Anda dapat menghasilkan gambar dari prompt di 🤗 Diffusers dalam dua langkah:
1. Muat checkpoint ke dalam kelas [AutoPipelineForText2Image](/docs/diffusers/main/id/api/pipelines/auto_pipeline#diffusers.AutoPipelineForText2Image), yang secara otomatis mendeteksi kelas pipeline yang tepat untuk digunakan berdasarkan checkpoint:
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16"
).to("cuda") # or "mps", "xpu", "cpu"
```
2. Lewati prompt ke pipeline untuk menghasilkan gambar:
```py
image = pipeline(
"stained glass of darth vader, backlight, centered composition, masterpiece, photorealistic, 8k"
).images[0]
image
```
## Model populer
Model text-to-image yang paling umum adalah [Stable Diffusion v1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5), [Stable Diffusion XL (SDXL)](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0), dan [Kandinsky 2.2](https://huggingface.co/kandinsky-community/kandinsky-2-2-decoder). Ada juga model ControlNet atau adapter yang dapat digunakan bersama model text-to-image untuk kontrol yang lebih langsung dalam menghasilkan gambar. Hasil dari masing-masing model sedikit berbeda karena arsitektur dan proses pelatihannya, tetapi terlepas dari model mana pun yang Anda pilih, cara penggunaannya lebih kurang sama. Mari kita gunakan prompt yang sama untuk setiap model dan bandingkan hasilnya.
### Stable Diffusion v1.5
[Stable Diffusion v1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) adalah model difusi laten yang diinisialisasi dari [Stable Diffusion v1-4](https://huggingface.co/CompVis/stable-diffusion-v1-4), dan ditala ulang selama 595K langkah pada gambar 512x512 dari dataset LAION-Aesthetics V2. Anda dapat menggunakan model ini seperti:
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16"
).to("cuda") # or "mps", "xpu", "cpu"
generator = torch.Generator("cuda").manual_seed(31)
image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", generator=generator).images[0]
image
```
### Stable Diffusion XL
SDXL adalah versi yang jauh lebih besar dari model Stable Diffusion sebelumnya, dan melibatkan proses model dua tahap yang menambahkan lebih banyak detail ke gambar. Model ini juga mencakup beberapa *micro-conditionings* tambahan untuk menghasilkan gambar berkualitas tinggi dengan subjek yang terpusat. Lihat panduan [SDXL](../api/pipelines/stable_diffusion/stable_diffusion_xl) yang lebih komprehensif untuk mempelajari lebih lanjut tentang cara menggunakannya. Secara umum, Anda dapat menggunakan SDXL seperti:
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16"
).to("cuda") # or "mps", "xpu", "cpu"
generator = torch.Generator("cuda").manual_seed(31)
image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", generator=generator).images[0]
image
```
### Kandinsky 2.2
Model Kandinsky sedikit berbeda dari model Stable Diffusion karena juga menggunakan model prior gambar untuk membuat embedding yang digunakan untuk menyelaraskan teks dan gambar dengan lebih baik dalam model difusi.
Cara termudah untuk menggunakan Kandinsky 2.2 adalah:
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
generator = torch.Generator("cuda").manual_seed(31)
image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", generator=generator).images[0]
image
```
### ControlNet
Model ControlNet adalah model atau adapter tambahan yang dilatih ulang (finetuned) di atas model teks-ke-gambar, seperti [Stable Diffusion v1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5). Penggunaan model ControlNet dikombinasikan dengan model teks-ke-gambar menawarkan berbagai opsi untuk kontrol yang lebih eksplisit terhadap cara menghasilkan gambar. Dengan ControlNet, Anda menambahkan gambar input kondisional tambahan ke model. Misalnya, jika Anda menyediakan gambar pose manusia (biasanya direpresentasikan sebagai beberapa titik kunci yang terhubung menjadi kerangka) sebagai input kondisional, model akan menghasilkan gambar yang mengikuti pose dari gambar tersebut. Lihat panduan [ControlNet](controlnet) yang lebih mendalam untuk mempelajari lebih lanjut tentang input kondisional lainnya dan cara menggunakannya.
Pada contoh ini, mari kita kondisikan ControlNet dengan gambar estimasi pose manusia. Muat model ControlNet yang telah dilatih sebelumnya pada estimasi pose manusia:
```py
from diffusers import ControlNetModel, AutoPipelineForText2Image
from diffusers.utils import load_image
import torch
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/control_v11p_sd15_openpose", dtype=torch.float16, variant="fp16"
).to("cuda") # or "mps", "xpu", "cpu"
pose_image = load_image("https://huggingface.co/lllyasviel/control_v11p_sd15_openpose/resolve/main/images/control.png")
```
Lewatkan `controlnet` ke [AutoPipelineForText2Image](/docs/diffusers/main/id/api/pipelines/auto_pipeline#diffusers.AutoPipelineForText2Image), dan berikan prompt serta gambar estimasi pose:
```py
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", controlnet=controlnet, dtype=torch.float16, variant="fp16"
).to("cuda") # or "mps", "xpu", "cpu"
generator = torch.Generator("cuda").manual_seed(31)
image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", image=pose_image, generator=generator).images[0]
image
```
Stable Diffusion v1.5
Stable Diffusion XL
Kandinsky 2.2
ControlNet (kondisi pose)
## Konfigurasi parameter pipeline
Ada sejumlah parameter yang dapat dikonfigurasi dalam pipeline yang memengaruhi cara sebuah gambar dihasilkan. Anda dapat mengubah ukuran output gambar, menentukan prompt negatif untuk meningkatkan kualitas gambar, dan lainnya. Bagian ini membahas lebih dalam cara menggunakan parameter-parameter ini.
### Tinggi dan lebar
Parameter `height` dan `width` mengontrol tinggi dan lebar (dalam piksel) dari gambar yang dihasilkan. Secara default, model Stable Diffusion v1.5 menghasilkan gambar berukuran 512x512, tetapi Anda dapat mengubahnya menjadi ukuran apa pun yang merupakan kelipatan dari 8. Sebagai contoh, untuk membuat gambar berbentuk persegi panjang:
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16"
).to("cuda") # or "mps", "xpu", "cpu"
image = pipeline(
"Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", height=768, width=512
).images[0]
image
```
> [!WARNING]
> Model lain mungkin memiliki ukuran gambar default yang berbeda tergantung pada ukuran gambar dalam dataset pelatihan. Misalnya, ukuran gambar default SDXL adalah 1024x1024 dan penggunaan nilai `height` dan `width` yang lebih rendah dapat menghasilkan gambar dengan kualitas yang lebih rendah. Pastikan Anda memeriksa referensi API model terlebih dahulu!
### Skala panduan
Parameter `guidance_scale` memengaruhi seberapa besar prompt memengaruhi generasi gambar. Nilai yang lebih rendah memberikan "kreativitas" pada model untuk menghasilkan gambar yang lebih longgar kaitannya dengan prompt. Nilai `guidance_scale` yang lebih tinggi mendorong model untuk mengikuti prompt dengan lebih ketat, dan jika nilai ini terlalu tinggi, Anda mungkin akan mengamati beberapa artefak pada gambar yang dihasilkan.
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
image = pipeline(
"Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", guidance_scale=3.5
).images[0]
image
```
guidance_scale = 2.5
guidance_scale = 7.5
guidance_scale = 10.5
### Prompt negatif
Sama seperti prompt yang memandu proses generasi, *negative prompt* mengarahkan model menjauh dari hal-hal yang tidak Anda inginkan untuk dihasilkan. Hal ini umum digunakan untuk meningkatkan kualitas gambar secara keseluruhan dengan menghilangkan fitur gambar yang buruk atau jelek, seperti "low resolution" atau "bad details". Anda juga dapat menggunakan negative prompt untuk menghapus atau memodifikasi konten dan gaya sebuah gambar.
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
image = pipeline(
prompt="Astronaut in a jungle, cold color palette, muted colors, detailed, 8k",
negative_prompt="ugly, deformed, disfigured, poor details, bad anatomy",
).images[0]
image
```
negative_prompt = "ugly, deformed, disfigured, poor details, bad anatomy"
negative_prompt = "astronaut"
### Generator
Objek [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html#generator) memungkinkan reproduktibilitas dalam sebuah pipeline dengan mengatur seed manual. Anda dapat menggunakan `Generator` untuk menghasilkan batch gambar dan secara iteratif meningkatkan kualitas gambar yang dihasilkan dari seed, seperti yang dijelaskan dalam panduan [Meningkatkan kualitas gambar dengan generasi deterministik](reusing_seeds).
Anda dapat mengatur seed dan `Generator` seperti yang ditunjukkan di bawah ini. Membuat gambar dengan `Generator` harus mengembalikan hasil yang sama setiap kali, bukan secara acak menghasilkan gambar baru.
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
generator = torch.Generator(device="cuda").manual_seed(30)
image = pipeline(
"Astronaut in a jungle, cold color palette, muted colors, detailed, 8k",
generator=generator,
).images[0]
image
```
## Kontrol generasi gambar
Ada beberapa cara untuk memberikan kendali lebih besar terhadap cara sebuah gambar dihasilkan di luar mengonfigurasi parameter pipeline, seperti penimbangan prompt dan model ControlNet.
### Penimbangan prompt
Prompt weighting adalah teknik untuk meningkatkan atau menurunkan pentingnya konsep dalam prompt guna menekankan atau meminimalkan fitur tertentu dalam gambar. Kami merekomendasikan penggunaan pustaka [Compel](https://github.com/damian0815/compel) untuk membantu Anda menghasilkan prompt embeddings yang berbobot.
> [!TIP]
> Pelajari cara membuat prompt embeddings di panduan [Prompt weighting](weighted_prompts). Contoh ini berfokus pada cara menggunakan prompt embeddings di pipeline.
Setelah Anda membuat embeddings, Anda dapat meneruskannya ke parameter `prompt_embeds` (dan `negative_prompt_embeds` jika Anda menggunakan negative prompt) di pipeline.
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
image = pipeline(
prompt_embeds=prompt_embeds, # generated from Compel
negative_prompt_embeds=negative_prompt_embeds, # generated from Compel
).images[0]
```
### ControlNet
Seperti yang Anda lihat di bagian [ControlNet](#controlnet), model-model ini menawarkan cara yang lebih fleksibel dan akurat untuk menghasilkan gambar dengan memasukkan input gambar kondisional tambahan. Setiap model ControlNet dilatih sebelumnya pada jenis gambar kondisional tertentu untuk menghasilkan gambar baru yang menyerupainya. Misalnya, jika Anda mengambil model ControlNet yang dilatih sebelumnya pada peta kedalaman, Anda dapat memberikan peta kedalaman sebagai input kondisional dan model akan menghasilkan gambar yang mempertahankan informasi spasial di dalamnya. Ini lebih cepat dan mudah daripada menentukan informasi kedalaman dalam prompt. Anda bahkan dapat menggabungkan beberapa input kondisional dengan [Multi-ControlNet](controlnet#multi-controlnet)!
Terdapat banyak jenis input kondisional yang dapat Anda gunakan, dan 🤗 Diffusers mendukung ControlNet untuk model Stable Diffusion dan SDXL. Lihat panduan [ControlNet](controlnet) yang lebih komprehensif untuk mempelajari cara menggunakan model-model ini.
## Optimalkan
Model difusi berukuran besar, dan sifat iteratif dari proses denoising gambar sangat mahal secara komputasi dan intensif. Namun, hal ini tidak berarti Anda memerlukan akses ke GPU yang sangat kuat - atau bahkan banyak GPU - untuk menggunakannya. Terdapat banyak teknik optimasi untuk menjalankan model difusi pada sumber daya konsumen dan tier gratis. Misalnya, Anda dapat memuat bobot model dalam presisi setengah (half-precision) untuk menghemat memori GPU dan meningkatkan kecepatan, atau memindahkan seluruh model ke GPU untuk menghemat lebih banyak memori.
PyTorch 2.0 juga mendukung mekanisme perhatian yang lebih hemat memori yang disebut [*scaled dot product attention*](../optimization/fp16#scaled-dot-product-attention) yang secara otomatis diaktifkan jika Anda menggunakan PyTorch 2.0. Anda dapat menggabungkan ini dengan [`torch.compile`](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html) untuk mempercepat kode Anda lebih lanjut:
```py
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16").to("cuda") # or "mps", "xpu", "cpu"
pipeline.unet = torch.compile(pipeline.unet, mode="reduce-overhead", fullgraph=True)
```
Untuk tips lebih lanjut tentang cara mengoptimalkan kode Anda untuk menghemat memori dan mempercepat inferensi, lihat [Optimize and scale](../optimization/overview#optimization-techniques).

Xet Storage Details

Size:
15.4 kB
·
Xet hash:
1c89a43a93b6f7642e8cab44a112f69807845b30c9a0ac42c353479ee35bffd0

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