Diffusers documentation
Stable Diffusion XL
Stable Diffusion XL
Stable Diffusion XL (SDXL) diusulkan dalam SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis oleh Dustin Podell, Zion English, Kyle Lacey, Andreas Blattmann, Tim Dockhorn, Jonas Müller, Joe Penna, dan Robin Rombach.
Abstrak dari makalah tersebut adalah:
Kami memperkenalkan SDXL, model difusi laten untuk sintesis teks-ke-gambar. Dibandingkan dengan versi Stable Diffusion sebelumnya, SDXL memanfaatkan tulang punggung UNet yang tiga kali lebih besar: peningkatan parameter model terutama disebabkan oleh lebih banyak blok perhatian dan konteks cross-attention yang lebih besar karena SDXL menggunakan pengkode teks kedua. Kami merancang beberapa skema kondisioning baru dan melatih SDXL pada beberapa rasio aspek. Kami juga memperkenalkan model penyempurnaan yang digunakan untuk meningkatkan kesetiaan visual dari sampel yang dihasilkan oleh SDXL menggunakan teknik gambar-ke-gambar pasca-pemrosesan. Kami menunjukkan bahwa SDXL menunjukkan peningkatan kinerja yang drastis dibandingkan versi Stable Diffusion sebelumnya dan mencapai hasil yang kompetitif dengan generator gambar state-of-the-art black-box.
Tips
- Menggunakan SDXL dengan scheduler DPM++ untuk kurang dari 50 langkah diketahui dapat menghasilkan artefak visual karena solver menjadi tidak stabil secara numerik. Untuk memperbaiki masalah ini, lihat PR ini yang merekomendasikan untuk solver ODE/SDE:
- set
use_karras_sigmas=Trueataulu_lambdas=Trueuntuk meningkatkan kualitas gambar - set
euler_at_final=Truejika Anda menggunakan solver dengan ukuran langkah seragam (DPM++2M atau DPM++2M SDE)
- set
- Sebagian besar checkpoint SDXL bekerja paling baik dengan ukuran gambar 1024x1024. Ukuran gambar 768x768 dan 512x512 juga didukung, tetapi hasilnya tidak sebaik itu. Ukuran di bawah 512x512 tidak disarankan dan kemungkinan besar tidak akan berfungsi untuk checkpoint default seperti stabilityai/stable-diffusion-xl-base-1.0.
- SDXL dapat meneruskan prompt yang berbeda untuk masing-masing text encoder yang digunakan dalam pelatihannya. Kita bahkan dapat meneruskan bagian-bagian yang berbeda dari prompt yang sama ke text encoder.
- Gambar keluaran SDXL dapat ditingkatkan dengan memanfaatkan model refiner dalam pengaturan image-to-image.
- SDXL menyediakan
negative_original_size,negative_crops_coords_top_left, dannegative_target_sizeuntuk mengondisikan model secara negatif terhadap parameter resolusi dan pemotongan gambar.
Lihat organisasi Stability AI di Hub untuk checkpoint model base dan refiner resmi!
Pastikan Anda telah menginstal pustaka berikut.
# uncomment to install the necessary libraries in Colab
#!pip install -q diffusers transformers accelerate invisible-watermark>=0.2.0Kami merekomendasikan untuk menginstal pustaka invisible-watermark untuk membantu mengidentifikasi gambar yang dihasilkan. Jika pustaka invisible-watermark terinstal, pustaka tersebut digunakan secara default. Untuk menonaktifkan watermarker:
pipeline = StableDiffusionXLPipeline.from_pretrained(..., add_watermarker=False)
Muat checkpoint model
Bobot model mungkin disimpan di subfolder terpisah di Hub atau secara lokal, dalam hal ini, Anda harus menggunakan metode from_pretrained():
from diffusers import StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline
import torch
pipeline = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
refiner = StableDiffusionXLImg2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0", dtype=torch.float16, use_safetensors=True, variant="fp16"
).to("cuda")Anda juga dapat menggunakan metode from_single_file() untuk memuat checkpoint model yang disimpan dalam format file tunggal (.ckpt atau .safetensors) dari Hub atau secara lokal:
from diffusers import StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline
import torch
pipeline = StableDiffusionXLPipeline.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors",
dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
refiner = StableDiffusionXLImg2ImgPipeline.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/blob/main/sd_xl_refiner_1.0.safetensors", dtype=torch.float16
).to("cuda")Teks-ke-gambar
Untuk text-to-image, berikan prompt teks. Secara default, SDXL menghasilkan gambar 1024x1024 untuk hasil terbaik. Anda dapat mencoba mengatur parameter height dan width menjadi 768x768 atau 512x512, tetapi ukuran di bawah 512x512 kemungkinan besar tidak akan berfungsi.
from diffusers import AutoPipelineForText2Image
import torch
pipeline_text2image = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipeline_text2image(prompt=prompt).images[0]
image
Gambar-ke-gambar
Untuk image-to-image, SDXL bekerja sangat baik dengan ukuran gambar antara 768x768 dan 1024x1024. Berikan gambar awal, dan prompt teks untuk mengondisikan gambar dengan:
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image, make_image_grid
# use from_pipe to avoid consuming additional memory when loading a checkpoint
pipeline = AutoPipelineForImage2Image.from_pipe(pipeline_text2image).to("cuda") # or "mps", "xpu", "cpu"
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-text2img.png"
init_image = load_image(url)
prompt = "a dog catching a frisbee in the jungle"
image = pipeline(prompt, image=init_image, strength=0.8, guidance_scale=10.5).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
Inpainting
Untuk inpainting, Anda memerlukan gambar asli dan mask dari area yang ingin Anda ganti pada gambar asli. Buat prompt untuk menggambarkan apa yang ingin Anda gunakan untuk menggantikan area yang di-mask.
from diffusers import AutoPipelineForInpainting
from diffusers.utils import load_image, make_image_grid
# use from_pipe to avoid consuming additional memory when loading a checkpoint
pipeline = AutoPipelineForInpainting.from_pipe(pipeline_text2image).to("cuda") # or "mps", "xpu", "cpu"
img_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-text2img.png"
mask_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-inpaint-mask.png"
init_image = load_image(img_url)
mask_image = load_image(mask_url)
prompt = "A deep sea diver floating"
image = pipeline(prompt=prompt, image=init_image, mask_image=mask_image, strength=0.85, guidance_scale=12.5).images[0]
make_image_grid([init_image, mask_image, image], rows=1, cols=3)
Perbaiki kualitas gambar
SDXL mencakup model refiner yang khusus untuk denoising gambar pada tahap noise rendah guna menghasilkan gambar berkualitas lebih tinggi dari model dasar. Ada dua cara untuk menggunakan refiner:
- gunakan model base dan refiner secara bersama untuk menghasilkan gambar yang lebih halus
- gunakan model dasar untuk menghasilkan gambar, kemudian gunakan model refiner untuk menambahkan lebih banyak detail ke gambar (inilah cara SDXL dilatih secara asli)
Model dasar + penyempurna
Ketika Anda menggunakan model dasar dan model penyempurna secara bersama-sama untuk menghasilkan gambar, hal ini dikenal sebagai ensemble of expert denoisers. Pendekatan ensemble of expert denoisers membutuhkan jumlah langkah denoising keseluruhan yang lebih sedikit dibandingkan meneruskan keluaran model dasar ke model penyempurna, sehingga seharusnya jauh lebih cepat untuk dijalankan. Namun, Anda tidak akan dapat memeriksa keluaran model dasar karena masih mengandung banyak noise.
Sebagai ensemble dari denoiser ahli, model dasar berperan sebagai ahli selama tahap difusi berisik tinggi, dan model refiner berperan sebagai ahli selama tahap difusi berisik rendah. Muat model dasar dan model refiner:
from diffusers import DiffusionPipeline
import torch
base = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
refiner = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
vae=base.vae,
dtype=torch.float16,
use_safetensors=True,
variant="fp16",
).to("cuda")Untuk menggunakan pendekatan ini, Anda perlu menentukan jumlah timestep untuk setiap model agar menjalankan tahap masing-masing. Untuk model dasar, ini dikendalikan oleh parameter denoising_end dan untuk model refiner, dikendalikan oleh parameter denoising_start.
Parameter
denoising_enddandenoising_startharus berupa float antara 0 dan 1. Parameter ini direpresentasikan sebagai proporsi dari timestep diskrit yang didefinisikan oleh scheduler. Jika Anda juga menggunakan parameterstrength, parameter tersebut akan diabaikan karena jumlah langkah denoising ditentukan oleh timestep diskrit yang digunakan dalam pelatihan model dan cutoff fraksional yang dideklarasikan.
Mari kita atur denoising_end=0.8 agar model dasar melakukan 80% pertama dari denoising pada timestep high-noise dan atur denoising_start=0.8 agar model refiner melakukan 20% terakhir dari denoising pada timestep low-noise. Output model dasar harus berada di ruang latent alih-alih gambar PIL.
prompt = "A majestic lion jumping from a big stone at night"
image = base(
prompt=prompt,
num_inference_steps=40,
denoising_end=0.8,
output_type="latent",
).images
image = refiner(
prompt=prompt,
num_inference_steps=40,
denoising_start=0.8,
image=image,
).images[0]
image
Model refiner juga dapat digunakan untuk inpainting di StableDiffusionXLInpaintPipeline:
from diffusers import StableDiffusionXLInpaintPipeline
from diffusers.utils import load_image, make_image_grid
import torch
base = StableDiffusionXLInpaintPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
refiner = StableDiffusionXLInpaintPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
vae=base.vae,
dtype=torch.float16,
use_safetensors=True,
variant="fp16",
).to("cuda")
img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
init_image = load_image(img_url)
mask_image = load_image(mask_url)
prompt = "A majestic tiger sitting on a bench"
num_inference_steps = 75
high_noise_frac = 0.7
image = base(
prompt=prompt,
image=init_image,
mask_image=mask_image,
num_inference_steps=num_inference_steps,
denoising_end=high_noise_frac,
output_type="latent",
).images
image = refiner(
prompt=prompt,
image=image,
mask_image=mask_image,
num_inference_steps=num_inference_steps,
denoising_start=high_noise_frac,
).images[0]
make_image_grid([init_image, mask_image, image.resize((512, 512))], rows=1, cols=3)Metode ensemble dari denoiser ahli ini bekerja dengan baik untuk semua scheduler yang tersedia!
Model dasar ke model penyempurna
SDXL mendapatkan peningkatan kualitas gambar dengan menggunakan model refiner untuk menambahkan detail berkualitas tinggi tambahan pada gambar yang sepenuhnya dinoised dari model dasar, dalam pengaturan image-to-image.
Muat model dasar dan penyempurna:
from diffusers import DiffusionPipeline
import torch
base = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
refiner = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
vae=base.vae,
dtype=torch.float16,
use_safetensors=True,
variant="fp16",
).to("cuda")Anda dapat menggunakan SDXL refiner dengan model dasar yang berbeda. Misalnya, Anda dapat menggunakan pipeline Hunyuan-DiT atau PixArt-Sigma untuk menghasilkan gambar dengan kepatuhan prompt yang lebih baik. Setelah Anda menghasilkan gambar, Anda dapat meneruskannya ke model SDXL refiner untuk meningkatkan kualitas akhir generasi.
Buat gambar dari model dasar, dan atur keluaran model ke ruang latent:
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = base(prompt=prompt, output_type="latent").images[0]Lewatkan gambar yang dihasilkan ke model refiner:
image = refiner(prompt=prompt, image=image[None, :]).images[0]
Untuk inpainting, muat model dasar dan model refiner di StableDiffusionXLInpaintPipeline, hapus parameter denoising_end dan denoising_start, dan pilih jumlah langkah inferensi yang lebih kecil untuk refiner.
Micro-conditioning
Pelatihan SDXL melibatkan beberapa teknik kondisioning tambahan yang disebut sebagai micro-conditioning. Teknik ini mencakup ukuran gambar asli, ukuran gambar target, dan parameter pemotongan. Micro-conditioning dapat digunakan pada saat inferensi untuk membuat gambar berkualitas tinggi yang terpusat.
Anda dapat menggunakan parameter micro-conditioning dan negative micro-conditioning berkat classifier-free guidance. Parameter ini tersedia di StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline, StableDiffusionXLInpaintPipeline, dan StableDiffusionXLControlNetPipeline.
Kondisioning ukuran
Ada dua jenis kondisioning ukuran:
original_sizeconditioning berasal dari gambar yang di-upscale dalam batch pelatihan (karena membuang gambar-gambar kecil yang mencakup hampir 40% dari total data pelatihan akan menjadi pemborosan). Dengan cara ini, SDXL belajar bahwa artefak upscaling seharusnya tidak ada pada gambar resolusi tinggi. Saat inferensi, Anda dapat menggunakanoriginal_sizeuntuk menunjukkan resolusi gambar asli. Menggunakan nilai default(1024, 1024)menghasilkan gambar berkualitas lebih tinggi yang menyerupai gambar 1024x1024 dalam dataset. Jika Anda memilih untuk menggunakan resolusi yang lebih rendah, seperti(256, 256), model tetap menghasilkan gambar 1024x1024, tetapi gambar tersebut akan terlihat seperti gambar resolusi rendah (pola lebih sederhana, blur) dalam dataset.Kondisi
target_sizeberasal dari finetuning SDXL untuk mendukung rasio aspek gambar yang berbeda. Selama inferensi, jika Anda menggunakan nilai default(1024, 1024), Anda akan mendapatkan gambar yang menyerupai komposisi gambar persegi dalam dataset. Kami merekomendasikan menggunakan nilai yang sama untuktarget_sizedanoriginal_size, tetapi silakan bereksperimen dengan opsi lain!
🤗 Diffusers juga memungkinkan Anda untuk menentukan kondisi negatif tentang ukuran gambar untuk mengarahkan generasi menjauh dari resolusi gambar tertentu:
from diffusers import StableDiffusionXLPipeline
import torch
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(
prompt=prompt,
negative_original_size=(512, 512),
negative_target_size=(1024, 1024),
).images[0]
Crop conditioning
Gambar yang dihasilkan oleh model Stable Diffusion sebelumnya terkadang tampak terpotong. Hal ini terjadi karena gambar memang dipotong selama pelatihan agar semua gambar dalam satu batch memiliki ukuran yang sama. Dengan mengondisikan pada koordinat pemotongan, SDXL belajar bahwa tidak ada pemotongan - koordinat (0, 0) - biasanya berkorelasi dengan subjek yang terpusat dan wajah yang utuh (ini adalah nilai default di 🤗 Diffusers). Anda dapat bereksperimen dengan koordinat yang berbeda jika ingin menghasilkan komposisi yang tidak terpusat!
from diffusers import StableDiffusionXLPipeline
import torch
pipeline = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipeline(prompt=prompt, crops_coords_top_left=(256, 0)).images[0]
image
Anda juga dapat menentukan koordinat pemotongan negatif untuk mengarahkan generasi menjauh dari parameter pemotongan tertentu:
from diffusers import StableDiffusionXLPipeline
import torch
pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(
prompt=prompt,
negative_original_size=(512, 512),
negative_crops_coords_top_left=(0, 0),
negative_target_size=(1024, 1024),
).images[0]
imageGunakan prompt yang berbeda untuk setiap text-encoder
SDXL menggunakan dua text-encoder, sehingga Anda dapat memberikan prompt yang berbeda untuk masing-masing text-encoder, yang dapat meningkatkan kualitas. Berikan prompt asli Anda ke prompt dan prompt kedua ke prompt_2 (gunakan negative_prompt dan negative_prompt_2 jika Anda menggunakan negative prompt):
from diffusers import StableDiffusionXLPipeline
import torch
pipeline = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda") # or "mps", "xpu", "cpu"
# prompt is passed to OAI CLIP-ViT/L-14
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# prompt_2 is passed to OpenCLIP-ViT/bigG-14
prompt_2 = "Van Gogh painting"
image = pipeline(prompt=prompt, prompt_2=prompt_2).images[0]
image
Dual text-encoders juga mendukung textual inversion embeddings yang perlu dimuat secara terpisah seperti dijelaskan dalam panduan textual inversion.
Optimasi
SDXL adalah model besar, dan Anda mungkin perlu mengoptimalkan memori agar dapat berjalan di perangkat keras Anda. Berikut adalah beberapa tips untuk menghemat memori dan mempercepat inferensi.
- Offload model ke CPU dengan enable_model_cpu_offload() untuk error out-of-memory:
- base.to("cuda") # or "mps", "xpu", "cpu"
- refiner.to("cuda")
+ base.enable_model_cpu_offload()
+ refiner.enable_model_cpu_offload()- Gunakan
torch.compileuntuk percepatan ~20% (Anda membutuhkantorch>=2.0):
+ base.unet = torch.compile(base.unet, mode="reduce-overhead", fullgraph=True)
+ refiner.unet = torch.compile(refiner.unet, mode="reduce-overhead", fullgraph=True)- Aktifkan xFormers untuk menjalankan SDXL jika
torch<2.0:
+ base.enable_xformers_memory_efficient_attention()
+ refiner.enable_xformers_memory_efficient_attention()Sumber daya
Jika Anda tertarik untuk bereksperimen dengan versi minimal dari UNet2DConditionModel yang digunakan dalam SDXL, lihatlah implementasi minSDXL yang ditulis dalam PyTorch dan langsung kompatibel dengan 🤗 Diffusers.
StableDiffusionXLPipeline
kelas diffusers.StableDiffusionXLPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = None )
Parameter
- vae (AutoencoderKL) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan gambar ke dan dari representasi laten.
- text_encoder (
CLIPTextModel) — Text-encoder yang dibekukan. Stable Diffusion XL menggunakan bagian teks dari CLIP, khususnya varian clip-vit-large-patch14. - text_encoder_2 (
CLIPTextModelWithProjection) — Text-encoder beku kedua. Stable Diffusion XL menggunakan bagian teks dan pool dari CLIP, khususnya varian laion/CLIP-ViT-bigG-14-laion2B-39B-b160k. - tokenizer (
CLIPTokenizer) — Tokenizer dari kelas CLIPTokenizer. - tokenizer_2 (
CLIPTokenizer) — Tokenizer kedua dari kelas CLIPTokenizer. - unet (UNet2DConditionModel) — Arsitektur U-Net bersyarat untuk mendenois latens gambar yang telah dikodekan.
- scheduler (SchedulerMixin) —
Scheduler yang digunakan bersama dengan
unetuntuk menghilangkan noise pada latens gambar yang telah dikodekan. Bisa berupa salah satu dari DDIMScheduler, LMSDiscreteScheduler, atau PNDMScheduler. - force_zeros_for_empty_prompt (
bool, opsional, defaultnya"True") — Apakah embedding prompt negatif harus dipaksa selalu diset ke 0. Lihat juga konfigurasistabilityai/stable-diffusion-xl-base-1-0. - add_watermarker (
bool, opsional) — Apakah akan menggunakan invisible_watermark library untuk memberikan watermark pada gambar output. Jika tidak didefinisikan, nilainya akan default ke True jika paket tersebut terinstal, jika tidak, watermarker tidak akan digunakan.
Pipeline untuk generasi teks-ke-gambar menggunakan Stable Diffusion XL.
Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua pipeline (seperti mengunduh atau menyimpan, menjalankan pada perangkat tertentu, dll.)
Pipeline juga mewarisi metode pemuatan berikut:
- load_textual_inversion() untuk memuat embedding textual inversion
- from_single_file() for loading
.ckptfiles - load_lora_weights() untuk memuat bobot LoRA
- save_lora_weights() untuk menyimpan bobot LoRA
- load_ip_adapter() untuk memuat IP Adapter
__call__
< source >( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple[int, int] | None = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple[int, int] | None = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput or tuple
Parameter
- prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,promptdigunakan di kedua text-encoder - height (
int, opsional, defaultnya self.unet.config.sample_size * self.vae_scale_factor) — Tinggi gambar yang dihasilkan dalam piksel. Nilai ini secara default diatur ke 1024 untuk hasil terbaik. Nilai di bawah 512 piksel tidak akan berfungsi dengan baik untuk stabilityai/stable-diffusion-xl-base-1.0 dan checkpoint yang tidak secara khusus dihaluskan pada resolusi rendah. - width (
int, opsional, defaultnya self.unet.config.sample_size * self.vae_scale_factor) — Lebar gambar yang dihasilkan dalam piksel. Nilai ini secara default diatur ke 1024 untuk hasil terbaik. Nilai di bawah 512 piksel tidak akan berfungsi dengan baik untuk stabilityai/stable-diffusion-xl-base-1.0 dan checkpoint yang tidak secara khusus dihaluskan pada resolusi rendah. - num_inference_steps (
int, opsional, default 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - timesteps (
list[int], opsional) — Timesteps kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumentimestepsdi metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsdilewatkan akan digunakan. Harus dalam urutan menurun. - sigmas (
list[float], opsional) — Sigmas kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumensigmasdalam metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsditeruskan akan digunakan. - denoising_end (
float, opsional) — Jika ditentukan, menentukan fraksi (antara 0.0 dan 1.0) dari total proses denoising yang harus diselesaikan sebelum proses tersebut dihentikan secara dini secara sengaja. Akibatnya, sampel yang dikembalikan masih akan mempertahankan sejumlah besar noise sesuai dengan timestep diskrit yang dipilih oleh scheduler. Parameter denoising_end sebaiknya digunakan ketika pipeline ini merupakan bagian dari setup multi-pipeline “Mixture of Denoisers”, seperti yang dijelaskan dalam Refining the Image Output - guidance_scale (
float, opsional, default 5.0) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance.guidance_scaledidefinisikan sebagaiwdari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengaturguidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait denganpromptteks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - negative_prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar, yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,negative_promptdigunakan di kedua text-encoder - num_images_per_prompt (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt. - eta (
float, opsional, default 0.0) — Bersesuaian dengan parameter eta (η) dalam paper DDIM: https://huggingface.co/papers/2010.02502. Hanya berlaku untuk schedulers.DDIMScheduler, akan diabaikan untuk yang lain. - generator (
torch.Generatorataulist[torch.Generator], opsional) — Satu atau daftar generator torch untuk membuat proses generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya, diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. Dapat digunakan untuk menyesuaikan generasi yang sama dengan prompt yang berbeda. Jika tidak disediakan, tensor latents akan dibuat dengan pengambilan sampel menggunakangeneratoracak yang diberikan. - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks pooled yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, mis. pembobotan prompt. Jika tidak disediakan, embedding teks pooled akan dibuat dari argumen inputprompt. - negative_pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang sudah digenerate sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, pooled negative_prompt_embeds akan digenerate dari argumen inputnegative_prompt. - ip_adapter_image — (
PipelineImageInput, opsional): Input gambar opsional untuk bekerja dengan IP Adapters. - ip_adapter_image_embeds (
list[torch.Tensor], opsional) — Embedding gambar yang telah dibuat sebelumnya untuk IP-Adapter. Ini harus berupa daftar dengan panjang yang sama dengan jumlah IP-adapter. Setiap elemen harus berupa tensor dengan bentuk(batch_size, num_images, emb_dim). Harus mengandung embedding gambar negatif jikado_classifier_free_guidancediatur keTrue. Jika tidak disediakan, embedding dihitung dari argumen inputip_adapter_image. - output_type (
str, opsional, defaultnya"pil") — Format output dari generate image. Pilih antara PIL:PIL.Image.Imageataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutputalih-alih tuple biasa. - cross_attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - guidance_rescale (
float, opsional, default 0.0) — Faktor rescale guidance yang diusulkan oleh Common Diffusion Noise Schedules and Sample Steps are Flawedguidance_scaledidefinisikan sebagaiφdalam persamaan 16. dari Common Diffusion Noise Schedules and Sample Steps are Flawed. Faktor rescale guidance harus memperbaiki overexposure saat menggunakan zero terminal SNR. - original_size (
tuple[int], opsional, default (1024, 1024)) — Jikaoriginal_sizetidak sama dengantarget_size, gambar akan tampak di-downsample atau di-upsample.original_sizedefault ke(height, width)jika tidak ditentukan. Bagian dari micro-conditioning SDXL seperti dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. - crops_coords_top_left (
tuple[int], opsional, default (0, 0)) —crops_coords_top_leftdapat digunakan untuk menghasilkan gambar yang tampak “dipotong” dari posisicrops_coords_top_leftke bawah. Gambar yang bagus dan terpusat biasanya dicapai dengan mengaturcrops_coords_top_leftke (0, 0). Bagian dari micro-conditioning SDXL seperti dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. - target_size (
tuple[int], opsional, defaultnya (1024, 1024)) — Untuk sebagian besar kasus,target_sizesebaiknya diatur ke tinggi dan lebar yang diinginkan dari gambar yang dihasilkan. Jika tidak ditentukan, nilainya akan default ke(height, width). Bagian dari micro-conditioning SDXL seperti dijelaskan dalam bagian 2.2 dari https://huggingface.co/papers/2307.01952. - negative_original_size (
tuple[int], opsional, default (1024, 1024)) — Untuk mengondisikan proses generasi secara negatif berdasarkan resolusi gambar tertentu. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Untuk informasi lebih lanjut, lihat thread issue ini: https://github.com/huggingface/diffusers/issues/4208. - negative_crops_coords_top_left (
tuple[int], opsional, default (0, 0)) — Untuk mengondisikan proses generasi secara negatif berdasarkan koordinat crop tertentu. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Untuk informasi lebih lanjut, lihat thread issue ini: https://github.com/huggingface/diffusers/issues/4208. - negative_target_size (
tuple[int], opsional, default (1024, 1024)) — Untuk mengondisikan proses generasi secara negatif berdasarkan resolusi gambar target. Sebaiknya sama dengantarget_sizeuntuk sebagian besar kasus. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Untuk informasi lebih lanjut, lihat thread issue ini: https://github.com/huggingface/diffusers/issues/4208. - clip_skip (
int, opsional) — Jumlah lapisan yang akan dilewati dari CLIP saat menghitung embedding prompt. Nilai 1 berarti output dari lapisan pra-akhir akan digunakan untuk menghitung embedding prompt. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dariPipelineCallbackatauMultiPipelineCallbacksyang dipanggil di akhir setiap langkah denoising selama inferensi, dengan argumen berikut:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsakan berisi daftar semua tensor sesuai yang ditentukan olehcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, opsional) — Daftar input tensor untuk fungsicallback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumencallback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut._callback_tensor_inputsdari kelas pipeline Anda.
Mengembalikan
~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput atau tuple
~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput jika return_dict bernilai True, selain itu berupa tuple. Saat mengembalikan tuple, elemen pertama adalah daftar berisi gambar yang dihasilkan.
Fungsi yang dipanggil saat memanggil pipeline untuk generasi.
Contoh:
>>> import torch
>>> from diffusers import StableDiffusionXLPipeline
>>> pipe = StableDiffusionXLPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt).images[0]encode_prompt
< source >( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,promptdigunakan di kedua text-encoder - device — (
torch.device): perangkat torch - num_images_per_prompt (
int) — jumlah gambar yang harus dihasilkan per prompt - do_classifier_free_guidance (
bool) — apakah akan menggunakan classifier free guidance atau tidak - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - negative_prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar, yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,negative_promptdigunakan di kedua text-encoder - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks pooled yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, mis. pembobotan prompt. Jika tidak disediakan, embedding teks pooled akan dibuat dari argumen inputprompt. - negative_pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang sudah digenerate sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, pooled negative_prompt_embeds akan digenerate dari argumen inputnegative_prompt. - lora_scale (
float, opsional) — Skala LoRA yang akan diterapkan ke semua lapisan LoRA dari text encoder jika lapisan LoRA dimuat. - clip_skip (
int, opsional) — Jumlah lapisan yang akan dilewati dari CLIP saat menghitung embedding prompt. Nilai 1 berarti output dari lapisan pra-akhir akan digunakan untuk menghitung embedding prompt.
Mengkodekan prompt menjadi hidden states dari text encoder.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Parameter
- w (
torch.Tensor) — Menghasilkan vektor embedding dengan skala panduan yang ditentukan untuk selanjutnya memperkaya embedding timestep. - embedding_dim (
int, opsional, default 512) — Dimensi dari embedding yang akan dihasilkan. - dtype (
torch.dtype, opsional, defaulttorch.float32) — Tipe data dari embedding yang dihasilkan.
Mengembalikan
torch.Tensor
Vektor embedding dengan bentuk (len(w), embedding_dim).
StableDiffusionXLImg2ImgPipeline
kelas diffusers.StableDiffusionXLImg2ImgPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Nonerequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = None )
Parameter
- vae (AutoencoderKL) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan gambar ke dan dari representasi laten.
- text_encoder (
CLIPTextModel) — Text-encoder yang dibekukan. Stable Diffusion XL menggunakan bagian teks dari CLIP, khususnya varian clip-vit-large-patch14. - text_encoder_2 (
CLIPTextModelWithProjection) — Text-encoder beku kedua. Stable Diffusion XL menggunakan bagian teks dan pool dari CLIP, khususnya varian laion/CLIP-ViT-bigG-14-laion2B-39B-b160k. - tokenizer (
CLIPTokenizer) — Tokenizer dari kelas CLIPTokenizer. - tokenizer_2 (
CLIPTokenizer) — Tokenizer kedua dari kelas CLIPTokenizer. - unet (UNet2DConditionModel) — Arsitektur U-Net bersyarat untuk mendenois latens gambar yang telah dikodekan.
- scheduler (SchedulerMixin) —
Scheduler yang digunakan bersama dengan
unetuntuk menghilangkan noise pada latens gambar yang telah dikodekan. Bisa berupa salah satu dari DDIMScheduler, LMSDiscreteScheduler, atau PNDMScheduler. - requires_aesthetics_score (
bool, opsional, default"False") — Apakahunetmemerlukan kondisiaesthetic_scoreuntuk diteruskan selama inferensi. Lihat juga konfigurasi daristabilityai/stable-diffusion-xl-refiner-1-0. - force_zeros_for_empty_prompt (
bool, opsional, defaultnya"True") — Apakah embedding prompt negatif harus dipaksa selalu diset ke 0. Lihat juga konfigurasistabilityai/stable-diffusion-xl-base-1-0. - add_watermarker (
bool, opsional) — Apakah akan menggunakan invisible_watermark library untuk memberikan watermark pada gambar output. Jika tidak didefinisikan, nilainya akan default ke True jika paket tersebut terinstal, jika tidak, watermarker tidak akan digunakan.
Pipeline untuk generasi teks-ke-gambar menggunakan Stable Diffusion XL.
Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua pipeline (seperti mengunduh atau menyimpan, menjalankan pada perangkat tertentu, dll.)
Pipeline juga mewarisi metode pemuatan berikut:
- load_textual_inversion() untuk memuat embedding textual inversion
- from_single_file() for loading
.ckptfiles - load_lora_weights() untuk memuat bobot LoRA
- save_lora_weights() untuk menyimpan bobot LoRA
- load_ip_adapter() untuk memuat IP Adapter
__call__
< source >( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonestrength: float = 0.3num_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_start: float | None = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput or tuple
Parameter
- prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,promptdigunakan di kedua text-encoder - image (
torch.TensoratauPIL.Image.Imageataunp.ndarrayataulist[torch.Tensor]ataulist[PIL.Image.Image]ataulist[np.ndarray]) — Gambar yang akan dimodifikasi dengan pipeline. - strength (
float, opsional, default 0.3) — Secara konseptual, menunjukkan seberapa besar transformasi yang diterapkan padaimagereferensi. Nilainya harus berada di antara 0 dan 1.imageakan digunakan sebagai titik awal, dengan semakin banyak noise yang ditambahkan seiring dengan semakin besarnya nilaistrength. Jumlah langkah denoising bergantung pada jumlah noise yang awalnya ditambahkan. Ketikastrengthbernilai 1, noise yang ditambahkan akan maksimal dan proses denoising akan berjalan untuk jumlah iterasi penuh yang ditentukan dalamnum_inference_steps. Dengan demikian, nilai 1 pada dasarnya mengabaikanimage. Perhatikan bahwa jikadenoising_startdideklarasikan sebagai bilangan bulat, nilaistrengthakan diabaikan. - num_inference_steps (
int, opsional, default 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - timesteps (
list[int], opsional) — Timesteps kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumentimestepsdi metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsdilewatkan akan digunakan. Harus dalam urutan menurun. - sigmas (
list[float], opsional) — Sigmas kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumensigmasdalam metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsditeruskan akan digunakan. - denoising_start (
float, opsional) — Jika ditentukan, menunjukkan fraksi (antara 0.0 dan 1.0) dari total proses denoising yang akan dilewati sebelum proses dimulai. Akibatnya, bagian awal dari proses denoising diabaikan dan dianggap bahwaimageyang diberikan adalah gambar yang telah didenosing sebagian. Perhatikan bahwa ketika ini ditentukan, strength akan diabaikan. Parameterdenoising_startsangat bermanfaat ketika pipeline ini diintegrasikan ke dalam setup multi-pipeline “Mixture of Denoisers”, seperti yang dijelaskan dalam Refine Image Quality. - denoising_end (
float, opsional) — Jika ditentukan, menentukan fraksi (antara 0.0 dan 1.0) dari total proses denoising yang harus diselesaikan sebelum proses tersebut dihentikan secara dini secara sengaja. Akibatnya, sampel yang dikembalikan masih akan mempertahankan sejumlah besar noise (sekitar 20% akhir dari timesteps masih diperlukan) dan harus didenoise oleh pipeline penerus yang memilikidenoising_startdiatur ke 0.8 sehingga hanya mendenoise 20% akhir dari scheduler. Parameter denoising_end sebaiknya digunakan ketika pipeline ini merupakan bagian dari setup multi-pipeline “Mixture of Denoisers”, seperti yang dijelaskan dalam Refine Image Quality. - guidance_scale (
float, opsional, default 7.5) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance.guidance_scaledidefinisikan sebagaiwdari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengaturguidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait denganpromptteks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - negative_prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar, yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,negative_promptdigunakan di kedua text-encoder - num_images_per_prompt (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt. - eta (
float, opsional, default 0.0) — Bersesuaian dengan parameter eta (η) dalam paper DDIM: https://huggingface.co/papers/2010.02502. Hanya berlaku untuk schedulers.DDIMScheduler, akan diabaikan untuk yang lain. - generator (
torch.Generatorataulist[torch.Generator], opsional) — Satu atau daftar generator torch untuk membuat proses generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya, diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. Dapat digunakan untuk menyesuaikan generasi yang sama dengan prompt yang berbeda. Jika tidak disediakan, tensor latents akan dibuat dengan pengambilan sampel menggunakangeneratoracak yang diberikan. - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks pooled yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, mis. pembobotan prompt. Jika tidak disediakan, embedding teks pooled akan dibuat dari argumen inputprompt. - negative_pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang sudah digenerate sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, pooled negative_prompt_embeds akan digenerate dari argumen inputnegative_prompt. - ip_adapter_image — (
PipelineImageInput, opsional): Input gambar opsional untuk bekerja dengan IP Adapters. - ip_adapter_image_embeds (
list[torch.Tensor], opsional) — Embedding gambar yang telah dibuat sebelumnya untuk IP-Adapter. Ini harus berupa daftar dengan panjang yang sama dengan jumlah IP-adapter. Setiap elemen harus berupa tensor dengan bentuk(batch_size, num_images, emb_dim). Harus mengandung embedding gambar negatif jikado_classifier_free_guidancediatur keTrue. Jika tidak disediakan, embedding dihitung dari argumen inputip_adapter_image. - output_type (
str, opsional, defaultnya"pil") — Format output dari generate image. Pilih antara PIL:PIL.Image.Imageataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan~pipelines.stable_diffusion.StableDiffusionXLPipelineOutputalih-alih tuple biasa. - cross_attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - guidance_rescale (
float, opsional, default 0.0) — Faktor rescale guidance yang diusulkan oleh Common Diffusion Noise Schedules and Sample Steps are Flawedguidance_scaledidefinisikan sebagaiφdalam persamaan 16. dari Common Diffusion Noise Schedules and Sample Steps are Flawed. Faktor rescale guidance harus memperbaiki overexposure saat menggunakan zero terminal SNR. - original_size (
tuple[int], opsional, default (1024, 1024)) — Jikaoriginal_sizetidak sama dengantarget_size, gambar akan tampak di-downsample atau di-upsample.original_sizedefault ke(height, width)jika tidak ditentukan. Bagian dari micro-conditioning SDXL seperti dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. - crops_coords_top_left (
tuple[int], opsional, default (0, 0)) —crops_coords_top_leftdapat digunakan untuk menghasilkan gambar yang tampak “dipotong” dari posisicrops_coords_top_leftke bawah. Gambar yang bagus dan terpusat biasanya dicapai dengan mengaturcrops_coords_top_leftke (0, 0). Bagian dari micro-conditioning SDXL seperti dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. - target_size (
tuple[int], opsional, defaultnya (1024, 1024)) — Untuk sebagian besar kasus,target_sizesebaiknya diatur ke tinggi dan lebar yang diinginkan dari gambar yang dihasilkan. Jika tidak ditentukan, nilainya akan default ke(height, width). Bagian dari micro-conditioning SDXL seperti dijelaskan dalam bagian 2.2 dari https://huggingface.co/papers/2307.01952. - negative_original_size (
tuple[int], opsional, default (1024, 1024)) — Untuk mengondisikan proses generasi secara negatif berdasarkan resolusi gambar tertentu. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Untuk informasi lebih lanjut, lihat thread issue ini: https://github.com/huggingface/diffusers/issues/4208. - negative_crops_coords_top_left (
tuple[int], opsional, default (0, 0)) — Untuk mengondisikan proses generasi secara negatif berdasarkan koordinat crop tertentu. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Untuk informasi lebih lanjut, lihat thread issue ini: https://github.com/huggingface/diffusers/issues/4208. - negative_target_size (
tuple[int], opsional, default (1024, 1024)) — Untuk mengondisikan proses generasi secara negatif berdasarkan resolusi gambar target. Sebaiknya sama dengantarget_sizeuntuk sebagian besar kasus. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Untuk informasi lebih lanjut, lihat thread issue ini: https://github.com/huggingface/diffusers/issues/4208. - aesthetic_score (
float, opsional, default 6.0) — Digunakan untuk mensimulasikan skor estetika dari gambar yang dihasilkan dengan memengaruhi kondisi teks positif. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. - negative_aesthetic_score (
float, opsional, default 2.5) — Bagian dari micro-conditioning SDXL seperti dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Dapat digunakan untuk mensimulasikan skor estetika dari gambar yang dihasilkan dengan memengaruhi kondisi teks negatif. - clip_skip (
int, opsional) — Jumlah lapisan yang akan dilewati dari CLIP saat menghitung embedding prompt. Nilai 1 berarti output dari lapisan pra-akhir akan digunakan untuk menghitung embedding prompt. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dariPipelineCallbackatauMultiPipelineCallbacksyang dipanggil di akhir setiap langkah denoising selama inferensi, dengan argumen berikut:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsakan berisi daftar semua tensor sesuai yang ditentukan olehcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, opsional) — Daftar input tensor untuk fungsicallback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumencallback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut._callback_tensor_inputsdari kelas pipeline Anda.
Mengembalikan
~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput atau tuple
~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput jika return_dict bernilai True, selain itu berupa
`tuple. Saat mengembalikan tuple, elemen pertama adalah daftar berisi gambar yang dihasilkan.
Fungsi yang dipanggil saat memanggil pipeline untuk generasi.
Contoh:
>>> import torch
>>> from diffusers import StableDiffusionXLImg2ImgPipeline
>>> from diffusers.utils import load_image
>>> pipe = StableDiffusionXLImg2ImgPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-refiner-1.0", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> url = "https://huggingface.co/datasets/patrickvonplaten/images/resolve/main/aa_xl/000000009.png"
>>> init_image = load_image(url).convert("RGB")
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt, image=init_image).images[0]encode_prompt
< source >( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,promptdigunakan di kedua text-encoder - device — (
torch.device): perangkat torch - num_images_per_prompt (
int) — jumlah gambar yang harus dihasilkan per prompt - do_classifier_free_guidance (
bool) — apakah akan menggunakan classifier free guidance atau tidak - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - negative_prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar, yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,negative_promptdigunakan di kedua text-encoder - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks pooled yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, mis. pembobotan prompt. Jika tidak disediakan, embedding teks pooled akan dibuat dari argumen inputprompt. - negative_pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang sudah digenerate sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, pooled negative_prompt_embeds akan digenerate dari argumen inputnegative_prompt. - lora_scale (
float, opsional) — Skala LoRA yang akan diterapkan ke semua lapisan LoRA dari text encoder jika lapisan LoRA dimuat. - clip_skip (
int, opsional) — Jumlah lapisan yang akan dilewati dari CLIP saat menghitung embedding prompt. Nilai 1 berarti output dari lapisan pra-akhir akan digunakan untuk menghitung embedding prompt.
Mengkodekan prompt menjadi hidden states dari text encoder.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Parameter
- w (
torch.Tensor) — Menghasilkan vektor embedding dengan skala panduan yang ditentukan untuk selanjutnya memperkaya embedding timestep. - embedding_dim (
int, opsional, default 512) — Dimensi dari embedding yang akan dihasilkan. - dtype (
torch.dtype, opsional, defaulttorch.float32) — Tipe data dari embedding yang dihasilkan.
Mengembalikan
torch.Tensor
Vektor embedding dengan bentuk (len(w), embedding_dim).
StableDiffusionXLInpaintPipeline
kelas diffusers.StableDiffusionXLInpaintPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Nonerequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = None )
Parameter
- vae (AutoencoderKL) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan gambar ke dan dari representasi laten.
- text_encoder (
CLIPTextModel) — Text-encoder yang dibekukan. Stable Diffusion XL menggunakan bagian teks dari CLIP, khususnya varian clip-vit-large-patch14. - text_encoder_2 (
CLIPTextModelWithProjection) — Text-encoder beku kedua. Stable Diffusion XL menggunakan bagian teks dan pool dari CLIP, khususnya varian laion/CLIP-ViT-bigG-14-laion2B-39B-b160k. - tokenizer (
CLIPTokenizer) — Tokenizer dari kelas CLIPTokenizer. - tokenizer_2 (
CLIPTokenizer) — Tokenizer kedua dari kelas CLIPTokenizer. - unet (UNet2DConditionModel) — Arsitektur U-Net bersyarat untuk mendenois latens gambar yang telah dikodekan.
- scheduler (SchedulerMixin) —
Scheduler yang digunakan bersama dengan
unetuntuk menghilangkan noise pada latens gambar yang telah dikodekan. Bisa berupa salah satu dari DDIMScheduler, LMSDiscreteScheduler, atau PNDMScheduler. - requires_aesthetics_score (
bool, opsional, defaultnya"False") — Apakahunetmemerlukan kondisi aesthetic_score untuk diteruskan selama inferensi. Lihat juga konfigurasi daristabilityai/stable-diffusion-xl-refiner-1-0. - force_zeros_for_empty_prompt (
bool, opsional, defaultnya"True") — Apakah embedding prompt negatif harus dipaksa selalu diset ke 0. Lihat juga konfigurasistabilityai/stable-diffusion-xl-base-1-0. - add_watermarker (
bool, opsional) — Apakah akan menggunakan invisible_watermark library untuk memberikan watermark pada gambar output. Jika tidak didefinisikan, nilainya akan default ke True jika paket tersebut terinstal, jika tidak, watermarker tidak akan digunakan.
Pipeline untuk generasi teks-ke-gambar menggunakan Stable Diffusion XL.
Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua pipeline (seperti mengunduh atau menyimpan, menjalankan pada perangkat tertentu, dll.)
Pipeline juga mewarisi metode pemuatan berikut:
- load_textual_inversion() untuk memuat embedding textual inversion
- from_single_file() for loading
.ckptfiles - load_lora_weights() untuk memuat bobot LoRA
- save_lora_weights() untuk menyimpan bobot LoRA
- load_ip_adapter() untuk memuat IP Adapter
__call__
< source >( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonemask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonemasked_image_latents: Tensor = Noneheight: int | None = Nonewidth: int | None = Nonepadding_mask_crop: int | None = Nonestrength: float = 0.9999num_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_start: float | None = Nonedenoising_end: float | None = Noneguidance_scale: float = 7.5negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput or tuple
Parameter
- prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,promptdigunakan di kedua text-encoder - image (
PIL.Image.Image) —Image, atau tensor yang mewakili batch gambar yang akan di-inpaint, artinya bagian-bagian dari gambar akan ditutupi denganmask_imagedan dilukis ulang sesuai denganprompt. - mask_image (
PIL.Image.Image) —Image, atau tensor yang mewakili batch gambar, untuk memberi mask padaimage. Piksel putih pada mask akan digambar ulang, sedangkan piksel hitam akan dipertahankan. Jikamask_imageadalah gambar PIL, gambar tersebut akan dikonversi menjadi satu channel (luminance) sebelum digunakan. Jika berupa tensor, tensor tersebut harus berisi satu channel warna (L) bukan 3, sehingga bentuk yang diharapkan adalah(B, H, W, 1). - masked_image_latents (
torch.Tensor, opsional) — Latent yang telah di-encode sebelumnya dari gambar yang dimasker (untuk inpainting). - height (
int, opsional, defaultnya self.unet.config.sample_size * self.vae_scale_factor) — Tinggi gambar yang dihasilkan dalam piksel. Nilai ini secara default diatur ke 1024 untuk hasil terbaik. Nilai di bawah 512 piksel tidak akan berfungsi dengan baik untuk stabilityai/stable-diffusion-xl-base-1.0 dan checkpoint yang tidak secara khusus dihaluskan pada resolusi rendah. - width (
int, opsional, defaultnya self.unet.config.sample_size * self.vae_scale_factor) — Lebar gambar yang dihasilkan dalam piksel. Nilai ini secara default diatur ke 1024 untuk hasil terbaik. Nilai di bawah 512 piksel tidak akan berfungsi dengan baik untuk stabilityai/stable-diffusion-xl-base-1.0 dan checkpoint yang tidak secara khusus dihaluskan pada resolusi rendah. - padding_mask_crop (
int, opsional, defaultNone) — Ukuran margin pada crop yang akan diterapkan ke gambar dan masking. JikaNone, tidak ada crop yang diterapkan ke image dan mask_image. Jikapadding_mask_cropbukanNone, proses akan terlebih dahulu menemukan area persegi panjang dengan rasio aspek yang sama dengan gambar dan mencakup semua area yang di-mask, kemudian memperluas area tersebut berdasarkanpadding_mask_crop. Gambar dan mask_image kemudian akan di-crop berdasarkan area yang telah diperluas sebelum di-resize ke ukuran gambar asli untuk inpainting. Hal ini berguna ketika area yang di-mask kecil sementara gambar besar dan mengandung informasi yang tidak relevan untuk inpainting, seperti latar belakang. - strength (
float, opsional, default 0.9999) — Secara konseptual, menunjukkan seberapa besar transformasi pada bagian yang dimasker dariimagereferensi. Nilainya harus antara 0 dan 1.imageakan digunakan sebagai titik awal, dengan semakin banyak noise yang ditambahkan seiring bertambahnya nilaistrength. Jumlah langkah denoising bergantung pada jumlah noise yang awalnya ditambahkan. Ketikastrengthbernilai 1, noise yang ditambahkan akan maksimal dan proses denoising akan berjalan untuk jumlah iterasi penuh yang ditentukan dalamnum_inference_steps. Dengan demikian, nilai 1 pada dasarnya mengabaikan bagian yang dimasker dariimagereferensi. Perhatikan bahwa jikadenoising_startdideklarasikan sebagai bilangan bulat, nilaistrengthakan diabaikan. - num_inference_steps (
int, opsional, default 50) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat. - timesteps (
list[int], opsional) — Timesteps kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumentimestepsdi metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsdilewatkan akan digunakan. Harus dalam urutan menurun. - sigmas (
list[float], opsional) — Sigmas kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumensigmasdalam metodeset_timestepsmereka. Jika tidak didefinisikan, perilaku default saatnum_inference_stepsditeruskan akan digunakan. - denoising_start (
float, opsional) — Jika ditentukan, menunjukkan fraksi (antara 0.0 dan 1.0) dari total proses denoising yang akan dilewati sebelum proses dimulai. Akibatnya, bagian awal dari proses denoising diabaikan dan dianggap bahwaimageyang diberikan adalah gambar yang telah didenosing sebagian. Perhatikan bahwa ketika ini ditentukan, strength akan diabaikan. Parameterdenoising_startsangat bermanfaat ketika pipeline ini diintegrasikan ke dalam setup multi-pipeline “Mixture of Denoisers”, seperti yang dijelaskan dalam Refining the Image Output. - denoising_end (
float, opsional) — Jika ditentukan, menentukan fraksi (antara 0.0 dan 1.0) dari total proses denoising yang harus diselesaikan sebelum proses tersebut dihentikan secara dini secara sengaja. Akibatnya, sampel yang dikembalikan masih akan mempertahankan sejumlah besar noise (sekitar 20% akhir dari timesteps masih diperlukan) dan harus didenoise oleh pipeline penerus yang memilikidenoising_startdiatur ke 0.8 sehingga hanya mendenoise 20% akhir dari scheduler. Parameter denoising_end sebaiknya digunakan ketika pipeline ini merupakan bagian dari setup multi-pipeline “Mixture of Denoisers”, seperti yang dijelaskan dalam Refining the Image Output. - guidance_scale (
float, opsional, default 7.5) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance.guidance_scaledidefinisikan sebagaiwdari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengaturguidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait denganpromptteks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - negative_prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar, yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,negative_promptdigunakan di kedua text-encoder - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks pooled yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, mis. pembobotan prompt. Jika tidak disediakan, embedding teks pooled akan dibuat dari argumen inputprompt. - negative_pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang sudah digenerate sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, pooled negative_prompt_embeds akan digenerate dari argumen inputnegative_prompt. - ip_adapter_image — (
PipelineImageInput, opsional): Input gambar opsional untuk bekerja dengan IP Adapters. - ip_adapter_image_embeds (
list[torch.Tensor], opsional) — Embedding gambar yang telah dibuat sebelumnya untuk IP-Adapter. Ini harus berupa daftar dengan panjang yang sama dengan jumlah IP-adapter. Setiap elemen harus berupa tensor dengan bentuk(batch_size, num_images, emb_dim). Harus mengandung embedding gambar negatif jikado_classifier_free_guidancediatur keTrue. Jika tidak disediakan, embedding dihitung dari argumen inputip_adapter_image. - num_images_per_prompt (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt. - eta (
float, opsional, default 0.0) — Bersesuaian dengan parameter eta (η) dalam paper DDIM: https://huggingface.co/papers/2010.02502. Hanya berlaku untuk schedulers.DDIMScheduler, akan diabaikan untuk yang lain. - generator (
torch.Generator, opsional) — Satu atau daftar generator torch untuk membuat proses generasi menjadi deterministik. - latents (
torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya, diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. Dapat digunakan untuk menyesuaikan generasi yang sama dengan prompt yang berbeda. Jika tidak disediakan, tensor latents akan dibuat dengan pengambilan sampel menggunakangeneratoracak yang diberikan. - output_type (
str, opsional, defaultnya"pil") — Format output dari generate image. Pilih antara PIL:PIL.Image.Imageataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan StableDiffusionPipelineOutput alih-alih tuple biasa. - cross_attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - original_size (
tuple[int], opsional, default (1024, 1024)) — Jikaoriginal_sizetidak sama dengantarget_size, gambar akan tampak di-downsample atau di-upsample.original_sizedefault ke(height, width)jika tidak ditentukan. Bagian dari micro-conditioning SDXL seperti dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. - crops_coords_top_left (
tuple[int], opsional, default (0, 0)) —crops_coords_top_leftdapat digunakan untuk menghasilkan gambar yang tampak “dipotong” dari posisicrops_coords_top_leftke bawah. Gambar yang bagus dan terpusat biasanya dicapai dengan mengaturcrops_coords_top_leftke (0, 0). Bagian dari micro-conditioning SDXL seperti dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. - target_size (
tuple[int], opsional, defaultnya (1024, 1024)) — Untuk sebagian besar kasus,target_sizesebaiknya diatur ke tinggi dan lebar yang diinginkan dari gambar yang dihasilkan. Jika tidak ditentukan, nilainya akan default ke(height, width). Bagian dari micro-conditioning SDXL seperti dijelaskan dalam bagian 2.2 dari https://huggingface.co/papers/2307.01952. - negative_original_size (
tuple[int], opsional, default (1024, 1024)) — Untuk mengondisikan proses generasi secara negatif berdasarkan resolusi gambar tertentu. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Untuk informasi lebih lanjut, lihat thread issue ini: https://github.com/huggingface/diffusers/issues/4208. - negative_crops_coords_top_left (
tuple[int], opsional, default (0, 0)) — Untuk mengondisikan proses generasi secara negatif berdasarkan koordinat crop tertentu. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Untuk informasi lebih lanjut, lihat thread issue ini: https://github.com/huggingface/diffusers/issues/4208. - negative_target_size (
tuple[int], opsional, default (1024, 1024)) — Untuk mengondisikan proses generasi secara negatif berdasarkan resolusi gambar target. Sebaiknya sama dengantarget_sizeuntuk sebagian besar kasus. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Untuk informasi lebih lanjut, lihat thread issue ini: https://github.com/huggingface/diffusers/issues/4208. - aesthetic_score (
float, opsional, default 6.0) — Digunakan untuk mensimulasikan skor estetika dari gambar yang dihasilkan dengan memengaruhi kondisi teks positif. Bagian dari micro-conditioning SDXL seperti yang dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. - negative_aesthetic_score (
float, opsional, default 2.5) — Bagian dari micro-conditioning SDXL seperti dijelaskan di bagian 2.2 dari https://huggingface.co/papers/2307.01952. Dapat digunakan untuk mensimulasikan skor estetika dari gambar yang dihasilkan dengan memengaruhi kondisi teks negatif. - guidance_rescale (
float, opsional, default 0.0) — Faktor rescale guidance dari Common Diffusion Noise Schedules and Sample Steps are Flawed. - clip_skip (
int, opsional) — Jumlah lapisan yang akan dilewati dari CLIP saat menghitung embedding prompt. Nilai 1 berarti output dari lapisan pra-akhir akan digunakan untuk menghitung embedding prompt. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, opsional) — Fungsi atau subkelas dariPipelineCallbackatauMultiPipelineCallbacksyang dipanggil di akhir setiap langkah denoising selama inferensi, dengan argumen berikut:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsakan berisi daftar semua tensor sesuai yang ditentukan olehcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, opsional) — Daftar input tensor untuk fungsicallback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumencallback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut._callback_tensor_inputsdari kelas pipeline Anda.
Mengembalikan
~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput atau tuple
~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput jika return_dict bernilai True, selain itu berupa
tuple. tuple. Saat mengembalikan tuple, elemen pertama adalah daftar berisi gambar yang dihasilkan.
Fungsi yang dipanggil saat memanggil pipeline untuk generasi.
Contoh:
>>> import torch
>>> from diffusers import StableDiffusionXLInpaintPipeline
>>> from diffusers.utils import load_image
>>> pipe = StableDiffusionXLInpaintPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0",
... torch_dtype=torch.float16,
... variant="fp16",
... use_safetensors=True,
... )
>>> pipe.to("cuda")
>>> img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
>>> mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
>>> init_image = load_image(img_url).convert("RGB")
>>> mask_image = load_image(mask_url).convert("RGB")
>>> prompt = "A majestic tiger sitting on a bench"
>>> image = pipe(
... prompt=prompt, image=init_image, mask_image=mask_image, num_inference_steps=50, strength=0.80
... ).images[0]encode_prompt
< source >( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,promptdigunakan di kedua text-encoder - device — (
torch.device): perangkat torch - num_images_per_prompt (
int) — jumlah gambar yang harus dihasilkan per prompt - do_classifier_free_guidance (
bool) — apakah akan menggunakan classifier free guidance atau tidak - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - negative_prompt_2 (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar, yang akan dikirim ketokenizer_2dantext_encoder_2. Jika tidak didefinisikan,negative_promptdigunakan di kedua text-encoder - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen inputprompt. - negative_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen inputnegative_prompt. - pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks pooled yang telah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, mis. pembobotan prompt. Jika tidak disediakan, embedding teks pooled akan dibuat dari argumen inputprompt. - negative_pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks negatif yang sudah digenerate sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, pooled negative_prompt_embeds akan digenerate dari argumen inputnegative_prompt. - lora_scale (
float, opsional) — Skala LoRA yang akan diterapkan ke semua lapisan LoRA dari text encoder jika lapisan LoRA dimuat. - clip_skip (
int, opsional) — Jumlah lapisan yang akan dilewati dari CLIP saat menghitung embedding prompt. Nilai 1 berarti output dari lapisan pra-akhir akan digunakan untuk menghitung embedding prompt.
Mengkodekan prompt menjadi hidden states dari text encoder.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Parameter
- w (
torch.Tensor) — Menghasilkan vektor embedding dengan skala panduan yang ditentukan untuk selanjutnya memperkaya embedding timestep. - embedding_dim (
int, opsional, default 512) — Dimensi dari embedding yang akan dihasilkan. - dtype (
torch.dtype, opsional, defaulttorch.float32) — Tipe data dari embedding yang dihasilkan.
Mengembalikan
torch.Tensor
Vektor embedding dengan bentuk (len(w), embedding_dim).