Diffusers documentation
Gambar-ke-gambar
Gambar-ke-gambar
Model Stable Diffusion juga dapat diterapkan untuk generasi gambar-ke-gambar dengan meneruskan prompt teks dan gambar awal untuk mengondisikan generasi gambar baru.
StableDiffusionImg2ImgPipeline menggunakan mekanisme difusi-pembersihan derau yang diusulkan dalam SDEdit: Guided Image Synthesis and Editing with Stochastic Differential Equations oleh Chenlin Meng, Yutong He, Yang Song, Jiaming Song, Jiajun Wu, Jun-Yan Zhu, Stefano Ermon.
Abstrak dari makalah tersebut adalah:
Sintesis gambar terpandu memungkinkan pengguna umum untuk membuat dan mengedit gambar yang realistis secara foto dengan usaha minimal. Tantangan utamanya adalah menyeimbangkan kesetiaan terhadap masukan pengguna (misalnya, goresan berwarna yang digambar tangan) dan realisme dari gambar yang disintesis. Metode berbasis GAN yang ada mencoba mencapai keseimbangan tersebut menggunakan GAN bersyarat atau inversi GAN, yang menantang dan sering kali memerlukan data pelatihan tambahan atau fungsi kerugian untuk aplikasi individual. Untuk mengatasi masalah-masalah ini, kami memperkenalkan metode sintesis dan pengeditan gambar baru, Stochastic Differential Editing (SDEdit), yang didasarkan pada prior generatif model difusi, yang mensintesis gambar realistis dengan melakukan denoising secara iteratif melalui persamaan diferensial stokastik (SDE). Diberikan gambar masukan dengan panduan pengguna dari jenis apa pun, SDEdit pertama kali menambahkan noise ke masukan, kemudian melakukan denoising pada gambar yang dihasilkan melalui prior SDE untuk meningkatkan realismenya. SDEdit tidak memerlukan pelatihan atau inversi yang spesifik untuk tugas tertentu dan dapat secara alami mencapai keseimbangan antara realisme dan kesetiaan. SDEdit secara signifikan melampaui metode berbasis GAN state-of-the-art hingga 98,09% dalam hal realisme dan 91,72% dalam hal skor kepuasan keseluruhan, menurut studi persepsi manusia, pada berbagai tugas, termasuk sintesis dan pengeditan gambar berbasis goresan serta kompositing 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!
StableDiffusionImg2ImgPipeline
kelas diffusers.StableDiffusionImg2ImgPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulerssafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilimage_encoder: CLIPVisionModelWithProjection = Nonerequires_safety_checker: bool = True )
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. - safety_checker (
StableDiffusionSafetyChecker) — Modul klasifikasi yang memperkirakan apakah gambar yang dihasilkan dapat dianggap ofensif atau berbahaya. Silakan lihat model card untuk detail lebih lanjut tentang potensi bahaya suatu model. - feature_extractor (CLIPImageProcessor) —
CLIPImageProcessoruntuk mengekstrak fitur dari gambar yang dihasilkan; digunakan sebagai input untuksafety_checker.
Pipeline untuk generasi gambar-ke-gambar 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
- from_single_file() for loading
.ckptfiles - load_ip_adapter() untuk memuat IP Adapter
__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]] = Nonestrength: float = 0.8num_inference_steps: int | None = 50timesteps: list = Nonesigmas: list = Noneguidance_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] = 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 = Noneclip_skip: int = 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 ) → 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]) —Image, array numpy, atau tensor yang merepresentasikan batch gambar untuk digunakan sebagai titik awal. Untuk array numpy dan tensor pytorch, rentang nilai yang diharapkan adalah antara[0, 1]Jika berupa tensor atau daftar tensor, bentuk (shape) yang diharapkan adalah(B, C, H, W)atau(C, H, W). Jika berupa array numpy atau daftar array, bentuk yang diharapkan adalah(B, H, W, C)atau(H, W, C)Parameter ini juga dapat menerima latens gambar sebagaiimage, namun jika latens diberikan secara langsung, latens tersebut tidak akan di-encode ulang. - 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. - 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) — 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. - 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, 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,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
StableDiffusionPipelineOutput atau tuple
Jika return_dict adalah True, StableDiffusionPipelineOutput dikembalikan,
sebaliknya sebuah tuple dikembalikan di mana elemen pertama adalah daftar berisi gambar yang dihasilkan dan elemen
kedua adalah daftar bool yang menunjukkan apakah gambar yang dihasilkan yang sesuai mengandung
konten “not-safe-for-work” (nsfw).
Fungsi panggilan untuk pipeline pada generasi.
Contoh:
>>> import requests
>>> import torch
>>> from PIL import Image
>>> from io import BytesIO
>>> from diffusers import StableDiffusionImg2ImgPipeline
>>> device = "cuda"
>>> model_id_or_path = "stable-diffusion-v1-5/stable-diffusion-v1-5"
>>> pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)
>>> pipe = pipe.to(device)
>>> url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
>>> response = requests.get(url)
>>> init_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> init_image = init_image.resize((768, 512))
>>> prompt = "A fantasy landscape, trending on artstation"
>>> images = pipe(prompt=prompt, image=init_image, strength=0.75, guidance_scale=7.5).images
>>> images[0].save("fantasy_landscape.png")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")from_single_file
< source >( pretrained_model_link_or_path**kwargs )
Parameter
- pretrained_model_link_or_path (
stratauos.PathLike, opsional) — Dapat berupa:- Tautan ke file
.ckpt(misalnya"https://huggingface.co/<repo_id>/blob/main/<path_to_file>.ckpt") di Hub. - Path ke file yang berisi semua bobot pipeline.
- Tautan ke file
- dtype (
stratautorch.dtype, opsional) — Timpatorch.dtypebawaan dan muat model dengan dtype lain. - force_download (
bool, opsional, defaultFalse) — Apakah akan memaksa (mengunduh ulang) bobot model dan file konfigurasi, menimpa versi yang sudah di-cache jika ada. - cache_dir (
str | os.PathLike, opsional) — Path ke direktori tempat konfigurasi model pretrained yang diunduh di-cache jika cache standar tidak digunakan. - 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. - 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. - original_config_file (
str, opsional) — Path ke file config asli yang digunakan untuk melatih model. Jika tidak disediakan, file config akan disimpulkan dari file checkpoint. - config (
str, opsional) — Bisa berupa:- String, repo id (misalnya
CompVis/ldm-text2im-large-256) dari pipeline pretrained yang dihosting di Hub. - Path ke direktori (misalnya
./my_pipeline_directory/) yang berisi konfigurasi komponen pipeline dalam format Diffusers.
- String, repo id (misalnya
- disable_mmap (‘bool’, opsional, default ‘False’) — Apakah akan menonaktifkan mmap saat memuat model Safetensors. Opsi ini dapat memberikan performa yang lebih baik ketika model berada di network mount atau hard drive.
- kwargs (sisa kamus argumen kata kunci, opsional) —
Dapat digunakan untuk menimpa variabel load dan saveable (komponen pipeline dari kelas pipeline tertentu). Komponen yang ditimpa diteruskan langsung ke metode
__init__pipeline. Lihat contoh di bawah untuk informasi lebih lanjut.
Instansiasi DiffusionPipeline dari bobot pipeline pretrained yang disimpan dalam format .ckpt atau .safetensors. Pipeline secara default diatur dalam mode evaluasi (model.eval()).
Contoh:
>>> from diffusers import StableDiffusionPipeline
>>> # Download pipeline from huggingface.co and cache.
>>> pipeline = StableDiffusionPipeline.from_single_file(
... "https://huggingface.co/WarriorMama777/OrangeMixs/blob/main/Models/AbyssOrangeMix/AbyssOrangeMix.safetensors"
... )
>>> # Download pipeline from local file
>>> # file is downloaded under ./v1-5-pruned-emaonly.ckpt
>>> pipeline = StableDiffusionPipeline.from_single_file("./v1-5-pruned-emaonly.ckpt")
>>> # Enable float16 and move to GPU
>>> pipeline = StableDiffusionPipeline.from_single_file(
... "https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/blob/main/v1-5-pruned-emaonly.ckpt",
... torch_dtype=torch.float16,
... )
>>> pipeline.to("cuda")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.
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).
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.