Diffusers documentation
T2I-Adapter
T2I-Adapter
T2I-Adapter: Learning Adapters to Dig out More Controllable Ability for Text-to-Image Diffusion Models oleh Chong Mou, Xintao Wang, Liangbin Xie, Jian Zhang, Zhongang Qi, Ying Shan, Xiaohu Qie.
Dengan menggunakan model pretrained, kita dapat menyediakan gambar kontrol (misalnya, peta kedalaman) untuk mengendalikan generasi teks-ke-gambar Stable Diffusion sehingga mengikuti struktur gambar kedalaman dan mengisi detailnya.
Abstrak dari makalah tersebut adalah sebagai berikut:
Kemampuan generatif yang luar biasa dari model teks-ke-gambar (T2I) berskala besar telah menunjukkan kekuatan yang kuat dalam mempelajari struktur kompleks dan semantik yang bermakna. Namun, mengandalkan hanya prompt teks tidak dapat sepenuhnya memanfaatkan pengetahuan yang telah dipelajari oleh model, terutama ketika kontrol yang fleksibel dan akurat (misalnya, warna dan struktur) diperlukan. Dalam makalah ini, kami bertujuan untuk “menggali” kemampuan yang telah dipelajari secara implisit oleh model T2I, dan kemudian menggunakannya secara eksplisit untuk mengontrol generasi secara lebih granular. Secara spesifik, kami mengusulkan untuk mempelajari T2I-Adapter yang sederhana dan ringan untuk menyelaraskan pengetahuan internal dalam model T2I dengan sinyal kontrol eksternal, sambil membekukan model T2I besar yang asli. Dengan cara ini, kami dapat melatih berbagai adapter sesuai dengan kondisi yang berbeda, mencapai efek kontrol dan pengeditan yang kaya pada warna dan struktur hasil generasi. Lebih lanjut, T2I-Adapter yang diusulkan memiliki sifat-sifat yang menarik dengan nilai praktis, seperti kemampuan komposisi dan kemampuan generalisasi. Eksperimen yang luas menunjukkan bahwa T2I-Adapter kami memiliki kualitas generasi yang menjanjikan dan berbagai aplikasi.
Model ini disumbangkan oleh kontributor komunitas HimariO ❤️ .
StableDiffusionAdapterPipeline
kelas diffusers.StableDiffusionAdapterPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModeladapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter]scheduler: KarrasDiffusionSchedulerssafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_safety_checker: bool = True )
Parameter
- adapter (
T2IAdapteratauMultiAdapterataulist[T2IAdapter]) — Menyediakan kondisioning tambahan ke unet selama proses denoising. Jika Anda mengatur beberapa Adapter sebagai list, output dari masing-masing Adapter akan dijumlahkan untuk membuat satu kondisioning tambahan yang digabungkan. - adapter_weights (
list[float], opsional, default None) — daftar float yang mewakili bobot yang akan dikalikan ke setiap output adapter sebelum dijumlahkan. - 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 menggunakan bagian teks dari CLIP, khususnya varian clip-vit-large-patch14. - tokenizer (
CLIPTokenizer) — Tokenizer 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. - safety_checker (
StableDiffusionSafetyChecker) — Modul klasifikasi yang memperkirakan apakah gambar yang dihasilkan dapat dianggap ofensif atau berbahaya. Silakan lihat model card untuk detailnya. - feature_extractor (
CLIPImageProcessor) — Model yang mengekstrak fitur dari gambar yang dihasilkan untuk digunakan sebagai input bagisafety_checker.
Pipeline untuk generasi teks-ke-gambar menggunakan Stable Diffusion yang diperkuat dengan T2I-Adapter https://huggingface.co/papers/2302.08453
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.)
__call__
< source >( prompt: str | list[str] = Noneimage: typing.Union[torch.Tensor, PIL.Image.Image, list[PIL.Image.Image]] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list = Nonesigmas: list = Noneguidance_scale: float = 7.5negative_prompt: 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] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Noneadapter_conditioning_scale: float | list[float] = 1.0clip_skip: int | None = None ) → ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput or tuple
Parameter
- prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskanprompt_embedssebagai gantinya. - image (
torch.Tensor,PIL.Image.Image,list[torch.Tensor]ataulist[PIL.Image.Image]ataulist[list[PIL.Image.Image]]) — Kondisi input Adapter. Adapter menggunakan kondisi input ini untuk menghasilkan panduan ke Unet. Jika tipe ditentukan sebagaitorch.Tensor, nilai tersebut diteruskan ke Adapter apa adanya. PIL.Image.Image` juga dapat diterima sebagai gambar. Gambar kontrol secara otomatis diubah ukurannya agar sesuai dengan gambar keluaran. - height (
int, opsional, defaultnya self.unet.config.sample_size * self.vae_scale_factor) — Tinggi gambar yang dihasilkan dalam piksel. - width (
int, opsional, defaultnya self.unet.config.sample_size * self.vae_scale_factor) — Lebar gambar yang dihasilkan dalam piksel. - 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. - 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 memandu generasi gambar. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Jika tidak didefinisikan, Anda harus meneruskannegative_prompt_embedssebagai gantinya. Diabaikan saat tidak menggunakan panduan (yaitu, diabaikan jikaguidance_scalekurang dari1). - 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. - output_type (
str, opsional, defaultnya"pil") — Format output dari generate image. Pilih antara PIL:PIL.Image.Imageataunp.array. - return_dict (
bool, opsional, defaultnyaTrue) — Apakah akan mengembalikan~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutputalih-alih tuple biasa. - callback (
Callable, opsional) — Fungsi yang akan dipanggil setiapcallback_stepslangkah selama inferensi. Fungsi ini akan dipanggil dengan argumen berikut:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, opsional, default 1) — Frekuensi pemanggilan fungsicallback. Jika tidak ditentukan, callback akan dipanggil di setiap langkah. - cross_attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttnProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - adapter_conditioning_scale (
floatataulist[float], opsional, default 1.0) — Output dari adapter dikalikan denganadapter_conditioning_scalesebelum ditambahkan ke residual di unet asli. Jika beberapa adapter ditentukan saat init, Anda dapat mengatur skala yang sesuai sebagai list. - 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.
Mengembalikan
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput atau tuple
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput if return_dict is True, otherwise a
tuple. When returning a tuple, the first element is a list with the generated images, and the second element is a list of bools denoting whether the corresponding generated image likely represents "not-safe-for-work" (nsfw) content, according to the safety_checker`.
Fungsi yang dipanggil saat memanggil pipeline untuk generasi.
Contoh:
>>> from PIL import Image
>>> from diffusers.utils import load_image
>>> import torch
>>> from diffusers import StableDiffusionAdapterPipeline, T2IAdapter
>>> image = load_image(
... "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/color_ref.png"
... )
>>> color_palette = image.resize((8, 8))
>>> color_palette = color_palette.resize((512, 512), resample=Image.Resampling.NEAREST)
>>> adapter = T2IAdapter.from_pretrained("TencentARC/t2iadapter_color_sd14v1", torch_dtype=torch.float16)
>>> pipe = StableDiffusionAdapterPipeline.from_pretrained(
... "CompVis/stable-diffusion-v1-4",
... adapter=adapter,
... torch_dtype=torch.float16,
... )
>>> pipe.to("cuda")
>>> out_image = pipe(
... "At night, glowing cubes in front of the beach",
... image=color_palette,
... ).images[0]enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Parameter
- slice_size (
stratauint, opsional, default"auto") — Jika"auto", input ke attention heads dibagi dua, sehingga attention dihitung dalam dua langkah. Jika"max", jumlah memori yang dihemat maksimal dengan hanya menjalankan satu slice pada satu waktu. Jika angka diberikan, digunakan sebanyak slice sebanyakattention_head_dim // slice_size. Dalam kasus ini,attention_head_dimharus merupakan kelipatan darislice_size.
Aktifkan perhitungan perhatian terpotong. Ketika opsi ini diaktifkan, modul perhatian membagi tensor input menjadi potongan-potongan untuk menghitung perhatian dalam beberapa langkah. Untuk lebih dari satu kepala perhatian, perhitungan dilakukan secara berurutan untuk setiap kepala. Ini berguna untuk menghemat sebagian memori dengan mengorbankan sedikit penurunan kecepatan.
> ⚠️ Jangan aktifkan attention slicing jika Anda sudah menggunakan
scaled_dot_product_attention(SDPA) dari PyTorch > 2.0 atau xFormers. Perhitungan attention ini sudah sangat hemat memori sehingga Anda tidak perlu mengaktifkan > fungsi ini. Jika Anda mengaktifkan attention slicing dengan SDPA atau xFormers, hal itu dapat menyebabkan perlambatan yang serius!
Contoh:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]Nonaktifkan perhitungan perhatian yang dipotong. Jika enable_attention_slicing sebelumnya dipanggil, perhatian dihitung dalam satu langkah.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Parameter
- attention_op (
Callable, opsional) — Timpa operator defaultNoneuntuk digunakan sebagai argumenoppada fungsimemory_efficient_attention()dari xFormers.
Aktifkan perhatian hemat memori dari xFormers. Ketika opsi ini diaktifkan, Anda seharusnya mengamati penggunaan memori GPU yang lebih rendah dan potensi percepatan selama inferensi. Percepatan selama pelatihan tidak dijamin.
> ⚠️ Ketika memory efficient attention dan sliced attention keduanya diaktifkan, memory efficient attention memiliki > prioritas.
Contoh:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)Nonaktifkan perhatian hemat memori dari xFormers.
encode_prompt
< source >( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Parameter
- prompt (
strataulist[str], opsional) — prompt yang akan dienkod - 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). - 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. - 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).
StableDiffusionXLAdapterPipeline
kelas diffusers.StableDiffusionXLAdapterPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModeladapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter]scheduler: KarrasDiffusionSchedulersforce_zeros_for_empty_prompt: bool = Truefeature_extractor: CLIPImageProcessorPil = Noneimage_encoder: CLIPVisionModelWithProjection = None )
Parameter
- adapter (
T2IAdapteratauMultiAdapterataulist[T2IAdapter]) — Menyediakan kondisioning tambahan ke unet selama proses denoising. Jika Anda mengatur beberapa Adapter sebagai list, output dari masing-masing Adapter akan dijumlahkan untuk membuat satu kondisioning tambahan yang digabungkan. - adapter_weights (
list[float], opsional, default None) — daftar float yang mewakili bobot yang akan dikalikan ke setiap output adapter sebelum dijumlahkan. - 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 menggunakan bagian teks dari CLIP, khususnya varian clip-vit-large-patch14. - tokenizer (
CLIPTokenizer) — Tokenizer 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. - safety_checker (
StableDiffusionSafetyChecker) — Modul klasifikasi yang memperkirakan apakah gambar yang dihasilkan dapat dianggap ofensif atau berbahaya. Silakan lihat model card untuk detailnya. - feature_extractor (
CLIPImageProcessor) — Model yang mengekstrak fitur dari gambar yang dihasilkan untuk digunakan sebagai input bagisafety_checker.
Pipeline untuk generasi teks-ke-gambar menggunakan Stable Diffusion yang diperkuat dengan T2I-Adapter https://huggingface.co/papers/2302.08453
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]] = 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 = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_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 = Noneadapter_conditioning_scale: float | list[float] = 1.0adapter_conditioning_factor: float = 1.0clip_skip: int | None = None ) → ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput 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.Tensor,PIL.Image.Image,list[torch.Tensor]ataulist[PIL.Image.Image]ataulist[list[PIL.Image.Image]]) — Kondisi input Adapter. Adapter menggunakan kondisi input ini untuk menghasilkan panduan ke Unet. Jika tipe ditentukan sebagaitorch.Tensor, nilai tersebut diteruskan ke Adapter apa adanya. PIL.Image.Image` juga dapat diterima sebagai gambar. Gambar kontrol secara otomatis diubah ukurannya agar sesuai dengan gambar keluaran. - height (
int, opsional, defaultnya self.unet.config.sample_size * self.vae_scale_factor) — Tinggi gambar yang dihasilkan dalam piksel. 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 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.StableDiffusionAdapterPipelineOutputdaripada tuple biasa. - callback (
Callable, opsional) — Fungsi yang akan dipanggil setiapcallback_stepslangkah selama inferensi. Fungsi ini akan dipanggil dengan argumen berikut:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, opsional, default 1) — Frekuensi pemanggilan fungsicallback. Jika tidak ditentukan, callback akan dipanggil di setiap langkah. - 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. 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. - adapter_conditioning_scale (
floatataulist[float], opsional, default 1.0) — Output dari adapter dikalikan denganadapter_conditioning_scalesebelum ditambahkan ke residual di unet asli. Jika beberapa adapter ditentukan saat init, Anda dapat mengatur skala yang sesuai sebagai list. - adapter_conditioning_factor (
float, opsional, default 1.0) — Fraksi timestep di mana adapter harus diterapkan. Jikaadapter_conditioning_factoradalah0.0, adapter tidak diterapkan sama sekali. Jikaadapter_conditioning_factoradalah1.0, adapter diterapkan untuk semua timestep. Jikaadapter_conditioning_factoradalah0.5, adapter diterapkan untuk setengah dari timestep. - 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.
Mengembalikan
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput atau tuple
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput 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 T2IAdapter, StableDiffusionXLAdapterPipeline, DDPMScheduler
>>> from diffusers.utils import load_image
>>> sketch_image = load_image("https://huggingface.co/Adapter/t2iadapter/resolve/main/sketch.png").convert("L")
>>> model_id = "stabilityai/stable-diffusion-xl-base-1.0"
>>> adapter = T2IAdapter.from_pretrained(
... "Adapter/t2iadapter",
... subfolder="sketch_sdxl_1.0",
... torch_dtype=torch.float16,
... adapter_type="full_adapter_xl",
... )
>>> scheduler = DDPMScheduler.from_pretrained(model_id, subfolder="scheduler")
>>> pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
... model_id, adapter=adapter, torch_dtype=torch.float16, variant="fp16", scheduler=scheduler
... ).to("cuda")
>>> generator = torch.manual_seed(42)
>>> sketch_image_out = pipe(
... prompt="a photo of a dog in real world, high quality",
... negative_prompt="extra digit, fewer digits, cropped, worst quality, low quality",
... image=sketch_image,
... generator=generator,
... guidance_scale=7.5,
... ).images[0]enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Parameter
- slice_size (
stratauint, opsional, default"auto") — Jika"auto", input ke attention heads dibagi dua, sehingga attention dihitung dalam dua langkah. Jika"max", jumlah memori yang dihemat maksimal dengan hanya menjalankan satu slice pada satu waktu. Jika angka diberikan, digunakan sebanyak slice sebanyakattention_head_dim // slice_size. Dalam kasus ini,attention_head_dimharus merupakan kelipatan darislice_size.
Aktifkan perhitungan perhatian terpotong. Ketika opsi ini diaktifkan, modul perhatian membagi tensor input menjadi potongan-potongan untuk menghitung perhatian dalam beberapa langkah. Untuk lebih dari satu kepala perhatian, perhitungan dilakukan secara berurutan untuk setiap kepala. Ini berguna untuk menghemat sebagian memori dengan mengorbankan sedikit penurunan kecepatan.
> ⚠️ Jangan aktifkan attention slicing jika Anda sudah menggunakan
scaled_dot_product_attention(SDPA) dari PyTorch > 2.0 atau xFormers. Perhitungan attention ini sudah sangat hemat memori sehingga Anda tidak perlu mengaktifkan > fungsi ini. Jika Anda mengaktifkan attention slicing dengan SDPA atau xFormers, hal itu dapat menyebabkan perlambatan yang serius!
Contoh:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]Nonaktifkan perhitungan perhatian yang dipotong. Jika enable_attention_slicing sebelumnya dipanggil, perhatian dihitung dalam satu langkah.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Parameter
- attention_op (
Callable, opsional) — Timpa operator defaultNoneuntuk digunakan sebagai argumenoppada fungsimemory_efficient_attention()dari xFormers.
Aktifkan perhatian hemat memori dari xFormers. Ketika opsi ini diaktifkan, Anda seharusnya mengamati penggunaan memori GPU yang lebih rendah dan potensi percepatan selama inferensi. Percepatan selama pelatihan tidak dijamin.
> ⚠️ Ketika memory efficient attention dan sliced attention keduanya diaktifkan, memory efficient attention memiliki > prioritas.
Contoh:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)Nonaktifkan perhatian hemat memori dari xFormers.
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).