Diffusers documentation

LEDITS++

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LEDITS++

LoRA

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

< >

( 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

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__

< >

( 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 (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Diabaikan ketika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • 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.Image atau np.array.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan LEditsPPDiffusionPipelineOutput alih-alih tuple biasa.
  • editing_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Gambar direkonstruksi dengan mengatur editing_prompt = None. Arah panduan prompt harus ditentukan melalui reverse_editing_direction.
  • editing_prompt_embeds (torch.Tensor>, opsional) — Embeddings yang sudah dihitung sebelumnya untuk digunakan dalam mengarahkan generasi gambar. Arah panduan embedding harus dispesifikasikan melalui reverse_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_embeds akan dibuat dari argumen input negative_prompt.
  • reverse_editing_direction (bool atau list[bool], opsional, default False) — Apakah prompt yang sesuai di editing_prompt harus ditingkatkan atau dikurangi.
  • edit_guidance_scale (float atau list[float], opsional, default 5) — Skala panduan untuk mengarahkan generasi gambar. Jika diberikan sebagai list, nilainya harus sesuai dengan editing_prompt. edit_guidance_scale didefinisikan sebagai s_e dari persamaan 12 pada LEDITS++ Paper.
  • edit_warmup_steps (float atau list[float], opsional, default 10) — Jumlah langkah difusi (untuk setiap prompt) di mana panduan tidak akan diterapkan.
  • edit_cooldown_steps (float atau list[float], opsional, default None) — Jumlah langkah difusi (untuk setiap prompt) setelahnya panduan tidak lagi diterapkan.
  • edit_threshold (float atau list[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 dengan num_inference_steps.
  • use_cross_attn_mask (bool, defaultnya False) — 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, defaultnya True) — 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, defaultnya True) — 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 ke AttentionProcessor seperti yang didefinisikan dalam self.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_kwargs akan berisi daftar semua tensor sesuai yang ditentukan oleh callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opsional) — Daftar input tensor untuk fungsi callback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumen callback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut ._callback_tensor_inputs dari 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

< >

( 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 jika source_prompt adalah "".
  • source_guidance_scale (float, defaultnya 3.5) — Kekuatan panduan selama inversi.
  • num_inversion_steps (int, defaultnya 30) — Jumlah total langkah inversi yang dilakukan setelah membuang skip langkah awal.
  • skip (float, default 0.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. skip harus berada di antara 0 dan 1.
  • generator (torch.Generator, opsional) — torch.Generator untuk membuat inversi menjadi deterministik.
  • cross_attention_kwargs (dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan dalam self.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, default None) — Tinggi pada gambar yang telah dipreprocess. Jika None, akan menggunakan get_default_height_width() untuk mendapatkan tinggi default.
  • width (int, optional, defaults to None) -- The width in preprocessed. If None, will use get_default_height_width() to get the default width.
  • resize_mode (str, opsional, defaultnya default) — Mode resize, dapat berupa default atau fill. Jika default, gambar akan di-resize agar muat di dalam lebar dan tinggi yang ditentukan, dan rasio aspek asli mungkin tidak dipertahankan. Jika fill, 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. Jika crop, 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_mode fill dan crop hanya didukung untuk input gambar PIL.
  • crops_coords (list[tuple[int, int, int, int]], opsional, defaultnya None) — Koordinat crop untuk setiap gambar dalam batch. Jika None, gambar tidak akan di-crop.

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

< >

( 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 (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • editing_prompt (str atau list[str], opsional) — Prompt pengeditan yang akan dienkod. Jika tidak didefinisikan, Anda harus meneruskan editing_prompt_embeds sebagai 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 input prompt.
  • 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 input negative_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

< >

( 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

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:

serta metode penyimpanan berikut:

  • LoRA: loaders.StableDiffusionXLPipeline.save_lora_weights

__call__

< >

( 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 (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • negative_prompt_2 (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar, yang akan dikirim ke tokenizer_2 dan text_encoder_2. Jika tidak didefinisikan, negative_prompt digunakan 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 input negative_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 input negative_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.Image atau np.array.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput alih-alih tuple biasa.
  • cross_attention_kwargs (dict, opsional) — Kamus kwargs yang jika ditentukan akan diteruskan ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam 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 Flawed guidance_scale didefinisikan 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_left dapat digunakan untuk menghasilkan gambar yang tampak “dipotong” dari posisi crops_coords_top_left ke bawah. Gambar yang bagus dan terpusat biasanya dicapai dengan mengatur crops_coords_top_left ke (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_size sebaiknya 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 (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Gambar direkonstruksi dengan mengatur editing_prompt = None. Arah panduan prompt harus ditentukan melalui reverse_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 input editing_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 input editing_prompt.
  • reverse_editing_direction (bool atau list[bool], opsional, default False) — Apakah prompt yang sesuai di editing_prompt harus ditingkatkan atau dikurangi.
  • edit_guidance_scale (float atau list[float], opsional, default 5) — Skala panduan untuk mengarahkan generasi gambar. Jika diberikan sebagai list, nilainya harus sesuai dengan editing_prompt. edit_guidance_scale didefinisikan sebagai s_e dari persamaan 12 pada LEDITS++ Paper.
  • edit_warmup_steps (float atau list[float], opsional, default 10) — Jumlah langkah difusi (untuk setiap prompt) di mana panduan tidak diterapkan.
  • edit_cooldown_steps (float atau list[float], opsional, defaultnya None) — Jumlah langkah difusi (untuk setiap prompt) setelahnya panduan tidak lagi diterapkan.
  • edit_threshold (float atau list[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 dengan num_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_kwargs akan berisi daftar semua tensor sesuai yang ditentukan oleh callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opsional) — Daftar input tensor untuk fungsi callback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumen callback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut ._callback_tensor_inputs dari 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

< >

( 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 jika source_prompt adalah "".
  • source_guidance_scale (float, defaultnya 3.5) — Kekuatan panduan selama inversi.
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • negative_prompt_2 (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar, yang akan dikirim ke tokenizer_2 dan text_encoder_2. Jika tidak didefinisikan, negative_prompt digunakan di kedua text-encoder
  • num_inversion_steps (int, defaultnya 50) — Jumlah total langkah inversi yang dilakukan setelah membuang skip langkah awal.
  • skip (float, default 0.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. skip harus berada di antara 0 dan 1.
  • generator (torch.Generator, opsional) — torch.Generator untuk membuat inversi menjadi deterministik.
  • crops_coords_top_left (tuple[int], opsional, default (0, 0)) — crops_coords_top_left dapat digunakan untuk menghasilkan gambar yang tampak “dipotong” dari posisi crops_coords_top_left ke bawah. Gambar yang bagus dan terpusat biasanya dicapai dengan mengatur crops_coords_top_left ke (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, defaultnya 3) — 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 ke AttentionProcessor seperti yang didefinisikan di bawah self.processor dalam diffusers.models.attention_processor.

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

< >

( 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 (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya.
  • negative_prompt_2 (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar, yang akan dikirim ke tokenizer_2 dan text_encoder_2. Jika tidak didefinisikan, negative_prompt digunakan 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 input negative_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 input negative_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 (str atau list[str], opsional) — Prompt pengeditan yang akan dienkod. Jika tidak didefinisikan dan ‘enable_edit_guidance’ bernilai True, Anda harus meneruskan editing_prompt_embeds sebagai 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 input editing_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 input editing_prompt.

Mengkodekan prompt menjadi hidden states dari text encoder.

get_guidance_scale_embedding

< >

( 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, default torch.float32) — Tipe data dari embedding yang dihasilkan.

Mengembalikan

torch.Tensor

Vektor embedding dengan bentuk (len(w), embedding_dim).

Lihat https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

LEditsPPDiffusionPipelineOutput

kelas diffusers.pipelines.LEditsPPDiffusionPipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )

Parameter

  • images (list[PIL.Image.Image] atau np.ndarray) — daftar gambar PIL yang telah didenoise dengan panjang batch_size atau 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) atau None jika pemeriksaan keamanan tidak dapat dilakukan.

Kelas output untuk pipeline difusi LEdits++.

LEditsPPInversionPipelineOutput

kelas diffusers.pipelines.LEditsPPInversionPipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarrayvae_reconstruction_images: list[PIL.Image.Image] | numpy.ndarray )

Parameter

  • input_images (list[PIL.Image.Image] atau np.ndarray) — daftar gambar input yang dipotong dan di-resize sebagai gambar PIL dengan panjang batch_size atau array NumPy dengan bentuk (batch_size, height, width, num_channels).
  • vae_reconstruction_images (list[PIL.Image.Image] atau np.ndarray) — daftar rekonstruksi VAE dari semua gambar input sebagai gambar PIL dengan panjang batch_size atau array NumPy dengan bentuk (batch_size, height, width, num_channels).

Kelas output untuk pipeline difusi LEdits++.

Update on GitHub