Diffusers documentation
Depth-to-image
Depth-to-image
Model Stable Diffusion juga dapat memperkirakan kedalaman berdasarkan gambar menggunakan MiDaS. Hal ini memungkinkan Anda untuk memberikan prompt teks dan gambar awal untuk mengondisikan pembuatan gambar baru, serta depth_map untuk mempertahankan struktur gambar.
Pastikan untuk melihat bagian Tips Stable Diffusion untuk mempelajari cara mengeksplorasi tradeoff antara kecepatan dan kualitas scheduler, serta cara menggunakan ulang komponen pipeline secara efisien!
Jika Anda tertarik menggunakan salah satu checkpoint resmi untuk tugas tertentu, jelajahi organisasi Hub CompVis dan Stability AI!
StableDiffusionDepth2ImgPipeline
kelas diffusers.StableDiffusionDepth2ImgPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersdepth_estimator: DPTForDepthEstimationfeature_extractor: DPTImageProcessorPil )
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 (clip-vit-large-patch14).
- tokenizer (CLIPTokenizer) —
CLIPTokenizeruntuk melakukan tokenisasi teks. - unet (UNet2DConditionModel) —
UNet2DConditionModeluntuk menghilangkan noise pada latens gambar yang telah dienkod. - 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.
Pipeline untuk generasi gambar-dari-gambar berbasis kedalaman yang dipandu teks menggunakan Stable Diffusion.
Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
Pipeline juga mewarisi metode pemuatan berikut:
- load_textual_inversion() untuk memuat embedding textual inversion
- load_lora_weights() untuk memuat bobot LoRA
- save_lora_weights() untuk menyimpan bobot LoRA
__call__
< source >( prompt: str | list[str] = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonedepth_map: typing.Optional[torch.Tensor] = Nonestrength: float = 0.8num_inference_steps: int | None = 50guidance_scale: float | None = 7.5negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → StableDiffusionPipelineOutput or tuple
Parameter
- prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk memandu generasi gambar. Jika tidak didefinisikan, Anda perlu meneruskanprompt_embeds. - image (
torch.Tensor,PIL.Image.Image,np.ndarray,list[torch.Tensor],list[PIL.Image.Image], ataulist[np.ndarray]) —Imageatau tensor yang mewakili batch gambar untuk digunakan sebagai titik awal. Dapat menerima latens gambar sebagaiimagehanya jikadepth_mapbukanNone. - depth_map (
torch.Tensor, opsional) — Prediksi kedalaman yang akan digunakan sebagai kondisioning tambahan untuk proses generasi gambar. Jika tidak didefinisikan, kedalaman akan diprediksi secara otomatis denganself.depth_estimator. - strength (
float, opsional, default 0.8) — Menunjukkan sejauh manaimagereferensi akan ditransformasi. Nilainya harus antara 0 dan 1.imagedigunakan sebagai titik awal dan semakin tinggistrength, semakin banyak noise yang ditambahkan. Jumlah langkah denoising bergantung pada jumlah noise yang awalnya ditambahkan. Ketikastrengthbernilai 1, noise yang ditambahkan maksimal dan proses denoising berjalan untuk jumlah iterasi penuh yang ditentukan dalamnum_inference_steps. Nilai 1 pada dasarnya mengabaikanimage. - 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. Parameter ini dimodulasi olehstrength. - guidance_scale (
float, opsional, default 7.5) — Nilai guidance scale yang lebih tinggi mendorong model untuk menghasilkan gambar yang sangat terkait denganpromptteks, dengan mengorbankan kualitas gambar yang lebih rendah. Guidance scale diaktifkan ketikaguidance_scale > 1. - negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan apa yang tidak boleh disertakan dalam generasi gambar. Jika tidak didefinisikan, Anda perlu mengirimkannegative_prompt_embedssebagai gantinya. Diabaikan saat tidak menggunakan panduan (guidance_scale < 1). - 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 (η) dari paper DDIM. Hanya berlaku untuk DDIMScheduler, dan diabaikan pada scheduler lainnya. - generator (
torch.Generatorataulist[torch.Generator], opsional) —torch.Generatoruntuk membuat generasi menjadi deterministik. - prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks (penimbangan 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 (penimbangan prompt). Jika tidak disediakan,negative_prompt_embedsakan dibuat dari argumen inputnegative_prompt. - output_type (
str, opsional, default"pil") — Format output dari gambar yang dihasilkan. Pilih antaraPIL.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 dalamself.processor. - 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, opsional) — Fungsi yang dipanggil di akhir setiap langkah denoising selama inferensi. Fungsi ini dipanggil 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
StableDiffusionPipelineOutput atau tuple
Jika return_dict adalah True, StableDiffusionPipelineOutput dikembalikan,
sebaliknya sebuah tuple dikembalikan di mana elemen pertama adalah daftar dengan gambar yang dihasilkan.
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> import torch
>>> import requests
>>> from PIL import Image
>>> from diffusers import StableDiffusionDepth2ImgPipeline
>>> pipe = StableDiffusionDepth2ImgPipeline.from_pretrained(
... "stabilityai/stable-diffusion-2-depth",
... torch_dtype=torch.float16,
... )
>>> pipe.to("cuda")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> init_image = Image.open(requests.get(url, stream=True).raw)
>>> prompt = "two tigers"
>>> n_prompt = "bad, deformed, ugly, bad anotomy"
>>> image = pipe(prompt=prompt, image=init_image, negative_prompt=n_prompt, strength=0.7).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.
load_textual_inversion
< source >( pretrained_model_name_or_path: str | list[str] | dict[str, torch.Tensor] | list[dict[str, torch.Tensor]]token: str | list[str] | None = Nonetokenizer: 'PreTrainedTokenizer' | None = Nonetext_encoder: 'PreTrainedModel' | None = None**kwargs )
Parameter
- pretrained_model_name_or_path (
stratauos.PathLikeataulist[str or os.PathLike]atauDictataulist[Dict]) — Dapat berupa salah satu dari berikut ini atau daftar dari item-item tersebut:- String, model id (misalnya
sd-concepts-library/low-poly-hd-logos-icons) dari model terlatih yang dihosting di Hub. - Path ke direktori (misalnya
./my_text_inversion_directory/) yang berisi bobot textual inversion. - Path ke file (misalnya
./my_text_inversions.pt) yang berisi bobot textual inversion. - torch state dict.
- String, model id (misalnya
- token (
strataulist[str], opsional) — Timpa token yang akan digunakan untuk bobot inversi teks. Jikapretrained_model_name_or_pathberupa daftar, makatokenjuga harus berupa daftar dengan panjang yang sama. - text_encoder (CLIPTextModel, opsional) — Text-encoder yang dibekukan (clip-vit-large-patch14). Jika tidak ditentukan, fungsi akan mengambil self.tokenizer.
- tokenizer (CLIPTokenizer, opsional) —
CLIPTokenizeruntuk melakukan tokenisasi teks. Jika tidak ditentukan, fungsi akan mengambil self.tokenizer. - weight_name (
str, opsional) — Nama file bobot kustom. Ini harus digunakan ketika:- File textual inversion yang disimpan berada dalam format 🤗 Diffusers, tetapi disimpan di bawah nama bobot tertentu seperti
text_inv.bin. - File textual inversion yang disimpan berada dalam format Automatic1111.
- File textual inversion yang disimpan berada dalam format 🤗 Diffusers, tetapi disimpan di bawah nama bobot tertentu seperti
- cache_dir (
str | os.PathLike, opsional) — Path ke direktori tempat konfigurasi model pretrained yang diunduh di-cache jika cache standar tidak digunakan. - force_download (
bool, opsional, defaultFalse) — Apakah akan memaksa (mengunduh ulang) bobot model dan file konfigurasi, menimpa versi yang sudah di-cache jika ada. - proxies (
dict[str, str], opsional) — Kamus server proxy yang digunakan berdasarkan protokol atau endpoint, misalnya{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Proxy digunakan pada setiap permintaan. - local_files_only (
bool, opsional, defaultFalse) — Apakah hanya memuat bobot model dan file konfigurasi lokal atau tidak. Jika diatur keTrue, model tidak akan diunduh dari Hub. - hf_token (
stratau bool, opsional) — Token yang digunakan sebagai otorisasi bearer HTTP untuk file jarak jauh. JikaTrue, token yang dihasilkan daridiffusers-cli login(disimpan di~/.huggingface) akan digunakan. - revision (
str, opsional, default"main") — Versi model spesifik yang akan digunakan. Bisa berupa nama branch, nama tag, commit id, atau identifier apa pun yang diizinkan oleh Git. - subfolder (
str, opsional, default"") — Lokasi subfolder dari file model di dalam repositori model yang lebih besar di Hub atau secara lokal. - mirror (
str, opsional) — Sumber cermin untuk mengatasi masalah aksesibilitas jika Anda mengunduh model di Tiongkok. Kami tidak menjamin ketepatan waktu atau keamanan sumber, dan Anda harus merujuk ke situs cermin untuk informasi lebih lanjut.
Muat embedding Textual Inversion ke dalam text encoder dari StableDiffusionPipeline (format 🤗 Diffusers dan Automatic1111 didukung).
Contoh:
Untuk memuat vektor embedding Textual Inversion dalam format 🤗 Diffusers:
from diffusers import StableDiffusionPipeline
import torch
model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")
pipe.load_textual_inversion("sd-concepts-library/cat-toy")
prompt = "A <cat-toy> backpack"
image = pipe(prompt, num_inference_steps=50).images[0]
image.save("cat-backpack.png")Untuk memuat vektor embedding Textual Inversion dalam format Automatic1111, pastikan untuk mengunduh vektornya terlebih dahulu (misalnya dari civitAI) dan kemudian memuat vektor tersebut
secara lokal:
from diffusers import StableDiffusionPipeline
import torch
model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")
pipe.load_textual_inversion("./charturnerv2.pt", token="charturnerv2")
prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a woman wearing a black jacket and red shirt, best quality, intricate details."
image = pipe(prompt, num_inference_steps=50).images[0]
image.save("character.png")load_lora_weights
< source >( pretrained_model_name_or_path_or_dict: str | dict[str, torch.Tensor]adapter_name: str | None = Nonehotswap: bool = False**kwargs )
Parameter
- pretrained_model_name_or_path_or_dict (
stratauos.PathLikeataudict) — Lihat lora_state_dict(). - adapter_name (
str, opsional) — Nama adapter yang akan digunakan untuk merujuk model adapter yang dimuat. Jika tidak ditentukan, akan digunakandefault_{i}di mana i adalah total jumlah adapter yang dimuat. - low_cpu_mem_usage (
bool, opsional) — Percepat pemuatan model dengan hanya memuat bobot LoRA pretrained dan tidak menginisialisasi bobot acak. - hotswap (
bool, opsional) — Bawaan adalahFalse. Apakah akan mengganti adapter (LoRA) yang sudah ada dengan adapter yang baru dimuat secara in-place. Artinya, alih-alih memuat adapter tambahan, proses ini akan mengambil bobot adapter yang ada dan menggantinya dengan bobot adapter baru. Hal ini bisa lebih cepat dan lebih efisien dalam penggunaan memori. Namun, keuntungan utama dari hotswapping adalah ketika model dikompilasi dengan torch.compile, pemuatan adapter baru tidak memerlukan kompilasi ulang model. Saat menggunakan hotswapping,adapter_nameharus berupa nama adapter yang sudah dimuat.Jika adapter baru dan adapter lama memiliki rank dan/atau alpha LoRA (yaitu scaling) yang berbeda, Anda perlu memanggil metode tambahan sebelum memuat adapter:
Muat bobot LoRA yang ditentukan dalam pretrained_model_name_or_path_or_dict ke self.unet dan self.text_encoder.
Semua kwargs diteruskan ke self.lora_state_dict.
Lihat lora_state_dict() untuk detail lebih lanjut tentang cara state dict dimuat.
Lihat load_lora_into_unet() untuk detail lebih lanjut tentang bagaimana state dict dimuat ke dalam self.unet.
Lihat load_lora_into_text_encoder() untuk detail lebih lanjut tentang bagaimana state dict dimuat ke dalam self.text_encoder.
save_lora_weights
< source >( save_directory: str | os.PathLikeunet_lora_layers: dict = Nonetext_encoder_lora_layers: dict = Noneis_main_process: bool = Trueweight_name: str = Nonesave_function: typing.Callable = Nonesafe_serialization: bool = Trueunet_lora_adapter_metadata = Nonetext_encoder_lora_adapter_metadata = None )
Parameter
- save_directory (
stratauos.PathLike) — Direktori untuk menyimpan parameter LoRA. Akan dibuat jika belum ada. - unet_lora_layers (
dict[str, torch.nn.Module]ataudict[str, torch.Tensor]) — State dict dari lapisan LoRA yang sesuai denganunet. - text_encoder_lora_layers (
dict[str, torch.nn.Module]ataudict[str, torch.Tensor]) — State dict dari lapisan LoRA yang sesuai dengantext_encoder. Anda harus secara eksplisit meneruskan state dict LoRA text encoder karena berasal dari 🤗 Transformers. - is_main_process (
bool, opsional, defaultTrue) — Apakah proses yang memanggil ini adalah proses utama atau tidak. Berguna selama pelatihan terdistribusi dan Anda perlu memanggil fungsi ini di semua proses. Dalam kasus ini, setelis_main_process=Truehanya pada proses utama untuk menghindari kondisi balapan. - save_function (
Callable) — Fungsi yang digunakan untuk menyimpan state dictionary. Berguna selama pelatihan terdistribusi ketika Anda perlu menggantitorch.savedengan metode lain. Dapat dikonfigurasi dengan variabel lingkunganDIFFUSERS_SAVE_MODE. - safe_serialization (
bool, opsional, defaultTrue) — Apakah model disimpan menggunakansafetensorsatau cara tradisional PyTorch denganpickle. - unet_lora_adapter_metadata — Metadata adapter LoRA yang terkait dengan unet untuk diserialisasi bersama state dict.
- text_encoder_lora_adapter_metadata — Metadata adapter LoRA yang terkait dengan text encoder untuk diserialisasi bersama state dict.
Simpan parameter LoRA yang sesuai dengan UNet dan text encoder.
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.
StableDiffusionPipelineOutput
kelas diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )
Parameter
- images (
list[PIL.Image.Image]ataunp.ndarray) — daftar gambar PIL yang telah didenoise dengan panjangbatch_sizeatau array NumPy dengan bentuk(batch_size, height, width, num_channels). - nsfw_content_detected (
list[bool]) — daftar yang menunjukkan apakah gambar yang dihasilkan yang sesuai mengandung konten “not-safe-for-work” (nsfw) atauNonejika pemeriksaan keamanan tidak dapat dilakukan.
Kelas output untuk pipeline Stable Diffusion.