Diffusers documentation
LEDITS++
LEDITS++
LEDITS++ diusulkan dalam LEDITS++: Limitless Image Editing using Text-to-Image Models oleh Manuel Brack, Felix Friedrich, Katharina Kornmeier, Linoy Tsaban, Patrick Schramowski, Kristian Kersting, Apolinário Passos.
Abstrak dari makalah tersebut adalah:
Model difusi teks-ke-gambar baru-baru ini mendapat perhatian yang semakin besar karena kemampuannya yang menakjubkan untuk menghasilkan gambar berkeandalan tinggi hanya dari input teks. Upaya penelitian selanjutnya bertujuan untuk memanfaatkan dan menerapkan kemampuannya pada pengeditan gambar nyata. Namun, metode gambar-ke-gambar yang ada sering kali tidak efisien, tidak presisi, dan memiliki keterbatasan dalam hal serbaguna. Metode-metode tersebut membutuhkan penyesuaian halus yang memakan waktu, menyimpang secara tidak perlu dari gambar input, dan/atau tidak mendukung beberapa pengeditan simultan. Untuk mengatasi masalah-masalah ini, kami memperkenalkan LEDITS++, sebuah teknik manipulasi gambar berbasis teks yang efisien namun serbaguna dan presisi. Pendekatan inversi baru dari LEDITS++ tidak memerlukan penyetelan maupun optimasi dan menghasilkan hasil berkeandalan tinggi dengan beberapa langkah difusi. Kedua, metodologi kami mendukung beberapa pengeditan simultan dan tidak bergantung pada arsitektur. Ketiga, kami menggunakan teknik masking implisit baru yang membatasi perubahan pada area gambar yang relevan. Kami mengusulkan benchmark baru TEdBench++ sebagai bagian dari evaluasi kami yang komprehensif. Hasil kami menunjukkan kemampuan LEDITS++ dan perbaikannya dibandingkan metode sebelumnya. Halaman proyek tersedia di https://leditsplusplus-project.static.hf.space .
Anda dapat menemukan informasi tambahan tentang LEDITS++ di halaman proyek dan mencobanya dalam demo.
Karena beberapa masalah kompatibilitas mundur dengan implementasi DPMSolverMultistepScheduler saat ini pada diffusers, implementasi LEdits++ ini tidak lagi dapat menjamin inversi yang sempurna. Masalah ini kemungkinan kecil akan memberikan efek yang terlihat pada kasus penggunaan yang diterapkan. Namun, kami menyediakan implementasi alternatif yang menjamin inversi sempurna di repo GitHub khusus.
Kami menyediakan dua pipeline yang berbeda berdasarkan model pre-trained yang berbeda.
LEditsPPPipelineStableDiffusion
kelas diffusers.LEditsPPPipelineStableDiffusion
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepSchedulersafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_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. 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 (DPMSolverMultistepScheduler atau DDIMScheduler) —
Scheduler yang digunakan bersama
unetuntuk menghilangkan noise pada latens gambar yang telah dienkod. Bisa berupa DPMSolverMultistepScheduler atau DDIMScheduler. Jika scheduler lain yang diberikan, nilai ini akan otomatis diset ke DPMSolverMultistepScheduler. - 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 bagi
safety_checker.
Pipeline untuk pengeditan gambar berbasis teks menggunakan LEDits++ dengan Stable Diffusion.
Model ini mewarisi dari DiffusionPipeline dan dibangun di atas StableDiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
__call__
< source >( negative_prompt: str | list[str] | None = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueediting_prompt: str | list[str] | None = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonereverse_editing_direction: bool | list[bool] | None = Falseedit_guidance_scale: float | list[float] | None = 5edit_warmup_steps: int | list[int] | None = 0edit_cooldown_steps: int | list[int] | None = Noneedit_threshold: float | list[float] | None = 0.9user_mask: typing.Optional[torch.Tensor] = Nonesem_guidance: list[torch.Tensor] | None = Noneuse_cross_attn_mask: bool = Falseuse_intersect_mask: bool = Trueattn_store_steps: list[int] | None = []store_averaged_over_steps: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0clip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple
Parameter
- negative_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Diabaikan ketika tidak menggunakan guidance (yaitu, diabaikan jikaguidance_scalekurang dari1). - generator (
torch.Generator, opsional) — Satu atau daftar generator torch untuk membuat proses generasi menjadi deterministik. - 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 LEditsPPDiffusionPipelineOutput alih-alih tuple biasa. - editing_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Gambar direkonstruksi dengan mengaturediting_prompt = None. Arah panduan prompt harus ditentukan melaluireverse_editing_direction. - editing_prompt_embeds (
torch.Tensor>, opsional) — Embeddings yang sudah dihitung sebelumnya untuk digunakan dalam mengarahkan generasi gambar. Arah panduan embedding harus dispesifikasikan melaluireverse_editing_direction. - 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. - reverse_editing_direction (
boolataulist[bool], opsional, defaultFalse) — Apakah prompt yang sesuai diediting_promptharus ditingkatkan atau dikurangi. - edit_guidance_scale (
floatataulist[float], opsional, default 5) — Skala panduan untuk mengarahkan generasi gambar. Jika diberikan sebagai list, nilainya harus sesuai denganediting_prompt.edit_guidance_scaledidefinisikan sebagais_edari persamaan 12 pada LEDITS++ Paper. - edit_warmup_steps (
floatataulist[float], opsional, default 10) — Jumlah langkah difusi (untuk setiap prompt) di mana panduan tidak akan diterapkan. - edit_cooldown_steps (
floatataulist[float], opsional, defaultNone) — Jumlah langkah difusi (untuk setiap prompt) setelahnya panduan tidak lagi diterapkan. - edit_threshold (
floatataulist[float], opsional, default 0.9) — Ambang batas masking untuk guidance. Ambang batas harus proporsional terhadap area gambar yang dimodifikasi. ‘edit_threshold’ didefinisikan sebagai ‘λ’ dari persamaan 12 pada LEDITS++ Paper. - user_mask (
torch.Tensor, opsional) — Mask yang disediakan pengguna untuk kontrol yang lebih baik atas proses pengeditan. Ini berguna ketika mask implisit LEDITS++ tidak memenuhi preferensi pengguna. - sem_guidance (
list[torch.Tensor], opsional) — daftar vektor panduan yang telah dibuat sebelumnya untuk diterapkan saat generasi. Panjang daftar harus sesuai dengannum_inference_steps. - use_cross_attn_mask (
bool, defaultnyaFalse) — Apakah cross-attention mask digunakan. Cross-attention mask selalu digunakan ketika use_intersect_mask diatur ke true. Cross-attention mask didefinisikan sebagai ‘M^1’ dari persamaan 12 pada paper LEDITS++. - use_intersect_mask (
bool, defaultnyaTrue) — Apakah istilah masking dihitung sebagai irisan dari cross-attention masks dan masks yang diturunkan dari estimasi noise. Cross-attention mask didefinisikan sebagai ‘M^1’ dan masks yang diturunkan dari estimasi noise didefinisikan sebagai ‘M^2’ dari persamaan 12 pada LEDITS++ paper. - attn_store_steps (
list[int], opsional) — Langkah-langkah di mana peta perhatian disimpan dalam AttentionStore. Hanya untuk keperluan visualisasi. - store_averaged_over_steps (
bool, defaultnyaTrue) — Apakah peta perhatian untuk ‘attn_store_steps’ disimpan sebagai rata-rata dari langkah difusi. Jika False, peta perhatian untuk setiap langkah disimpan secara terpisah. Hanya untuk keperluan visualisasi. - cross_attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan dalamself.processor. - guidance_rescale (
float, opsional, default 0.0) — Faktor rescale guidance dari Common Diffusion Noise Schedules and Sample Steps are Flawed. Faktor rescale guidance harus memperbaiki overexposure saat menggunakan zero terminal SNR. - 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
LEditsPPDiffusionPipelineOutput atau tuple
LEditsPPDiffusionPipelineOutput 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 panggilan untuk pipeline pengeditan. Metode invert() harus dipanggil terlebih dahulu. Edit akan selalu dilakukan untuk gambar terbalik terakhir.
Contoh:
>>> import torch
>>> from diffusers import LEditsPPPipelineStableDiffusion
>>> from diffusers.utils import load_image
>>> pipe = LEditsPPPipelineStableDiffusion.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")
>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/cherry_blossom.png"
>>> image = load_image(img_url).resize((512, 512))
>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.1)
>>> edited_image = pipe(
... editing_prompt=["cherry blossom"], edit_guidance_scale=10.0, edit_threshold=0.75
... ).images[0]invert
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]source_prompt: str = ''source_guidance_scale: float = 3.5num_inversion_steps: int = 30skip: float = 0.15generator: typing.Optional[torch.Generator] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneclip_skip: int | None = Noneheight: int | None = Nonewidth: int | None = Noneresize_mode: str | None = 'default'crops_coords: tuple[int, int, int, int] | None = None ) → LEditsPPInversionPipelineOutput
Parameter
- image (
PipelineImageInput) — Input untuk gambar yang akan diedit. Beberapa gambar input harus memiliki rasio aspek yang sama. - source_prompt (
str, defaultnya"") — Prompt yang menggambarkan gambar input yang akan digunakan untuk panduan selama inversi. Panduan dinonaktifkan jikasource_promptadalah"". - source_guidance_scale (
float, defaultnya3.5) — Kekuatan panduan selama inversi. - num_inversion_steps (
int, defaultnya30) — Jumlah total langkah inversi yang dilakukan setelah membuangskiplangkah awal. - skip (
float, default0.15) — Bagian dari langkah-langkah awal yang akan diabaikan untuk inversi dan generasi berikutnya. Nilai yang lebih rendah akan menghasilkan perubahan yang lebih kuat pada gambar input.skipharus berada di antara0dan1. - generator (
torch.Generator, opsional) —torch.Generatoruntuk membuat inversi menjadi deterministik. - 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. - height (
int, opsional, defaultNone) — Tinggi pada gambar yang telah dipreprocess. JikaNone, akan menggunakanget_default_height_width()untuk mendapatkan tinggi default. - width (
int, optional, defaults toNone) -- The width in preprocessed. IfNone, will use get_default_height_width()to get the default width. - resize_mode (
str, opsional, defaultnyadefault) — Mode resize, dapat berupadefaultataufill. Jikadefault, gambar akan di-resize agar muat di dalam lebar dan tinggi yang ditentukan, dan rasio aspek asli mungkin tidak dipertahankan. Jikafill, gambar akan di-resize agar muat di dalam lebar dan tinggi yang ditentukan, mempertahankan rasio aspek, dan kemudian mengpusatkan gambar di dalam dimensi tersebut, mengisi bagian kosong dengan data dari gambar. Jikacrop, gambar akan di-resize agar muat di dalam lebar dan tinggi yang ditentukan, mempertahankan rasio aspek, dan kemudian mengpusatkan gambar di dalam dimensi tersebut, memotong bagian yang berlebih. Perhatikan bahwa resize_modefilldancrophanya didukung untuk input gambar PIL. - crops_coords (
list[tuple[int, int, int, int]], opsional, defaultnyaNone) — Koordinat crop untuk setiap gambar dalam batch. JikaNone, gambar tidak akan di-crop.
Mengembalikan
Output akan berisi gambar input yang telah diubah ukurannya dan rekonstruksi VAE yang sesuai.
Fungsi untuk pipeline inversi gambar seperti yang dijelaskan dalam LEDITS++ Paper. Jika scheduler diatur ke DDIMScheduler, inversi yang diusulkan oleh edit-friendly DPDM akan dilakukan sebagai gantinya.
encode_prompt
< source >( devicenum_images_per_promptenable_edit_guidancenegative_prompt = Noneediting_prompt = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Parameter
- device — (
torch.device): perangkat torch - num_images_per_prompt (
int) — jumlah gambar yang harus dihasilkan per prompt - enable_edit_guidance (
bool) — apakah akan melakukan pengeditan atau merekonstruksi gambar input - 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). - editing_prompt (
strataulist[str], opsional) — Prompt pengeditan yang akan dienkod. Jika tidak didefinisikan, Anda harus meneruskanediting_prompt_embedssebagai gantinya. - editing_prompt_embeds (
torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk menyesuaikan input teks dengan mudah, misalnya 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, 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.
LEditsPPPipelineStableDiffusionXL
kelas diffusers.LEditsPPPipelineStableDiffusionXL
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler | diffusers.schedulers.scheduling_ddim.DDIMSchedulerimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = None )
Parameter
- vae (AutoencoderKL) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan gambar ke dan dari representasi laten.
- text_encoder (CLIPTextModel) — Text-encoder yang dibekukan. Stable Diffusion XL menggunakan bagian teks dari CLIP, khususnya varian clip-vit-large-patch14.
- text_encoder_2 (CLIPTextModelWithProjection) — Text-encoder beku kedua. Stable Diffusion XL menggunakan bagian teks dan pool dari CLIP, khususnya varian laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
- tokenizer (CLIPTokenizer) — Tokenizer dari kelas CLIPTokenizer.
- tokenizer_2 (CLIPTokenizer) — Tokenizer kedua dari kelas CLIPTokenizer.
- unet (UNet2DConditionModel) — Arsitektur U-Net bersyarat untuk mendenois latens gambar yang telah dikodekan.
- scheduler (DPMSolverMultistepScheduler atau DDIMScheduler) —
Scheduler yang digunakan bersama
unetuntuk menghilangkan noise pada latens gambar yang telah dienkod. Bisa berupa DPMSolverMultistepScheduler atau DDIMScheduler. Jika scheduler lain yang diberikan, nilai ini akan otomatis diset ke DPMSolverMultistepScheduler. - force_zeros_for_empty_prompt (
bool, opsional, defaultnya"True") — Apakah embedding prompt negatif harus dipaksa selalu diset ke 0. Lihat juga konfigurasistabilityai/stable-diffusion-xl-base-1-0. - add_watermarker (
bool, opsional) — Apakah akan menggunakan invisible_watermark library untuk memberikan watermark pada gambar output. Jika tidak didefinisikan, nilainya akan default ke True jika paket tersebut terinstal, jika tidak, watermarker tidak akan digunakan.
Pipeline untuk pengeditan gambar berbasis teks menggunakan LEDits++ dengan Stable Diffusion XL.
Model ini mewarisi dari DiffusionPipeline dan dibangun di atas StableDiffusionXLPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan untuk semua pipeline (mengunduh, menyimpan, menjalankan pada perangkat tertentu, dll.).
Selain itu, pipeline mewarisi metode pemuatan berikut:
- LoRA: LEditsPPPipelineStableDiffusionXL.load_lora_weights()
- Ckpt: loaders.FromSingleFileMixin.from_single_file()
serta metode penyimpanan berikut:
- LoRA:
loaders.StableDiffusionXLPipeline.save_lora_weights
__call__
< source >( denoising_end: float | None = Nonenegative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenegative_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] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0crops_coords_top_left: tuple = (0, 0)target_size: tuple[int, int] | None = Noneediting_prompt: str | list[str] | None = Noneediting_prompt_embeddings: typing.Optional[torch.Tensor] = Noneediting_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonereverse_editing_direction: bool | list[bool] | None = Falseedit_guidance_scale: float | list[float] | None = 5edit_warmup_steps: int | list[int] | None = 0edit_cooldown_steps: int | list[int] | None = Noneedit_threshold: float | list[float] | None = 0.9sem_guidance: list[torch.Tensor] | None = Noneuse_cross_attn_mask: bool = Falseuse_intersect_mask: bool = Falseuser_mask: typing.Optional[torch.Tensor] = Noneattn_store_steps: list[int] | None = []store_averaged_over_steps: bool = Trueclip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple
Parameter
- 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, sebagaimana ditentukan oleh timestep diskrit yang dipilih oleh scheduler. Parameter denoising_end sebaiknya digunakan ketika pipeline ini merupakan bagian dari setup multi-pipeline “Mixture of Denoisers”, sebagaimana diuraikan dalam [**Refining the Image - 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 - 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. - 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. - output_type (
str, opsional, defaultnya"pil") — Format output dari generate image. Pilih antara PIL:PIL.Image.Imageataunp.array. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutputalih-alih tuple biasa. - cross_attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor. - guidance_rescale (
float, opsional, default 0,7) — 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. - 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, default (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(width, height). Bagian dari micro-conditioning SDXL seperti dijelaskan dalam bagian 2.2 dari https://huggingface.co/papers/2307.01952. - editing_prompt (
strataulist[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Gambar direkonstruksi dengan mengaturediting_prompt = None. Arah panduan prompt harus ditentukan melaluireverse_editing_direction. - editing_prompt_embeddings (
torch.Tensor, opsional) — Embedding teks edit yang telah dibuat sebelumnya. Dapat digunakan untuk menyesuaikan input teks dengan mudah, misalnya penimbangan prompt. Jika tidak disediakan, editing_prompt_embeddings akan dibuat dari argumen inputediting_prompt. - editing_pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks edit yang sudah digenerate sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya penimbangan prompt. Jika tidak disediakan, editing_prompt_embeddings akan digenerate dari argumen inputediting_prompt. - reverse_editing_direction (
boolataulist[bool], opsional, defaultFalse) — Apakah prompt yang sesuai diediting_promptharus ditingkatkan atau dikurangi. - edit_guidance_scale (
floatataulist[float], opsional, default 5) — Skala panduan untuk mengarahkan generasi gambar. Jika diberikan sebagai list, nilainya harus sesuai denganediting_prompt.edit_guidance_scaledidefinisikan sebagais_edari persamaan 12 pada LEDITS++ Paper. - edit_warmup_steps (
floatataulist[float], opsional, default 10) — Jumlah langkah difusi (untuk setiap prompt) di mana panduan tidak diterapkan. - edit_cooldown_steps (
floatataulist[float], opsional, defaultnyaNone) — Jumlah langkah difusi (untuk setiap prompt) setelahnya panduan tidak lagi diterapkan. - edit_threshold (
floatataulist[float], opsional, default 0.9) — Ambang batas masking untuk guidance. Ambang batas harus proporsional terhadap area gambar yang dimodifikasi. ‘edit_threshold’ didefinisikan sebagai ‘λ’ dari persamaan 12 pada LEDITS++ Paper. - sem_guidance (
list[torch.Tensor], opsional) — daftar vektor panduan yang telah dibuat sebelumnya untuk diterapkan saat generasi. Panjang daftar harus sesuai dengannum_inference_steps. - use_cross_attn_mask — Apakah cross-attention mask digunakan. Cross-attention mask selalu digunakan ketika use_intersect_mask diatur ke true. Cross-attention mask didefinisikan sebagai ‘M^1’ dari persamaan 12 pada paper LEDITS++.
- use_intersect_mask — Apakah istilah masking dihitung sebagai irisan dari mask cross-attention dan mask yang diturunkan dari estimasi noise. Mask cross-attention didefinisikan sebagai ‘M^1’ dan mask yang diturunkan dari estimasi noise didefinisikan sebagai ‘M^2’ dari persamaan 12 pada paper LEDITS++.
- user_mask — Mask yang disediakan pengguna untuk kontrol yang lebih baik atas proses pengeditan. Ini berguna ketika mask implisit dari LEDITS++ tidak memenuhi preferensi pengguna.
- attn_store_steps — Langkah-langkah di mana peta perhatian disimpan dalam AttentionStore. Hanya untuk keperluan visualisasi.
- store_averaged_over_steps — Apakah peta perhatian untuk ‘attn_store_steps’ disimpan sebagai rata-rata dari langkah difusi. Jika False, peta perhatian untuk setiap langkah disimpan secara terpisah. Hanya untuk keperluan visualisasi.
- 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
LEditsPPDiffusionPipelineOutput atau tuple
LEditsPPDiffusionPipelineOutput jika return_dict bernilai True, selain itu berupa `tuple. Saat mengembalikan tuple, elemen pertama adalah daftar berisi gambar yang dihasilkan.
Fungsi panggilan untuk pipeline pengeditan. Metode invert() harus dipanggil terlebih dahulu. Edit akan selalu dilakukan untuk gambar terbalik terakhir.
Contoh:
>>> import torch
>>> from diffusers import LEditsPPPipelineStableDiffusionXL
>>> from diffusers.utils import load_image
>>> pipe = LEditsPPPipelineStableDiffusionXL.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")
>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/tennis.jpg"
>>> image = load_image(img_url).resize((1024, 1024))
>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.2)
>>> edited_image = pipe(
... editing_prompt=["tennis ball", "tomato"],
... reverse_editing_direction=[True, False],
... edit_guidance_scale=[5.0, 10.0],
... edit_threshold=[0.9, 0.85],
... ).images[0]invert
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]source_prompt: str = ''source_guidance_scale = 3.5negative_prompt: str = Nonenegative_prompt_2: str = Nonenum_inversion_steps: int = 50skip: float = 0.15generator: typing.Optional[torch.Generator] = Nonecrops_coords_top_left: tuple = (0, 0)num_zero_noise_steps: int = 3cross_attention_kwargs: dict[str, typing.Any] | None = Noneheight: int | None = Nonewidth: int | None = Noneresize_mode: str | None = 'default'crops_coords: tuple[int, int, int, int] | None = None ) → LEditsPPInversionPipelineOutput
Parameter
- image (
PipelineImageInput) — Input untuk gambar yang akan diedit. Beberapa gambar input harus memiliki rasio aspek yang sama. - source_prompt (
str, defaultnya"") — Prompt yang menggambarkan gambar input yang akan digunakan untuk panduan selama inversi. Panduan dinonaktifkan jikasource_promptadalah"". - source_guidance_scale (
float, defaultnya3.5) — Kekuatan panduan selama inversi. - 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_inversion_steps (
int, defaultnya50) — Jumlah total langkah inversi yang dilakukan setelah membuangskiplangkah awal. - skip (
float, default0.15) — Bagian dari langkah-langkah awal yang akan diabaikan untuk inversi dan generasi berikutnya. Nilai yang lebih rendah akan menghasilkan perubahan yang lebih kuat pada gambar input.skipharus berada di antara0dan1. - generator (
torch.Generator, opsional) —torch.Generatoruntuk membuat inversi menjadi deterministik. - 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. - num_zero_noise_steps (
int, defaultnya3) — Jumlah langkah difusi akhir yang tidak akan melakukan renoise pada gambar saat ini. Jika tidak ada langkah yang diatur ke nol, SD-XL yang dikombinasikan dengan DPMSolverMultistepScheduler akan menghasilkan artefak noise. - cross_attention_kwargs (
dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan keAttentionProcessorseperti yang didefinisikan di bawahself.processordalam diffusers.models.attention_processor.
Mengembalikan
Output akan berisi gambar input yang telah diubah ukurannya dan rekonstruksi VAE yang sesuai.
Fungsi untuk pipeline inversi gambar seperti yang dijelaskan dalam LEDITS++ Paper. Jika scheduler diatur ke DDIMScheduler, inversi yang diusulkan oleh edit-friendly DPDM akan dilakukan sebagai gantinya.
encode_prompt
< source >( device: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1negative_prompt: str | None = Nonenegative_prompt_2: str | None = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = Noneenable_edit_guidance: bool = Trueediting_prompt: str | None = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Noneediting_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None )
Parameter
- device — (
torch.device): perangkat torch - num_images_per_prompt (
int) — jumlah gambar yang harus dihasilkan per prompt - 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. - 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 - 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. - 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. - enable_edit_guidance (
bool) — Apakah akan mengarahkan ke prompt pengeditan atau tidak. - editing_prompt (
strataulist[str], opsional) — Prompt pengeditan yang akan dienkod. Jika tidak didefinisikan dan ‘enable_edit_guidance’ bernilai True, Anda harus meneruskanediting_prompt_embedssebagai gantinya. - editing_prompt_embeds (
torch.Tensor, opsional) — Embedding teks edit yang telah dibuat sebelumnya. Dapat digunakan untuk menyesuaikan input teks dengan mudah, misalnya penimbangan prompt. Jika tidak disediakan dan ‘enable_edit_guidance’ bernilai True, editing_prompt_embeds akan dibuat dari argumen inputediting_prompt. - editing_pooled_prompt_embeds (
torch.Tensor, opsional) — Embedding teks pooled edit yang sudah dibuat sebelumnya. Dapat digunakan untuk menyesuaikan input teks dengan mudah, misalnya penimbangan prompt. Jika tidak disediakan, editing_pooled_prompt_embeds pooled akan dibuat dari argumen inputediting_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).
LEditsPPDiffusionPipelineOutput
kelas diffusers.pipelines.LEditsPPDiffusionPipelineOutput
< 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 difusi LEdits++.
LEditsPPInversionPipelineOutput
kelas diffusers.pipelines.LEditsPPInversionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarrayvae_reconstruction_images: list[PIL.Image.Image] | numpy.ndarray )
Parameter
- input_images (
list[PIL.Image.Image]ataunp.ndarray) — daftar gambar input yang dipotong dan di-resize sebagai gambar PIL dengan panjangbatch_sizeatau array NumPy dengan bentuk(batch_size, height, width, num_channels). - vae_reconstruction_images (
list[PIL.Image.Image]ataunp.ndarray) — daftar rekonstruksi VAE dari semua gambar input sebagai gambar PIL dengan panjangbatch_sizeatau array NumPy dengan bentuk(batch_size, height, width, num_channels).
Kelas output untuk pipeline difusi LEdits++.